Last Saturday I had the good fortune to present a talk on finding, gathering, and analyzing some sports-related data on the web at the local SABR group meeting. In case you’re not familiar with the “SABR” acronym, it stands for “Society for American Baseball Research”; here’s a link to the national organization. The talk was light on tech and heavy on graphs (predominately made in R and in particular ggplot2). Good times were had by all. The slides from the talk are given below. Most of the slides and code are recycled from previous talks, so I apologize in advance if you’re already familiar with the content. It was, however, new to the SABR people.
Tag Archives: Sports
I compared the results of my fantasy football draft with the results of more than 1500 mock drafts at the Fantasy Football Calculator (FFC). I looked at where player X was drafted in our league, subtracted off the average draft position on FFC, and divided by the standard deviation of the draft positon of that player on FFC. In other words, I’ve computed a ‘standardized’ draft position for the given player.
How do we interpret this standardized draft position? Obviously if we have a positive score, then a player was drafted later in our draft than the average position on FFC. This would mean that a team owner in our league got a pretty good deal on that player. Understand? Divided by the standard deviation just places all of the draft positions in a standardized unit for comparison purposes. Here are the results of our draft.
What do we see from this? Well, my draft sucked. Most of my boxes in the heat map are negative! So I drafted my players a little higher than the average draft position on FFC. In particular, it looks like I picked Pierre Thomas way earlier.
Some positives: Yurcy picked Randy Moss with the 18th pick and his average draft position on this website was 8.8. Possibly the biggest winner was Rob’s 6th round pick of Wes Welker…good value there.
I’ll do the same for my league with the boys in Vermont. Hopefully the results are a little better than what I did with the Princeton gang.
The code is published at github under ffdraft.
I have to admit that working with my Major League Soccer data set has been slow going. There are a few reasons: (1) I have a full-time job at the National Renewable Energy Lab and (2) the data isn’t quite as “rich” as I initially thought. As an example, the MLS site doesn’t list the wins and losses for each team by year. That seems to be a fundamental piece of “sports”-type data, right? In any case, I did come across something that I can’t seem to answer. If you know somebody that works with MLS, send ’em my email address and tell them that I want answers, damnit!
So following up on my previous MLS-related post, I wanted to see if I could pinpoint why goals per game has been decreasing in recent years. My first thought was that with MLS expanding, more US-based players transferring overseas, etc., that the overall talent level in MLS has suffered a bit in the more recent years. One way that this might manifest itself in the data is by having less shots “on target” or “on goal”. Therefore, I looked at the number of shots on goal vs the number of shots and also vs the number of goals over the years. The two figures are given next.
Based on the first figure, one could argue that the shooters are becoming a little less accurate. That is, the number of shots on target per shot has decreased by about 10% over the course of the league’s lifetime. Shots on goal per goal seems relatively steady over this same time period. This might suggest that the league’s strikers are getting slightly worse whereas the quality of the keepers is holding steady. That, of course, could contribute to the decline of goals per game.
I also decided to look at the number of assists per goal. Why? Well, my logic is that if there are more assists per goal, then there might be better overall team play. Conversely, a decrease in this number might be a result of teams having one or more stars (hence, more individual brilliance) and less of the quality, build-up-type goals. Make sense? C’mon, I’m trying here! Anyway, here is the resulting graph.
Whoa, what in the hell happened there? The data look a bit suspicious. Specifically, there seems to be a serious change between the 2002 and 2003 seasons. So I made a similar graph, but I separated by the different time periods. Here ya go.
What does this mean? My hypothesis is that there was a fundamental change to the rules in how assists were recorded between the 2002 and 2003 seasons. Unfortunately, I can’t confirm this. I’ve searched the web, read the MLS Wikipedia page, read a good amount of the MLS website, and can’t seem to find anything related to a rules change that might result in this sort of phenomenon. Sooooo, if you have any ideas, send ’em my way!
This will likely be the last MLS-specific post for a while. Unless I can find some more data, I’m giving up — their data is just not that interesting. Notice that I didn’t say that this would be my last soccer post. Hopefully I can scrape some EPL (England’s Premiership) data. Given that their league has been around for more than 15 years, it should be a bit more interesting than mine.
If you’re interested in taking a look at the data and/or code yourself, I’ve created a github repository for your perusal. Feel free to pass along your comments and/or questions regarding any code — I have thick skin.
So what’s next? I am thinking about comparing my current workflow of (a) scrape with Python and (b) analyze with R to just doing everything in R (e.g., using the xml package). Hopefully, I can post some time comparisons soon!
Addendum: According to at least one blogger, the recording of “secondary assists” was changed after the 2002 season. I’m not sure why they record secondary assists in the first place — I guess MLS wanted to appeal to the hockey people in the early years. Here is the bloggers take on secondary assists: