Team with Most Number of Each Award

Does anyone know how to determine which team holds the highest count of each award.

i.e FRC XXX 23 Engineering Excellent Awards
FRC YYY 12 Creativity Awards

The blue alliance insights show number of blue banners, but looking to extract which teams in their history have accumulated the most of an individual award.

I think this data can be very helpful for other teams to use to learn from others.

The closest I’ve come is a python script that scrapes the TBA API, but hitting every event for all of time is a long process.

Honestly, one of my favorite things. Maybe something like, cat all the *_awards.csv files together then do some excel or sql magic on them. Someone smarter than I could probably do it in awk or something silly.

Interesting concept. I have my own little database of MN teams, which came up with some interesting results.

2052 has won the most regional events at 6. 44 teams have won one or more events across the state, leaving over 150 teams without a win. Only 14 teams have multiple regional wins.

2169 and 2512 are tied for the most finalists at 5.

2169 has the most RCA’s at 6 (Finalist at champs this year, too!).

2500 has the most EI at 6.

2177 has the most WFFA’s at 3 (1816 has the sole WFA for the state).

There’s a 6 way tie for most Dean’s List finalists (1816, 2052, 2177, 2512, 2846, and 3130). 2177 has the sole Champs Dean’s List Winner for the state.

5172 is the only team in the state to get Highest Seeded Rookie twice (regional and at champs).

The poor old Website award… 1816 got it 7 times, only 2 other teams even won it!

1816 and 2169 tied for Entrepreneurship at 5 each - only 11 teams have won this award.

2512 has 5 Excellence in Engineering awards, which sets them well ahead of everyone else for that one.

2175 has 4 Creativity Awards, well more than anyone else.

2177 has 5 Judges’ Awards, putting them ahead of the other 21 teams that have received one.

None of the other awards had any teams that won it a significantly large number of times.

So, that at least covers Minnesota. Anyone want to take a crack at their state or district?

It hasn’t been updated for 2017 yet, but Team 358 compiles this data: FRC Team Awards 1992-present

I can’t believe I just completed an entire school project using the API when I could have been using CSV files. Major facepalm. This will make my offseason computations much nicer.

Used the CSV files in the TBA github repo and created a quick python notebook to parse the data.

I think it would be cool to add this data to the insights of the blue alliance - anyone?

Here is what I got, although someone should check my outputs, I only printed the top 5 values in the list, there may be teams that tied the last value but wasn’t printed, feel free to make it do so

Most Awards of All Time

Most Chairman's Awards
frc503     18
frc27      13
frc1540    12
frc1311    11
frc33      11

Most Winning Banners
frc254     42
frc67      36
frc1114    35
frc2056    31
frc469     30

Most EI Awards
frc141     13
frc75      12
frc1241    10
frc1305    10
frc27      10

Most WF and WFF Awards
frc525     5
frc987     5
frc16      4
frc1511    4
frc1574    4
frc932     4

Most Controls Award
frc67      10
frc2168     9
frc987      9
frc494      9
frc624      8

Most Creativity Award
frc190     7
frc25      7
frc1388    5
frc910     5
frc868     5

Most Entrepreneurship Award
frc103     14
frc1676    12
frc687     11
frc839     11
frc245     10

Most EE Award
frc2056    10
frc192     10
frc118     10
frc179      7
frc469      7

Most Finalist Award
frc27     23
frc67     18
frc217    14
frc33     14
frc16     13

Most GP Award
frc93      12
frc599     11
frc4063     9
frc1250     8
frc365      8

Most Image Award
frc1024    12
frc1711    10
frc1359    10
frc365     10
frc1262     9

Most Industrial Award
frc1114    15
frc330     12
frc33      11
frc67      11
frc148      9

Most Safety Award
frc337     20
frc1622    18
frc1319    18
frc48      17
frc2062    15

Most Quality Award
frc27      12
frc254     12
frc148     11
frc67      10
frc2056     9

Most Spirit Award
frc217     11
frc1266    11
frc1189    10
frc2771     9
frc203      8

Most Awards in 2017

Most Chairmans
frc708     2
frc2614    2
frc272     2
frc1311    2
frc66      2

Most Winning Banners
frc2767    5
frc4613    4
frc254     4
frc1678    4
frc2168    4

Most EI and Rookie Inspiration
frc2096    3
frc1023    3
frc6631    2
frc6498    2
frc6300    2

Most WF and WFF
frc2607    1
frc5449    1
frc3255    1
frc175     1
frc2383    1

