Skip to content

Instantly share code, notes, and snippets.

@person4268
Created September 17, 2022 18:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save person4268/da1a1b5841808f1777234316294d0d30 to your computer and use it in GitHub Desktop.
Save person4268/da1a1b5841808f1777234316294d0d30 to your computer and use it in GitHub Desktop.
FRC Scouting Data Sorting
import csv
import sys
# Use with https://github.com/the-gearheads/ghScouting
# sys.argv[1]: Input csv name
# sys.argv[2]: Output csv name
# Amount of decimal places to round to
round_places = 2
climber_scores = [0, 4, 6, 10, 15]
f = open(sys.argv[1], "r")
data = csv.reader(f, dialect='excel')
team_data = {}
cnti = {} # Column name to index
def read_int(row, name):
if row[cnti[name]] == "":
return 0
try:
return int(row[cnti[name]])
except Exception as e:
print(e)
return 0
# Creates team_data dict (addressed by team number) that contains an array that
# contains a list of dicts that contain teleop, auton, and total scores, and
# whether they've traversed.
for row in data:
if row[0] == "matchnum":
i = 0
for column_name in row:
cnti[column_name] = i
i += 1
continue
team_number = read_int(row, "team") # team
auton_score = 0
tele_score = 0
if row[cnti["auton_taxi"]] == "Yes":
auton_score += 2
auton_score += read_int(row, "auton_cargo_upper") * 4
auton_score += read_int(row, "auton_cargo_lower") * 2
tele_score += read_int(row, "teleop_cargo_upper") * 2
tele_score += read_int(row, "teleop_cargo_lower") * 1
tele_score += climber_scores[read_int(row, "climbing_level")]
has_traversed = read_int(row, "climbing_level") == 4
total_score = auton_score + tele_score
if not int(team_number) in team_data:
team_data[int(team_number)] = []
team_data[int(team_number)].append({"teleop_score": tele_score,
"auton_score": auton_score,
"total_score": total_score,
"has_traversed": has_traversed})
f.close()
# Average everything across all matches a team has done, and save it to csv
averages_header = ["team", "average_teleop", "average_auton", "total_average", "has_traversed"]
averages = []
for team_number in team_data:
data = team_data[team_number]
teleop, auton, total = [0, 0, 0]
has_traversed = 0
for score in data:
if score["has_traversed"]:
has_traversed = 1
teleop += score["teleop_score"]
auton += score["auton_score"]
total += score["total_score"]
teleop /= len(data)
auton /= len(data)
total /= len(data)
team_averages = {"team": team_number,
"average_teleop": round(teleop, round_places),
"average_auton": round(auton, round_places),
"total_average": round(total, round_places),
"has_traversed": has_traversed}
averages.append(team_averages)
# Sort by total_average in descending order
averages.sort(reverse=True, key=lambda k: k["total_average"])
with open(sys.argv[2], "w") as output:
writer = csv.DictWriter(output, fieldnames=averages_header)
writer.writeheader()
writer.writerows(averages)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment