Friends of Tracking will be back during April to June 2021. David Sumpter and Catherine Pfaff will, together with the other Friends (see below), meet guests working in football analytics.
Live every Thursday at 20:10 (European time), 19:10 (UK time), 01:40 (Mumbai India), 14:10 (East Coast USA) from 8th of April.
Friends of Tracking was set up by Pascal Bauer (Deutscher Fußball-Bund), Javier Fernandez (Barcelona), Suds Gopaladesikan (Benfica), Fran Peralta (Hammarby), Laurie Shaw (Harvard), David Sumpter (Uppsala University/Hammarby) and Alex Thomas (English FA). Visual recording sketches provided by Virginia Armas @sk3tchYourLife.
Our aim is to educate and inspire those interested in football analytics. The views expressed here are not necessarily the views of our employers.
A repository of code can be found here: github.com/Friends-of-Tracking-Data-FoTD/
A course developed on the basis of these videos is here: uppsala.instructure.com/courses/28112
Hi! nice video. I'm having problems to import the data in json file it seems that needs to be payed. by any where can I see the data structure to see if I can build it? or any other source?
I've tried replicating the code available in the GitHub, the exact way the code was written in the notebook file and in the Pdf available, but I encountered some problems along the way. I believe the 'Highlight Text' library has changed a little bit over the course of time since this video came out. So I struggled a little bit trying to solve it, and to anyone else who has had this problem: I encountered problems within this line: ssn_start = df[df.team == team].season_id.iloc[0] ssn_end = df[df.team == team].season_id.iloc[-1] ssn_start = str(ssn_start)+"/"+str(ssn_start+1) ssn_end = str(ssn_end)+"/"+str(ssn_end+1) s = "{}'s goal difference from {} to <{}> " >>> htext.fig_htext(s.format(team,ssn_start,ssn_end),0.15,0.99,highlight_colors=[primary], highlight_weights=["bold"],string_weight="bold",fontsize=22, fontfamily=title_font,color=text_color) The solution I found was writing it like this: ssn_start = df[df.team == team].season_id.iloc[0] ssn_end = df[df.team == team].season_id.iloc[-1] ssn_start = str(ssn_start)+"/"+str(ssn_start+1) ssn_end = str(ssn_end)+"/"+str(ssn_end+1) s = "{}'s goal difference from {} to <{}> " >>> highlight_text.fig_text(0.15, 0.99, s.format(team, ssn_start, ssn_end), highlight_textprops=[{"color": primary}], fontsize=22, fontfamily=title_font, color=text_color) Another problem I encountered along the way was the instalation of the Fonts, after instaling them I had to go to the Folder where is located the cache of Matplotlib and delete the font file, after doing that i relaunched the code and it worked fine! Thank you Peter for sharing this lovely Graph, Thank you David for posting the Soccermatics course online I've been developing a love for Data Science and I've been enjoying a lot helping through your classes.
Hello, I have a question about the Poisson model you've presented. You discuss variables such as attacking power and defensive power. I've developed a model in Excel (yes, I don't know how to program in Python or R), and I've divided it into "goals scored by the home team" and "goals scored by the away team". Then, I've further divided both groups into 2 subgroups: "goals scored by the home team and conceded by the away team" and "goals scored by the away team and conceded by the home team". Within each subgroup, I've included both the average goals scored by the home team at home (or when few games have been played, the expected goals), and the average goals scored by teams at home in the league (to capture the home team advantage), and I compare them with the average goals conceded by the away team, both overall of away teams in the league (to gauge the disadvantage or advantage of playing away for the opposing team). I then do the same with the goals scored by the away team and conceded by the home team. My question is, do you think this is a good model? The method for obtaining the expected goals for both teams arises from dividing the average goals scored by the home team by the average goals scored by home teams in the league, and multiplying the league's average goals by that result, and the result of dividing the average goals conceded away by the away team by the average goals conceded by away teams in the league. Logically, I apply the same formula for the away team. Do you think this model is correct? Is it more accurate in terms of the difference between playing at home or playing away? Should I capture the difference only with the difference in scoring at home and away and conceding at home and away? By the way, I love your videos, very well-utilized statistics and econometrics!
Good luck with the search William! Klopp cant be replaced but we all know the new manager has to be someone who understands the club and philosophy. No Jose ok
hello Error in command 'gzfile(file, "wb")': cannot delete additional: Warning message: In the command 'gzfile(file, "wb")': unable to delete compressed file '.RDataTmp', probable cause 'Permission denied' Warning message: In the 'file.remove(outfile)' command: cannot delete file '.RDataTmp', reason 'No such file or directory' >this information is displayed when opening R
Hello Im a student and Im going to do a project in school and want to do a soccer tracking system. Can u help me, suggest which tracker i should use. Something where`s easy to code on it.
I have a question when you want to volunteer for a club how do you know they have the tools for you to do data analysis I mean if the pay a platform or company to gather the data
I keep receiving the error - ValueError: axis must be fewer than the number of dimensions (1)-- When I run -- tracking_home,tracking_away,events = mio.to_single_playing_direction(tracking_home,tracking_away,events) -- I'm not sure what this means or how to fix it.
I was thinking, if using distance as log and angle as cos, wouldn't be better. Then you could make a linear regresion. Also, you would have: 0 < xG < 1 | 1 < log(d+1) < 2 | -1 < cosø < 1 This suposing that a field has 99 m, on average, and you cannot shoot over 180°
This is amazing, i want to learn more about it, never coded in my life, would this work with the videos of my kids soccer U13 games? I've been looking for something to track data like this to help the coaches with the team to preform better. Thank you again.
I just wanted to share something here - if you look at the shot angle function. You'll see an initial descrease in scoring probability that david attributes to being an anomaly when in fact if you think intuitively about this and i have verified with data. The likelyhood is that despite the angle being low the Distance is also probably low too which possesses significant explanatory power and hence the higher goal probability is due to this rather than any direct effect of shot angle on goal scoring probability. Always check for Multicolinearity because i bet there is some interaction here. Are shots with lower angles typically from lower distances?
I have very, very basic experience with Python, but I adore football and am at that point in my career where I am seeking change. I'm 32 years old so hopefully not too old to learn and to be able to one day land a job in football data analytics! This video really was great and made me very excited to learn python.
Ashwin, I’m a consultant now but I had the same problem as you. When you start stuttering, pause. It’s better to have an awkward long silence than meaningless fillers. I worked on this till I was 25, takes time but you’ll do good.