for idx, team in enumerate(draftData[drafter]): earliestEvent = detroit for event in tba.team_events(team, year): if event['start_date'] < earliestEvent['start_date']: if event['event_type'] in [ eventTypes.DISTRICT, eventTypes.REGIONAL ]: earliestEvent = event playPoints = sum( slffFunctions.getPlayPoints('frc' + str(team), earliestEvent['key'])[0:3]) awardPoints = slffFunctions.getAwardPoints(team, earliestEvent['key'])[0] teamPoints = playPoints + awardPoints drafterData['P' + str(idx + 1) + ' Team'] = team drafterData['P' + str(idx + 1) + ' Score'] = teamPoints drafterData['Total'] += teamPoints drafterScores.append(drafterData) drafterScores = sorted(drafterScores, key=lambda k: k['Total'], reverse=True) cols = [ 'Drafter', 'Total', 'P1 Team', 'P1 Score', 'P2 Team', 'P2 Score', 'P3 Team', 'P3 Score' ] gen.listOfDictToCSV( str(year) + ' World Wide Regional Scores', drafterScores, cols)
if team in blueTeams: slot = blueTeams.index(team) + 1 color = 'blue' else: slot = redTeams.index(team) + 1 color = 'red' climbs.append( habLevels.index( match['score_breakdown'][color]['endgameRobot' + str(slot)])) starts.append( habLevels.index( match['score_breakdown'][color]['preMatchLevelRobot' + str(slot)])) lineCross.append(match['score_breakdown'][color][ 'habLineRobot' + str(slot)] == 'CrossedHabLineInSandstorm') except: print('Match', match['key'], 'no work') outList.append({ 'Team': team, 'Avg Climb': stat.mean(climbs), 'Avg Start': stat.mean(starts), 'Max Start': max(starts), 'Line Cross': sum(lineCross) / matches }) gen.listOfDictToCSV( '2019chcmpData', outList, ['Team', 'Avg Climb', 'Avg Start', 'Max Start', 'Line Cross'])
import gen import eventTypes tba = gen.setup() year = 2019 regionals = [] for event in tba.events(2019): if event['event_type'] == eventTypes.REGIONAL: if event['country'] != 'China': regionals.append({ 'Code': event['key'], 'Week': event['week'], 'Start Date': event['start_date'] }) regionals = sorted(regionals, key=lambda k: k['Start Date']) gen.listOfDictToCSV( str(year) + ' Regionals', regionals, ['Code', 'Week', 'Start Date'])
import gen tba = gen.setup() eventList = tba.events(2018) data = [] for event in eventList: if event['event_type'] in range(0, 10): data.append({ 'Name': event['name'], 'State': event['state_prov'], 'Country': event['country'], 'Type': event['event_type_string'] }) gen.listOfDictToCSV('2018 Event Base Data', data, ['Name', 'State', 'Country', 'Type'])
import eventTypes import datetime import gen current_date = datetime.datetime.now().strftime('%Y-%m-%d') tba = gen.setup() offList = [] for event in tba.events(2019): if event.event_type == eventTypes.OFFSEASON: if event.start_date > current_date: offList.append({ 'name': event.name, 'code': event.key, 'start': event.start_date, 'end': event.end_date }) offList = sorted(offList, key=lambda k: k['start']) gen.listOfDictToCSV('2019 OFF Events', offList, ['name', 'code', 'start', 'end'])
if elims['current_level_record']['wins'] > 0: elimPoints += 4 elif elims['level'] == 'sf': elimPoints = 10 if elims['current_level_record']['wins'] > 0: elimPoints += 2 elif elims['level'] == 'qf': elimPoints = 4 if elims['current_level_record']['wins'] > 0: elimPoints += 1 inMatch = 0 for match in elimMatches: inMatch += team in match['alliances']['blue']['team_keys'] inMatch += team in match['alliances']['red']['team_keys'] rec = status['playoff']['record'] backup = inMatch / (rec['wins'] + rec['losses'] + rec['ties']) + 0.5 scales = [1.05, 1.0, 0.95, backup] position = status['alliance']['pick'] scaleFactor = max([scales[position], .25]) total = (elimPoints + qualPoints + rankPoints) * scaleFactor data.append({'team': team[3:], 'rank': rank, 'quals': qualPoints, 'rankP': rankPoints, 'elims': elimPoints, 'total': total, 'factor': scales[position]}) colOrder = ['team', 'rank', 'total', 'factor', 'rankP', 'quals', 'elims'] gen.listOfDictToCSV(EVENT+'FFIT', data, colOrder)
result = { 'Username': userName, 'Forum Count': forumCount, 'Forums': forums, 'Post Count': postCount, 'Team Number': teamNumber, 'Rookie Year': rookieYear, 'Last Activity': lastActive } return result now = datetime.datetime.now() timeStamp = now.strftime("%Y-%m-%d") r = requests.get(modUrl) soup = BeautifulSoup(r.content, "html.parser") modTable = soup.find_all('table')[7].find_all('tr') modData = [] for row in tqdm(modTable): result = processMod(row) if result is not None: modData.append(result) gen.listOfDictToCSV('cdMods-' + timeStamp, modData, [ 'Username', 'Forum Count', 'Post Count', 'Team Number', 'Rookie Year', 'Last Activity', 'Forums' ])
import gen tba = gen.setup() dist = 'chs' year = 2019 distKey = str(year) + dist distEvents = tba.district_events(distKey, False, True) oodPlays = [] for team in tba.district_teams(distKey, False, True): print("Processing team " + team) for event in tba.team_events(team, year, False): if event['key'] not in distEvents: teamModel = { 'Team': team, 'Event': event['event_code'], 'Type': event['event_type'] } oodPlays.append(teamModel) gen.listOfDictToCSV(distKey + "_ood", oodPlays, ['Team', 'Event', 'Type'])
eventData['Quals Matches'] += 1 else: eventData['Elims Matches'] += 1 if match['alliances']['red']['score'] < totalPts or match[ 'alliances']['blue']['score'] < totalPts: if match['comp_level'] == 'qm': eventData['Quals Wins'] += 1 else: eventData['Elims Wins'] += 1 eventData[ 'Total Wins'] = eventData['Quals Wins'] + eventData['Elims Wins'] eventData['Quals Win %'] = round( eventData['Quals Wins'] / eventData['Quals Matches'], 3) eventData['Elims Win %'] = round( eventData['Elims Wins'] / eventData['Elims Matches'], 3) eventData['Total Win %'] = round( eventData['Total Wins'] / eventData['Total Matches'], 3) climbWins.append(eventData) climbWins = sorted(climbWins, key=lambda event: event['Total Win %'], reverse=True) outCols = ['Event'] for prefix in ['Quals', 'Elims', 'Total']: for suffix in [' Wins', ' Matches', ' Win %']: outCols.append(prefix + suffix) gen.listOfDictToCSV(dist.upper() + ' Climbing Wins', climbWins, outCols)
wins = 0 losses = 0 ties = 0 if matches is not None: for idx, match in matches.iterrows(): result = gen.matchResult(team, match) wins += result == 'WIN' losses += result == 'LOSS' ties += result == 'TIE' total = wins + losses + ties if total != 0: if wins == 0: wins = 1 total = total * 10 rating = wins / total wins = 0 else: rating = wins / total recordString = str(wins) + ' / ' + str(losses) + ' / ' + str(ties) records.append({ 'Team': team[3:], 'Rating': rating, 'Record': recordString }) records = sorted(records, key=lambda k: k['Rating']) gen.listOfDictToCSV('Worst Records', records, ['Team', 'Rating', 'Record'])
"type": "Event", "key": "", "zip": "", "state": prov, "country": "Canada", "district": isDist }) teams = [] for page in range(0, 20): gen.progressBar(page, 20) for team in tba.teams(page, YEAR): data.append({ "type": "Team", "key": team['key'], "zip": handleZip(team), "state": team['state_prov'], "country": team['country'], "district": (team['country'] in inDistricts or team['state_prov'] in inDistricts) }) colOrder = ["key", "type", "zip", "state", "country", "district"] gen.listOfDictToCSV(str(YEAR) + "eventLocations", data, colOrder)
import requests import gen cdThread = 'https://www.chiefdelphi.com/t/concerns-about-an-off-season-event/358211.json' data = [{ 'Person': person['name'] if person['name'] != "" else person["username"], 'Posts': person['post_count'], 'Link': 'http://www.chiefdelphi.com/u/' + person['username'] } for person in requests.get(cdThread).json()['details']['participants']] gen.listOfDictToCSV('Girls Thread Posters', data, ['Person', 'Posts', 'Link'])
if len(matches) > 0: winPercent = wins / sum([wins, losses, ties]) * 100 awardCount = 0 awardString = "" awards = gen.readTeamCsv(team, 'awards', currentYear) if awards is not None: awardCount = len(awards) for idx, award in awards.iterrows(): tail = " / " if idx + 1 == len(awards): tail = "" awardString += award['Name'] + tail if winPercent > 0: rookies.append({ 'Team': team, '# of Awards': awardCount, 'Avg OPR': avgOpr, 'Avg Rank': avgRank, 'Wins': wins, 'Win %': winPercent, 'Awards': awardString }) colOrder = [ 'Team', 'Avg OPR', 'Avg Rank', 'Wins', 'Win %', '# of Awards', 'Awards' ] gen.listOfDictToCSV("rookieData" + str(rookieYear), rookies, colOrder)
draftData = pd.read_excel('Waiver Lists.xlsx') waiver2 = pd.read_csv('Waiver2Teams.csv') waiver2.columns = cols waiverTeams = [] for col in tqdm(draftData.columns): draftData[col] = draftData[col].fillna(-1).astype(int).astype(str) key = col baseTeams = [] if "!" in key: pass #Skipping districts for now. #key = key.strip("!") #baseTeams = tba.district_teams(str(2019)+key.lower(), False, True) else: baseTeams = tba.event_teams(key, False, True) currentTeams = [team[3:] for team in baseTeams] for team in currentTeams: if not draftData[col].str.contains(team).any(): if int(team) not in waiver1['Team'].values or int( team) not in waiver2['Team'].values: waiverTeams.append({'Key': key, 'Team': team}) newTeams = len(waiverTeams) print(newTeams, 'new teams found for waivers.') if newTeams > 0: gen.listOfDictToCSV('Waiver3Teams', waiverTeams, cols)
cmpData.append(teamData) finalData = [] for entry in cmpData: finalDataEntry = { 'Team': entry['Team'], 'Max OPR': entry['Max OPR'], 'Avg OPR': entry['Avg OPR'], 'Wins': entry['Wins'], 'Losses': entry['Losses'], 'Ties': entry['Ties'], 'Win %': entry['Win %'], 'Avg Total Pts': stat.mean(entry['total']), 'Max Total Pts': max(entry['total']), 'Avg Play Pts': stat.mean(entry['playPts']), 'Max Play Pts': max(entry['playPts']), 'Avg Rank': stat.mean(entry['ranks']), 'Best Rank': min(entry['ranks']), 'Avg Award Pts': stat.mean(entry['awardPts']), 'Max Award Pts': max(entry['awardPts']), 'Awards Won': ' / '.join(entry['awardStrings']) } finalData.append(finalDataEntry) cols = [ 'Team', 'Win %', 'Wins', 'Losses', 'Ties', 'Max OPR', 'Avg OPR', 'Max Total Pts', 'Avg Total Pts', 'Avg Rank', 'Best Rank', 'Awards Won', 'Max Play Pts', 'Avg Play Pts', 'Max Award Pts', 'Avg Award Pts' ] gen.listOfDictToCSV(str(year) + div.upper() + ' Data', finalData, cols, True)
import gen tba = gen.setup() dist = 'ont' startYear = 2014 currYear = 2018 distTeams = tba.district_teams(str(currYear) + dist, False, True) records = [] for team in distTeams: wins = 0 for year in range(startYear, currYear + 1): awards = gen.readTeamCsv(team, 'awards', year) if awards is not None: for idx, award in awards.iterrows(): if award['Type'] == 1: wins += 1 records.append({'Team': team[3:], 'Wins': wins}) records = sorted(records, key=lambda k: k['Wins'], reverse=True) gen.listOfDictToCSV( dist.upper() + " " + str(startYear) + " to " + str(currYear) + " Wins", records, ['Team', 'Wins'])
entCount = 0 gotAward = False for award in teamAwards: if award['year'] == year: awardString = award['event_key'] + " / " if award['award_type'] in CA: gotAward = True caCount += 1 teamRecord[ 'wins'] = "CA at " + awardString + teamRecord['wins'] elif award['award_type'] in EI: gotAward = True eiCount += 1 teamRecord[ 'wins'] = "EI at " + awardString + teamRecord['wins'] elif award['award_type'] in ENT: gotAward = True entCount += 1 teamRecord[ 'wins'] = "ENT at " + awardString + teamRecord['wins'] if gotAward: print("Award in " + str(year)) teamRecord['rating'] += (caCount * CA_WEIGHT + eiCount * EI_WEIGHT + entCount * ENT_WEIGHT) / (YEAR - year + 1) winners.append(teamRecord) gen.listOfDictToCSV(DISTRICT.upper() + "caRatings", winners)
'longStart': 0, 'longEnd': 0 } for year in tba.team_years(team['key']): eventWinner = False for award in tba.team_awards(team['key'], year): if award['award_type'] == awardTypes.WINNER: eventWinner = True if eventWinner: if teamData['current'] == 0: teamData['currStart'] = year teamData['current'] += 1 teamData['currEnd'] = year if teamData['current'] > teamData['longest']: teamData['longest'] = teamData['current'] teamData['longStart'] = teamData['currStart'] teamData['longEnd'] = teamData['currEnd'] else: teamData['current'] = 0 teamData['currStart'] = year teamData['currEnd'] = year teamStreaks.append(teamData) gen.listOfDictToCSV(distKey.upper() + ' Streaks', teamStreaks, [ 'team', 'currStart', 'currEnd', 'current', 'longStart', 'longEnd', 'longest' ])
baseList = [] finalList = [] for article in articles: link = article.find('a') name = link.get('title') url = link.get('href') if name not in baseList: baseList.append(name) cleanedName = name.replace('Team ', '').replace(' ' + str(year), '') finalList.append({'Team': cleanedName, 'Link': url}) return finalList teams2018 = fetchYearTeams(2018) teams2017 = fetchYearTeams(2017) names2017 = [team['Team'] for team in teams2017] for team in teams2018: in2017 = team['Team'] in names2017 team['In 2017'] = '' if in2017: team['In 2017'] = 'Yes' teams2018 = sorted(teams2018, key=lambda k: k['Team']) gen.listOfDictToCSV('FGC 2018 Teams', teams2018, ['Team', 'Link', 'In 2017'])
import gen tba = gen.setup() year = 2019 nameMap = [] for event in tba.events(year): if event['event_type'] == 0: nameMap.append({ 'Name': event['name'], 'Code': str(2019) + event['event_code'] }) gen.listOfDictToCSV(str(year) + ' Event Name Map', nameMap, ['Name', 'Code'])
import gen tba = gen.setup() distTeams = tba.district_teams('2018chs') teamList = [] for team in distTeams: if team['state_prov'] == 'Virginia': teamList.append({'Team': team['key'][3:], 'Sponsors': team['name'].replace(',', ''), 'Location': team['city'] + ' ' + team['state_prov'] + ' ' + str(team['postal_code']) }) gen.listOfDictToCSV('Virginia Team Locations', teamList, ['Team', 'Location', 'Sponsors'])
"245", "1732", "302", "1718", "2337", "51", "4130", "1504", "503", "6538", "1", "3322", "4395", "240", "4390", "1528", "5708" ] team_data = [] for team in teams: vals = [] if team[-1] == 'B': team_val = 'frc' + team[:-1] else: team_val = 'frc' + team for event in tba.team_events(team_val, 2019): if event.event_type in eventTypes.NORMAL: try: vals.append(tba.event_oprs(event.key)['dprs'][team_val]) except KeyError: pass team_data.append({ 'team': team, 'min dpr': min(vals), 'max dpr': max(vals), 'avg dpr': stat.mean(vals), 'med dpr': stat.median(vals) }) gen.listOfDictToCSV('qd_2019marc_data', team_data, ['team', 'min dpr', 'max dpr', 'avg dpr', 'med dpr'])
for team in award['recipient_list']: teamVal = int(team['team_key'][3:]) if teamVal not in preQual: preQual.append(teamVal) for event in divisions: awards = tba.event_awards(event) for award in awards: typ = award['award_type'] if typ == 9: for team in award['recipient_list']: teamVal = int(team['team_key'][3:]) if teamVal not in preQual: preQual.append(teamVal) champsData = [] for team in preQual: info = tba.team(team) champsData.append({ 'Team': team, 'Champs': info['home_championship']['2018'] }) detCount = 0 for team in champsData: detCount += team['Champs'] == 'Detroit' print(detCount, "/", len(champsData), "Detroit teams") gen.listOfDictToCSV('Prequalified Champs Data', champsData, ['Team', 'Champs'])
import gen import awardTypes from tqdm import tqdm tba = gen.setup() year = 2019 dist = 'chs' distKey = str(year) + dist awards = [] for team in tqdm(tba.district_teams(distKey, False, True)): for award in tba.team_awards(team): if award['award_type'] is awardTypes.WINNER: awards.append({'Team': team[3:], 'Year': award['event_key'][:4], 'Event': award['event_key'][4:], 'Name': award['name']}) gen.listOfDictToCSV(distKey + " Event Wins", awards, ['Team', 'Year', 'Event', 'Name'])
d['prevTeams'] = d['currentTeams'] d['currentTeams'] = [] #MAR validation checking marTeams = tba.district_teams('2018mar') for team in marTeams: if team['team_number'] in outOfMar: print(team['team_number'], "is actually in MAR") #Prep table and then save it out districtTable = [] for d in districtStats: dist = districtStats[d]['years'] for year in dist: isDist = dist[year]['dist'] teams = dist[year]['teams'] added = dist[year]['added'] lost = dist[year]['lost'] districtTable.append({ 'dist': d, 'year': year, 'isDist': isDist, 'teams': teams, 'added': added, 'lost': lost }) gen.writeJsonFile('districtGrowth', districtStats) gen.listOfDictToCSV('districtGrowth', districtTable)
import gen tba = gen.setup() tieData = [] YEARS = [2010, 2011, 2012, 2013, 2014, 2016, 2017, 2018] for year in YEARS: print("Processing " + str(year)) matchCount = 0 tieCount = 0 for event in tba.events(year, True, False): if event['event_type'] in range(0, 10): print("Fetching matches for " + event['key']) for match in tba.event_matches(event['key'], True): tieCount += match['winning_alliance'] not in ['red', 'blue'] matchCount += 1 tieData.append({'year': year, 'matches': matchCount, 'ties': tieCount}) gen.listOfDictToCSV("tieData", tieData)
draftPoints = 9 - alliance['number'] except: pass #Find points for playing in elims for match in teamMatches: if match['comp_level'] != "qm": if gen.matchResult(team, match) == 'win': elimPoints += 5 return [teamRank, draftPoints, rankPoints, elimPoints] teamData = [] for idx, team in enumerate(teams): gen.progressBar(idx, teamCount) rank, draft, rankP, elim = calcPoints(team, EVENT) total = draft + rankP + elim teamData.append({ 'team': team[3:], 'rank': rank, 'total': total, 'rankP': rankP, 'draft': draft, 'elim': elim }) colOrder = ['team', 'rank', 'total', 'rankP', 'draft', 'elim'] gen.listOfDictToCSV('iriPoints', teamData, colOrder)
import gen YEAR = 2018 tba = gen.setup() teams = gen.readTeamListCsv(2018).Teams def fetchNames(robotList): print('memes') robotNames = [] for team in teams: robots = tba.team_robots(team) for robot in robots: if robot.year == 2018: robotNames.append({ 'name': robot.robot_name, 'length': len(robot.robot_name) }) print(len(robotNames)) robotNames = sorted(robotNames, key=lambda k: k['Length']) gen.listOfDictToCSV('robotNames', robotNames, ['Length', 'Name'])
maxPages = 20 finalistTeams = [] for i in range(0, maxPages): gen.progressBar(i, maxPages) teams = tba.teams(i, None, False, True) if teams == []: break for team in teams: finalist = 0 for award in tba.team_awards(team): if award['award_type'] == 2: finalist += 1 elif award['award_type'] == 1: break finalistTeams.append({'Team': team[3:], 'Finalist Count': finalist}) finalistTeams = sorted(finalistTeams, key=lambda k: k['Finalist Count'], reverse=True) colOrder = ['Team', 'Finalist Count'] gen.listOfDictToCSV("finalistTeams", finalistTeams, colOrder)
# Mid Atlantic Robotics Bylaws Article 1 Section 2 define the PA part of MAR as 'the counties of Pennsylvania including Harrisburg, eastward' # Harrisburg's longitude is listed as -76.884 , I used -77 as it's a round number and gives a ~7 mile margin. HARRISBURG_WEST_LON = -77 return event['lng'] > HARRISBURG_WEST_LON data = [] years = range(2011, 2019) for idx, year in enumerate(years): gen.progressBar(idx, len(years)) yearData = {'WOW': 0, 'CHS': 0, 'NE': 0, 'MAR': 0, 'ON': 0, 'NY': 0} yearEvents = tba.events(year) for event in yearEvents: if event['event_type'] == 0: if event['state_prov'] in areas: yearData['WOW'] += int(event['state_prov'] in WOW) yearData['CHS'] += int(event['state_prov'] in CHS) yearData['NE'] += int(event['state_prov'] in NE) yearData['MAR'] += int(event['state_prov'] in MAR) yearData['ON'] += int(event['state_prov'] == 'ON') yearData['NY'] += int(event['state_prov'] == 'NY') if event['state_prov'] == 'PA': yearData['MAR'] += int(inMAR(event)) yearData['WOW'] += int(not inMAR(event)) data.append(yearData) gen.listOfDictToCSV("neRegionals", data)