8  Jalal Bouri

Author

2nd Year
Computer Science
Infrastructure Developer

This was my first year as a member of Data Solutions, and I thoroughly enjoyed the work, experiences, and relationships that came out of it. For projects, I spent most of my time building scrapers for three sources (InStat, TeamBuildr, and 49ing) taking on some odd-job technical tasks such as helping analysts with the VALD API and Qualtrics forms, as well as developing a deployed chatbot that interacts with InStat data for the KIN 472 final. The experiences were great, it was awesome to feel like I was practically part of the women’s hockey team during the fall term, helping record exercise data during lifts, attending some practices, and going to both home and away games to track faceoffs. Additionaly, working with an infrastructure team as talented as ours was fantastic. I learned a lot from the wisdom of our “uncs”, as well as from my fellow Data Solutions members from women’s hockey, who spent the year trying to teach me about the sport. I think I know what icing is now 😁

Projects

Scrapers

The bulk of my time was spent building three scrapers.

  • TeamBuildr: Scrapes exercise, calender, group, and user data. Runs every night, however not utilized by analysts in its current state. Will be expanded upon shortly to power Sam’s KPI dashboard.
  • 49ing: Scrapes practically all 49ing data that we have access too. Not utilized by analysts, and does not run on a schedule due to some token rotation issues. Will likely be archived eventually.
  • InStat: Where do I begin… This scraper is by far the most extensive of the three, and the one I spent the bulk of my time building and iterating on. It scrapes InStat play by play data from any point in time (or relative time), for any league on available on InStat. I also ran a ~month long backfill from September 2022 onwards to get every single play by play CSV from ~20 Canadian and American leagues. As extensive as it is, there are some known issues. It’s slow (can’t do much about that, don’t want to be banned as we’re using browser automation), it keeps our analysts logged out while it’s running (we need more InStat logins), and it doesn’t write to a DB (yet). Despite the issues, I’m really happy with how this turned out, and how well utilized it is, by myself, Trevor, Morgan, and Arun.

KIN 472 Dashboard

For the KIN 472 final, I was tasked with implementing a three tabbed dashboard. Two of the tabs were planned by other members of the women’s hockey IST and I just had to implement them.

  • Readiness Tab: Visualizes the selected athlete’s performance metrics relative to team averages. Planned out by Kye and Phoenix, with the data supplied from a spreadsheet they gave me.

  • Recovery and Wellness: Visualizes the selected athlete’s recovery and wellness metrics over time, and relative to team averages. Planned out by Sofia and Mackenzie, with the data supplied by Qualtrics.

  • InStat Data Chatbot: A chatbot with an AI agent that has read-only access to a SQLite database of all the USPORTS-W play by play data we got off of InStat. This DB (created with a one-off script) obfuscated player names so that the OpenAI API did not have access to them as they’re considered PII, and an internal mapping would convert to and from the human readable names and the IDs in the DB (p_1, p_2, …). Deployed the backend on Railway, frontend on Vercel. Fun project to build, but unsure of how useful it would really be to an analyst or coach.

Reflections

  • Great experiences all around.

  • Loved the work I did, however it was mostly confined to the fall term when I was on campus. I wasn’t very productive during my work term.

  • This year’s projects and experiences wouldn’t have been possible without the people that helped make everything happen. Special thanks to Rithika, David, Trevor, Morgan, Arun, and Shamar for being great data-solutions-mates (?) throughout the year!