Most Controls
frc2054    4
frc2168    3
frc4026    3
frc225     2
frc610     2

Most Creativity
frc753     3
frc3637    2
frc435     2
frc2175    2
frc4541    2

Most Entrepreneurship
frc2974    3
frc1305    2
frc2521    2
frc772     2
frc422     2

Most EE
frc2451    4
frc4946    4
frc192     3
frc469     2
frc2471    2

Most Finalist
frc4188    3
frc503     3
frc27      3
frc148     3
frc365     3

Most GP
frc5407    2
frc4055    2
frc888     2
frc2363    2
frc4646    2

Most Imagery
frc1075    5
frc3966    2
frc5310    2
frc4325    2
frc1481    2

Most Industrial
frc33      3
frc5066    2
frc2791    2
frc1796    2
frc5803    2

Most Safety
frc5401    3
frc5582    3
frc4063    3
frc3284    3
frc3546    2

Most Quality
frc230    3
frc910    2
frc67     2
frc587    2
frc303    2

Most Spirit
frc5484    3
frc5603    3
frc2682    3
frc6098    2
frc4151    2

Python Code used to Generate Data, please feel free to make it better. I wrote this in 20 minutes, by no way is it optimized it is in python 2.7

# Download Blue Alliance Repo from github
# Search blue alliance repo recurvsively for all *award files and combine to single csv file
import glob, os, shutil 
with open('output_file.csv','wb') as wfd: 
    for root, dirnames, filenames in os.walk('events'):
        for filename in fnmatch.filter(filenames, '*awards.csv'):
            with open(os.path.join(root, filename),'rb') as fd:
                shutil.copyfileobj(fd, wfd)

print "output file created"

#import awards list into python
import pandas as pd 
df = pd.read_csv('output_file.csv', index_col=False, header=0, names = "Event", "Award", "Team", "Name"])

#List different awards in data set 
print df.Award.unique()

chairman = df(df"Award"].str.contains("chairman", case=False)  & ~df"Award"].str.contains("final", case=False) & ~df"Award"].str.contains("honorable", case=False))]
print "Most Chairman's Awards"

#Event Wins = Winner and not Chairmans
banners = df(df"Award"].str.contains("winner", case=False)  & ~df"Award"].str.contains("chairman", case=False)) |  df"Award"].str.contains("division champion", case=False)]
print "Most Winning Banners"

#Engineering Inspiration
#EI & Rookie Inspiration
ei = df(df"Award"].str.contains("inspiration", case=False))]
print "Most EI Awards"

wf = df(df"Award"].str.contains("woodie", case=False))]
print "Most WF and WFF Awards"

controls = df[df["Award"].str.contains("control", case=False)]
print "Most Controls Award"

creativity = df(df"Award"].str.contains("creativity", case=False) & ~df"Award"].str.contains("auto", case=False))]
print "Most Creativity Award"

entrepreneurship = df[df["Award"].str.contains("entrepre", case=False)]
print "Most Entrepreneurship Award"

#Excellence in Engineering
excellence = df[df["Award"].str.contains("excellence", case=False)]
print "Most EE Award"

finalist = df(df"Award"].str.contains("finalist", case=False) & ~df"Award"].str.contains("woodie", case=False) & ~df"Award"].str.contains("chairman", case=False) & ~df"Award"].str.contains("dean", case=False))]
print "Most Finalist Award"

gp = df(df"Award"].str.contains("gp", case=False) | df"Award"].str.contains("gracious", case=False))]
print "Most GP Award"

image = df(df"Award"].str.contains("image", case=False))]
print "Most Image Award"

#Industrial Design
industrial = df(df"Award"].str.contains("industrial", case=False) & ~df"Award"].str.contains("safety", case=False))]
print "Most Industrial Award"

safety = df(df"Award"].str.contains("safety", case=False))]
print "Most Industrial Award"

quality = df(df"Award"].str.contains("quality", case=False))]
print "Most Quality Award"

spirit = df(df"Award"].str.contains("spirit", case=False))]
print "Most Spirit Award"

#2017 Only
year = "2017"

chairman_yr = chairman[chairman["Event"].str.contains(year)]
banners_yr = banners[banners["Event"].str.contains(year)]
ei_yr = ei[ei["Event"].str.contains(year)]
wf_yr = wf[wf["Event"].str.contains(year)]
controls_yr = controls[controls["Event"].str.contains(year)]
creativity_yr = creativity[creativity["Event"].str.contains(year)]
entrepreneurship_yr = entrepreneurship[entrepreneurship["Event"].str.contains(year)]
excellence_yr = excellence[excellence["Event"].str.contains(year)]
finalist_yr = finalist[finalist["Event"].str.contains(year)]
gp_yr = gp[gp["Event"].str.contains(year)]
image_yr = image[image["Event"].str.contains(year)]
industrial_yr = industrial[industrial["Event"].str.contains(year)]
safety_yr = safety[safety["Event"].str.contains(year)]
quality_yr = quality[quality["Event"].str.contains(year)]
spirit_yr = spirit[spirit["Event"].str.contains(year)]

print 'Most Chairmans' 
print chairman_yr.Team.value_counts().nlargest(5)
print 'Most Winning Banners' 
print banners_yr.Team.value_counts().nlargest(5)
print 'Most EI and Rookie Inspiration' 
print ei_yr.Team.value_counts().nlargest(5)
print 'Most WF and WFF' 
print wf_yr.Team.value_counts().nlargest(5)
print 'Most Controls' 
print controls_yr.Team.value_counts().nlargest(5)
print 'Most Creativity' 
print creativity_yr.Team.value_counts().nlargest(5)
print 'Most Entrepreneurship' 
print entrepreneurship_yr.Team.value_counts().nlargest(5)
print 'Most EE' 
print excellence_yr.Team.value_counts().nlargest(5)
print 'Most Finalist' 
print finalist_yr.Team.value_counts().nlargest(5)
print 'Most GP' 
print gp_yr.Team.value_counts().nlargest(5)
print 'Most Imagery' 
print image_yr.Team.value_counts().nlargest(5)
print 'Most Industrial' 
print industrial_yr.Team.value_counts().nlargest(5)
print 'Most Safety' 
print safety_yr.Team.value_counts().nlargest(5)
print 'Most Quality' 
print quality_yr.Team.value_counts().nlargest(5)
print 'Most Spirit' 
print spirit_yr.Team.value_counts().nlargest(5)

FYI…987 has 5 WFF awards😋

Its already been posted, but yeah 1075 won an imagery award wherever they went this year. FIVE imagery awards, three district events, district champs, AND in their subdivision. And they did look THAT good.

I see five WFFAs for 987:

987 ----- 2007 NV ----- Woodie Flowers Finalist Award ----- Joe Barry
987 ----- 2008 NV ----- Woodie Flowers Finalist Award ----- Marc Rogers
987 ----- 2010 NV ----- Woodie Flowers Finalist Award ----- Mark Jones
987 ----- 2012 NV ----- Woodie Flowers Finalist Award ----- Greg Hjelstrom
987 ----- 2014 NV ----- Woodie Flowers Finalist Award ----- Jennifer Stensrud

Its not a very recognized award, but 4388 has 8 pit safety awards. We’ve won it at every competition we’ve attended in our history except for our very first.::ouch::

In previous years, the safety award was called the industrial safety award. I think most of these are from winning Industrial Safety and not Industrial Design.

I think the big disconnect is that FIRST did not always track or publish the team that the WFFA winner was associated with in the earlier days. TBA just mirror’s FIRST’s data:

The team number associated with the WFFA winner has to be typed in by the event scorekeeper, and I’ve seen them forget to do that at some events.

Looks like there is some issue with the blue alliance data, which is a bit concerning. I am not sure where the blue alliance is getting the data from, but when I check the website for that team it doesn’t show the wins in 2007, or 2010, unless I am missing something.

Which is unfortunate, cause it is Awesome that they have that many WFF wins, and makes me wonder what else is not accurate. In any event, the issue lies with the dataset, most likely the dataset that the blue alliance is pulling from

What’s odd is that at least one of the FIRST databases does show all the 987 WFFA awards.
This is from the old

I’m surprised no one has mentioned 191
only team to win more than 1 Championship Chairman’s award…
that’s an exclusive club to be in

File any issues with inaccurate data here.

Some of the really old stuff may be wrong. I’m sure FIRST had it wrong at some point when we pulled from them, but they must have backfilled/corrected stuff.


you are correct, and the industrial award search strings were updated, and the output was updated as well. nice catch

The new output is

Most Industrial Award
frc1114    15
frc330     12
frc33      11
frc67      11
frc148      9

for 2017:

Most Industrial
frc33      3
frc5066    2
frc2791    2
frc1796    2
frc5803    2

I will update the original post to reflect

FYI, the posts referring to crowdsourcing missing WFFA team associations have been split off into a separate thread as requested here: