Kapitel 1. Fußball-Analytik
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
American Football (auch bekannt als Gridiron-Football oder North American Football und im Folgenden einfach Football genannt) erfährt eine drastische Verschiebung in Richtung Quantität. Vor der letzten Hälfte des letzten Jahrzehnts beschränkte sich der Großteil der Fußballanalyse auf einige wenige bahnbrechende Arbeiten. Das wohl früheste Beispiel für den Einsatz von Analytik im Football war der ehemalige Quarterback der Brigham Young University, der Chicago Bears, der Cincinnati Bengals und der San Diego Chargers Virgil Carter, der 1971 als Co-Autor des Papiers "Technical Note: Operations Research in Football" den Begriff des " Expected Point" entwickelte, bevor er zusammen mit dem legendären Bill Walsh als erster Quarterback die heute als West Coast Offense bekannte Spielweise einführte.
Die Idee eines erwarteten Punktes ist im Fußball unglaublich wichtig, da das Spiel von Natur aus diskret ist: eine Sammlung einer endlichen Anzahl von Spielzügen (auch Downs genannt), bei denen die Offense eine bestimmte Distanz (in Yards) zurücklegen muss, bevor sie den Ball an das gegnerische Team abgeben muss. Wenn die zu erreichende Linie die gegnerische Endzone ist, erzielt die Offense einen Touchdown, der nach einer Post-Touchdown-Conversion im Durchschnitt sieben Punkte wert ist. Der erwartete Punkt gibt also einen geschätzten oder erwarteten Wert für die Anzahl der Punkte an, die ein Team in der aktuellen Spielsituation bei diesem Drive erzielen würde.
Fußballstatistiken beschränken sich größtenteils auf Offensivspieler und werden in der Währung der erzielten Yards und Touchdowns ausgeteilt. Das Problem dabei ist offensichtlich. Wenn ein Spieler einen Pass fängt und 7 Yards erzielt, aber 8 Yards für ein First Down oder einen Touchdown erforderlich sind, hat der Spieler kein First Down erzielt. Umgekehrt gilt: Wenn ein Spieler 5 Yards fängt, aber 5 für ein First Down oder einen Touchdown benötigt werden, hat er ein First Down erzielt. Je nach Kontext des Spiels kann also "genug" Yards besser sein als "mehr" Yards. Ein zweites Beispiel: Wenn ein Team zwei Spielzüge braucht, um 70 Yards für einen Touchdown zurückzulegen, wobei ein Spieler die ersten 65 Yards und der zweite die letzten 5 Yards zurücklegt, warum sollte dann der zweite Spieler die ganze Anerkennung für den Touchdown bekommen?
1988 schrieb Bob Carroll, Pete Palmer und John Thorn das Buch The Hidden Game of Football (Grand Central Publishing), in dem sie den Begriff der erwarteten Punkte weiter erforschten. Im Jahr 2007 formulierte Brian Burke, der Pilot bei der US Navy war, bevor er die Website Advanced Football Analytics(http://www.advancedfootballanalytics.com) ins Leben rief, den Ansatz der erwarteten Punkte und der erwarteten Zusatzpunkte und baute ein Modell der Gewinnwahrscheinlichkeit, das für einige wichtige Erkenntnisse verantwortlich ist, einschließlich des 4th Down Bot auf der Website der New York Times. Spieler können nach der Anzahl der erwarteten Punkte oder der Siegwahrscheinlichkeitspunkte bewertet werden, die ihren Teams hinzugefügt werden, wenn diese Spieler Dinge wie Pässe werfen oder fangen, den Ball laufen lassen oder den Quarterback sacken.
Die Arbeit von Burke inspirierte die Open-Source-Arbeit von Ron Yurko, Sam Ventura und Max Horowitz von der Carnegie Mellon University. Das Trio hat nflscrapR
entwickelt, ein R-Paket, das die Daten der NFL-Spielberichte auswertet. Das Paket nflscrapR
wurde entwickelt, um ihre eigenen Versionen der Modelle für die erwarteten Zusatzpunkte(EPA) und die Gewinnwahrscheinlichkeit(WP) anzuzeigen. Mit diesem Rahmenwerk replizierten sie auch das berühmte Wins above Replacement(WAR) Framework aus dem Baseball für Quarterbacks, Running Backs und Wide Receivers, das 2018 veröffentlicht wurde. Diese Arbeit wurde später mit anderen Daten und Methoden von Eric und seinem Mitarbeiter George Chahouri im Jahr 2020 erweitert. Erics Version von WAR und sein analoges Modell für den College-Fußball werden bis heute in der gesamten Branche verwendet.
Das nflscrapR
-Paket diente als Katalysator für die Verbreitung moderner Tools, die Daten zur Untersuchung des Fußballs nutzen, von denen die meisten einen Rahmen verwenden, der in diesem Buch ständig wiederholt wird. Der Prozess der Erstellung einer Erwartung für ein Ergebnis - in Form von Punkten, Abschlussprozentsatz, Rushing Yards, Draft-Pick-Ergebnis und vielem mehr - und der Messung von Spielern oder Teams über das Residuum (d.h. die Differenz zwischen dem vom Modell erwarteten Wert und dem beobachteten Wert) ist ein Prozess, der über den Fußball hinausgeht. Im Fußball zum Beispiel sind die erwarteten Tore (xG) der Eckpfeiler, an dem Spieler und Vereine in dem Sport gemessen werden, der als "das schöne Spiel" bekannt ist. Und Schussqualität - die erwartete Trefferquote im Basketball - ist eine allgegenwärtige Messgröße für Spieler und Teams auf dem Parkett. Die Merkmale, die in diese Modelle einfließen, und die Formen, die sie annehmen, sind Gegenstand ständiger Forschung, an deren Oberfläche wir in diesem Buch kratzen werden.
Der Aufstieg von Tools wie nflscrapR
ermöglichte es mehr Menschen, ihre analytischen Fähigkeiten zu zeigen und in der Öffentlichkeit aufzublühen. Analysten wurden aufgrund ihrer Tweets auf Twitter eingestellt, weil sie geniale Ansätze zur Messung der Teamleistung hatten. Entscheidungen über Punt oder Fourth Down wurden danach bewertet, wie sie die Gewinnwahrscheinlichkeit des Teams beeinflussten. Ben Baldwin und Sebastian Carl erstellten ein R-Paket, nflfastR
. Dieses Paket aktualisierte die Modelle von Yurko, Ventura und Horowitz und fügte viele ihrer eigenen Modelle hinzu, die wir in diesem Buch verwenden werden. In jüngster Zeit wurden die Daten des Pakets nflfastR
von Cooper Adams über in Python geklont, das Paket nfl_data_py
.
Wir hoffen, dass dieses Buch dir die grundlegenden Werkzeuge an die Hand gibt, um einige der ersten Probleme in der Fußballanalyse anzugehen, und dass es als Ausgangspunkt für zukünftige Arbeiten dient.
Tipp
Wer auf der Suche nach dem neuesten Stand der Sportanalytik, einschließlich Fußball, ist, sollte sich die MIT Sloan Sports Analytics Conference ansehen. Seit ihrer Gründung im Jahr 2006 hat sich die Sloan Conference zu einem führenden Treffpunkt für die Präsentation neuer Analysetools für Fußball (und andere Sportarten) entwickelt. Andere, leichter zugängliche Konferenzen wie die Carnegie Mellon Sports Analytics Conference und das New England Statistics Symposium sind fantastische Orte für Studenten und Praktiker, um ihre Arbeit zu präsentieren. Die meisten dieser Konferenzen bieten Hackathons für Leute an, die sich in der Branche einen Namen machen wollen.
Baseball hat die drei wahren Ergebnisse: Football auch?
Baseball leistete Pionierarbeit bei der Verwendung quantitativer Metriken, und die Gründung der Society for American Baseball Research (SABR) führte zur Bezeichnung Sabermetrics für die Baseballanalyse. Aufgrund dieser langen Geschichte befassen wir uns zunächst mit den im Baseball gebräuchlichen Metriken - insbesondere mit den drei wahren Outcomes. Einer der Gründe, warum sich das Baseballspiel zu den drei wahren Ergebnissen (Walks, Strikeouts und Homeruns) entwickelt hat, ist, dass sie von einer Saison zur nächsten am einfachsten vorherzusagen waren. Was die geschlagenen Bälle taten, wenn sie im Spiel waren, war lauter und machte einen großen Teil der Varianz im wahrgenommenen Spiel von einem Jahr zum nächsten aus. Die drei wahren Ergebnisse des Baseballs waren auch die Quelle für ausgefeiltere Methoden der Datenerfassung und der anschließenden Analyse, um zusätzliche Signale aus den Daten der geschlagenen Bälle herauszuholen.
Die Stabilitätsanalyse ist ein Eckpfeiler der Team- und Spielerbewertung. Eine stabile Produktion ist beständig oder wiederholbar und ist die Art von Produktion, auf die sich Entscheidungsträger Jahr für Jahr verlassen sollten. Bei der Stabilitätsanalyse wird daher untersucht, ob etwas stabil ist - in unserem Fall die Beobachtungen und Modellergebnisse im Fußball. Du wirst diese Analyse in den Kapiteln "Player-Level Stability of Passing Yards per Attempt", "Is RYOE a Better Metric?", "Analyzing RYOE" und "Is CPOE More Stable Than Completion Percentage?" anwenden . Andererseits kann die Leistung eines Teams oder Spielers in wichtigen Situationen (Spielzüge, die größere Auswirkungen auf den Spielausgang haben, wie z.B. die Umsetzung von Third Downs) einen großen Einfluss auf die Sieg-Niederlage-Bilanz oder das Schicksal in den Playoffs haben, aber wenn sie uns nicht dabei hilft, das vorherzusagen, was wir Jahr für Jahr wollen, ist es vielleicht besser, solche Dinge zu ignorieren oder an andere Entscheidungsträger zu verkaufen.
Anhand der Play-by-Play-Daten von nflfastR
zeigt dir Kapitel 2, wie du die Passdaten in Teilmengen zerlegen kannst, die die Leistung eines Spielers in stabile und instabile Produktion unterteilen. Mithilfe von Techniken der explorativen Datenanalyse kannst du herausfinden, ob es Spieler gibt, die aus dem Rahmen fallen, und was du mit ihnen tun kannst. In Kapitel 2 geben wir einen Ausblick darauf, wie diese Arbeit bei der Entwicklung von Merkmalen für Vorhersagen helfen kann.
Sind Running Backs wichtig?
die meiste Zeit der Geschichte des Fußballs spielten die besten Spieler als Running Back (tatsächlich gab es im frühen Fußball keinen Vorwärtspass, bis Präsident Teddy Roosevelt mit dem College-Football zusammenarbeitete, um 1906 das Passspiel einzuführen, um das Spiel sicherer zu machen). Die Bedeutung des Running Backs war eine Binsenweisheit auf allen Ebenen des Fußballs, bis der Vorwärtspass zu einem festen Bestandteil des Spiels wurde. Nach dem Vorwärtspass sorgten Regel- und Technologieänderungen - zusammen mit dem bereits erwähnten Carter und seinem Quarterback-Coach Walsh - dafür, dass das Werfen des Footballs effizienter wurde als das Laufen des Footballs.
Viele unserer Kindheitserinnerungen aus den 1990er Jahren drehen sich um Emmitt Smith und Barry Sanders, die sich alle zwei Jahre das Privileg des NFL Rushing Champions teilen. College-Football-Fans aus den 1980er Jahren erinnern sich vielleicht an Herschel Walker, der in der Southeastern Conference (SEC) Bo Jackson Platz machte. Selbst viele jüngere Fans aus den 2000er und 2010er Jahren können sich noch an Adrian Peterson erinnern, der als letzter Nicht-Quarterback zum wertvollsten Spieler (MVP) gekürt wurde. In der Saison 2012 erlief er über 2.000 Yards und führte ein ansonsten schlechtes Team der Minnesota Vikings in die Playoffs.
Die vorherrschende Meinung unter Fußballanalytikern ist jedoch, dass die Position des Running Backs nicht so wichtig ist wie andere Positionen. Dafür gibt es mehrere Gründe. Erstens ist das Laufen des Fußballs nicht so effizient wie das Passen. Das zeigt sich nicht nur bei einfachen Analysen anhand der Yards pro Spielzug, sondern auch bei fortschrittlicheren Methoden wie EPA. Selbst die schlechtesten Passspielzüge bringen in der Regel im Durchschnitt mehr Yards oder erwartete Punkte pro Spielzug als das Laufen.
Zweitens bewirken Unterschiede in der Person des Spielers, der den Ball laufen lässt, nicht die Art von Veränderung in der Rushing-Produktion, die ähnliche Unterschiede bei Quarterbacks, Wide Receivern oder offensiven oder defensiven Linemen bewirken. Mit anderen Worten: Die zusätzlichen Mittel, die für die Dienste dieses Running Backs im Vergleich zu jenem verwendet werden, lohnen sich wahrscheinlich nicht, vor allem wenn diese Mittel auf anderen Positionen eingesetzt werden können. Der Markt, der die NFL ist, hat dies zusätzlich bewiesen, denn die Gehälter der Running Backs und das Draft-Kapital, das für diese Position verwendet wird, sind auf einen noch nie dagewesenen Tiefstand gefallen.
Das hielt die New York Giants nicht davon ab, den zweitbesten Pick im NFL-Draft 2018 für Saquon Barkley von der Pennsylvania State University zu verwenden, was von der Analytiker-Community belächelt wurde und von Giants General Manager Dave Gettleman gekontert wurde. In einer Pressekonferenz nach dem Draft machte sich Gettleman, der neben Stapeln von gebundenem Papier saß, über die Kritik der Analysten an seiner Wahl lustig, indem er eine Person imitierte, die wütend auf einer Schreibmaschine tippt.
In den Kapiteln 3 und 4 geht es um Techniken zur Kontrolle von Play-by-Play-Rushing-Daten für eine Situation, um herauszufinden, wie viel von der Variabilität des Rushing-Erfolgs mit dem Spieler zu tun hat, der den Ball läuft.
Wie Daten uns helfen können, Passstatistiken zu kontextualisieren
Wie wir auf bereits festgestellt haben, dominiert das Passspiel den Fußball. In Anhang B zeigen wir dir, wie du die Grundlagen der Passspiel-Daten untersuchen kannst. In den letzten Jahren haben sich die Analysten eingehender mit der Frage beschäftigt, was die Genauigkeit auf der Quarterback-Position ausmacht, denn die rohen Abschlussprozentsätze sind in die Höhe geschnellt, selbst bei Quarterbacks, die nicht zu den Spitzenspielern gehören. Die Arbeit von Josh Hermsmeyer bei den Baltimore Ravens und später FiveThirtyEight hat die Bedeutung der Air Yards, also der Strecke, die der Pass von der Line of Scrimmage bis zum Empfänger zurücklegt, herausgestellt.
Auch wenn Hermsmeyers Forschung zunächst im Bereich Fantasy Football angesiedelt war, so hat sie doch zu einer beträchtlichen Menge an grundlegender Forschung über das Passspiel geführt, aus der Metriken wie hervorgegangen sind, z.B. Completion Percentage Over Expected(CPOE), eine der aussagekräftigsten Quarterback-Metriken über die Qualität eines Quarterbacks, die es heute gibt.
In Kapitel 5 stellen wir verallgemeinerte lineare Modelle in Form der logistischen Regression vor. Damit schätzt du die Abschlusswahrscheinlichkeit eines Passes unter Berücksichtigung mehrerer situativer Faktoren, die den erwarteten Erfolg eines Wurfs beeinflussen. Anschließend betrachtest du die Residuen eines Spielers (d.h. die tatsächliche Leistung eines Spielers im Vergleich zur Vorhersage des Modells für diese Leistung) und siehst, ob die Residuen - die CPOE - mehr oder weniger stabil sind als die tatsächliche Abschlussquote.
Kannst du die Quoten schlagen?
2018 wurde der Professional and Amateur Sports Protection Act von 1992 (PASPA), der Sportwetten in den Vereinigten Staaten (außerhalb von Nevada) verboten hatte, vom Obersten Gerichtshof der USA gekippt. Diese Gerichtsentscheidung öffnete den Staaten die Tore, um das zu legalisieren, was viele Menschen bereits illegal taten: Wetten auf Fußball.
Das Schwierige bei Sportwetten ist der Hausvorteil - auch Vigorish oder Vig genannt -, derdafür sorgt, dass ein Wettender mehr als 50 % seiner Einsätze gewinnen muss, um die Gewinnschwelle zu erreichen. Es gibt also Kosten für das Spiel, die überwunden werden müssen, um die Sportwettenanbieter (oder kurz die Buchmacher ) zu schlagen.
American Football ist der größte Glücksspielmarkt in Nordamerika. Die meisten erfolgreichen Sportwettenden in diesem Markt nutzen eine Form der Analyse, um diesen Hausvorteil zu überwinden. In Kapitel 6 wird der Markt für Passing Touchdowns pro Spiel untersucht, der zeigt, wie ein Wettender einen internen Preis für einen solchen Markt ermitteln und mit dem Marktpreis vergleichen würde.
Schlagen Teams den Draft?
Besitzer, Fans, und die breitere NFL-Gemeinschaft bewerten Trainer und General Manager anhand der Qualität der Talente, die sie von einem Jahr zum nächsten in ihr Team bringen. Ein Vorwurf an den Trainer der New England Patriots, Bill Belichick, vielleicht der beste Nicht-Spieler-Trainer in der Geschichte der NFL, ist, dass er in den letzten Jahren nicht gut gedraftet hat. War das eine Folge grundlegender Fehltritte oder einfach nur eine Pechsträhne?
Ein Argument zur Unterstützung von Trainern wie Belichick könnte lauten: "Nun, sie dopen immer ganz hinten im Draft, da sie normalerweise ein gutes Team sind." Glücklicherweise kann man dies mit Hilfe von Mathematik kontrollieren und herausfinden, ob die Hypothese, dass alle Front Offices gleich gut im Drafting sind, verworfen werden kann, wenn man das eingesetzte Draft-Kapital berücksichtigt . Das Draft-Kapital umfasst die Ressourcen, die während des NFL-Drafts eingesetzt werden - vor allem die Anzahl der Picks, die Pick-Runden und die Pick-Nummern.
In Kapitel 7 nutzen wir öffentlich zugängliche Draft-Daten und testen die Hypothese, dass alle Front Offices nach Berücksichtigung des eingesetzten Draft-Kapitals gleich gut im Drafting sind - mit überraschenden Ergebnissen. In Kapitel 8 nutzen wir öffentlich zugängliche Daten des NFL Scouting Combine und verwenden Tools zur Dimensionsreduktion und zum Clustering, um zu sehen, wie sich Spielergruppen herausbilden.
Tools für die Fußballanalyse
Fußballanalyse, und allgemeiner gesagt, Datenwissenschaft, erfordern eine Vielzahl von Tools. Wer in diesen Bereichen erfolgreich sein will, muss diese Werkzeuge verstehen. Statistische Programmiersprachen wie Python und R sind das Rückgrat unserer Data-Science-Tools. Mit diesen Sprachen können wir unsere Datensätze bereinigen, unsere Analysen durchführen und unsere Methoden leicht wiederverwenden.
Obwohl viele Menschen Tabellenkalkulationen (wie Microsoft Excel oder Google Sheets) für die Datenbereinigung und -analyse verwenden, stellen wir fest, dass Tabellenkalkulationen nicht gut skalierbar sind. Wenn du zum Beispiel mit großen Datensätzen arbeitest, die Nachverfolgungsdaten enthalten, die Tausende von Datenzeilen pro Spiel umfassen können, sind Tabellenkalkulationen der Aufgabe einfach nicht gewachsen. Ebenso werden häufig Business-Intelligence (BI)-Tools wie Microsoft Power BI und Tableau verwendet, weil sie leistungsstark und skalierbar sind. Aber diese Tools konzentrieren sich in der Regel auf Point-and-Click-Methoden und erfordern Lizenzen, insbesondere für die kommerzielle Nutzung.
Programmiersprachen ermöglichen auch eine einfache Wiederverwendung, da das Kopieren und Einfügen von Formeln in Tabellenkalkulationen mühsam und fehleranfällig sein kann. Und schließlich lassen Tabellenkalkulationen (und allgemeiner gesagt, Point-and-Click-Tools) undokumentierte Fehler zu. In Tabellenkalkulationen gibt es zum Beispiel keine Möglichkeit, einen Fehler beim Kopieren und Einfügen zu erkennen. Außerdem können mit modernen Data Science-Tools Code, Daten und Ergebnisse in benutzerfreundlichen Oberflächen zusammengeführt werden. Zu den gängigen Sprachen gehören Python, R, Julia, MATLAB und SAS. Mit den Fortschritten in der Informatik kommen immer mehr Sprachen hinzu.
Als Data-Science-Experten nutzen wir täglich R und Python für unsere Arbeit, die sich auf die Bereiche angewandte Mathematik, angewandte Statistik, theoretische Ökologie und natürlich Fußballanalyse erstreckt. Von den oben genannten Sprachen haben Python und R den Vorteil, dass sie eine größere Benutzerbasis haben (und daher wahrscheinlich die Werkzeuge und Modelle enthalten, die wir brauchen). Sowohl R als auch Python (und auch Julia) sind Open Source. Zum Zeitpunkt der Erstellung dieses Artikels hat Julia noch nicht die Nutzerbasis von R oder Python, aber es kann sein, dass es entweder die Spitze des statistischen Rechnens ist, eine Sackgasse, die sich auflöst, oder möglicherweise beides.
Open Source bedeutet zwei Arten von Freiheit. Erstens kann jeder auf den gesamten Code der Sprache zugreifen, wie bei der freien Rede. So können Freiwillige dazu beitragen, die Sprache zu verbessern, z. B. indem sie dafür sorgen, dass die Nutzer den Code debuggen und die Sprache durch Zusatzpakete erweitern können (wie das nflfastR
Paket in R oder das nfl_data_py Paket in Python). Zweitens bietet Open Source den Vorteil, dass es für die Nutzerinnen und Nutzer kostenlos ist, so wie kostenlose Getränke. Die Nutzer müssen also nicht jährlich Tausende von Dollar an Lizenzgebühren zahlen. Wir wurden zunächst in R ausgebildet, haben aber im Laufe unserer Aufträge Python gelernt. Beide Sprachen sind für die Fußballanalyse (und die Sportanalyse im Allgemeinen) gut geeignet.
Hinweis
Anhang A enthält eine Anleitung, wie du dir R und Python beschaffen kannst, falls du noch keinen Zugang zu diesen Sprachen hast. Dazu gehört entweder das Herunterladen und Installieren der Programme oder die Nutzung von im Internet gehosteten Ressourcen. Im Anhang werden außerdem Programme beschrieben, die dir die Arbeit mit diesen Sprachen erleichtern, z. B. Editoren und integrierte Entwicklungsumgebungen (IDEs).
Wir ermutigen dich, eine Sprache für deine Arbeit mit diesem Buch zu wählen und diese Sprache gut zu lernen. Das Erlernen einer zweiten Programmiersprache ist einfacher, wenn du die Programmierkonzepte der ersten Sprache verstehst. Dann kannst du die Konzepte auf dein Verständnis der ersten Programmiersprache zurückführen.
Tipp
Lesern, die die Grundlagen der Programmierung lernen wollen, bevor sie mit unserem Buch fortfahren, empfehlen wir Al Sweigarts Invent Your Own Computer Games with Python, 4. Beide Bücher helfen dir dabei, die Grundlagen des Programmierens zu erlernen.
Auch wenn viele Leute ihre Lieblingssprachen wählen und manchmal darüber streiten, welche Programmiersprache besser ist (ähnlich wie Coke gegen Pepsi oder Ford gegen General Motors), haben wir gesehen, dass sowohl R als auch Python in der Produktion eingesetzt werden und auch mit großen Daten und komplexen Modellen arbeiten. Wir haben R zum Beispiel mit 100 GB großen Dateien auf Servern mit ausreichend Speicher eingesetzt. Wir haben beide zu Beginn unserer Karriere fast ausschließlich in R programmiert, aber wir haben gelernt, Python zu benutzen, wenn es die Situation erforderte. Außerdem ergänzen sich die Werkzeuge oft, vor allem bei fortgeschrittenen Methoden, und wenn du beide Sprachen kennst, hast du Optionen für Probleme, auf die du stoßen könntest.
Tipp
Wenn du dich für eine Sprache entscheidest, empfehlen wir dir, das zu nehmen, was deine Freunde sprechen. Wenn alle deine Freunde Spanisch sprechen, wird die Kommunikation mit ihnen wahrscheinlich auch einfacher sein, wenn du Spanisch lernst. Du kannst ihnen dann auch deine Muttersprache beibringen. Dasselbe gilt für das Programmieren: Deine Freunde können dir dann bei der Fehlersuche und -behebung helfen. Wenn du dich noch nicht entscheiden kannst, öffne beide Sprachen und spiele ein bisschen herum. Finde heraus, welche Sprache dir besser gefällt. Wir persönlich bevorzugen R bei der Arbeit mit Daten wegen der Werkzeuge zur Datenmanipulation und Python beim Aufbau und Einsatz neuer Modelle wegen der sauberen Syntax von Python zum Schreiben von Funktionen.
Erste Schritte in Python und R
Tipp
Wenn du mit R und Python vertraut bist, lohnt es sich, diesen Abschnitt zu überfliegen, um zu sehen, wie wir dir ein Tool beibringen, mit dem du bereits vertraut bist.
Das Öffnen eines Computerterminals kann für viele Menschen einschüchternd sein. Viele unserer Freunde und Verwandten gehen zum Beispiel an unseren Computern vorbei, sehen den Code auf den Bildschirmen und drehen sofort angewidert (Richards Vater) oder ängstlich (die meisten anderen Leute) den Kopf. Dabei sind Terminals ziemlich mächtig und ermöglichen es, mit weniger mehr zu erreichen, wenn du die Sprache erst einmal gelernt hast. Dieser Abschnitt hilft dir bei deinen ersten Schritten mit Python oder R.
Der erste Schritt zur Nutzung von R oder Python ist entweder die Installation auf deinem Computer oder die Nutzung einer webbasierten Version des Programms. Es gibt verschiedene Möglichkeiten, Python und R zu installieren oder anderweitig darauf zuzugreifen und sie dann auf deinem Computer zu verwenden. Anhang A enthält die entsprechenden Schritte sowie die Installationsoptionen.
Hinweis
Menschen, wie Richard, die die Green Bay Packers verfolgen, werden gemeinhin Cheeseheads genannt. Ebenso werden Menschen, die Python benutzen, Pythonistas genannt, und Menschen, die R benutzen, werden gewöhnlich useRs genannt.
Sobald du Zugang zu R oder Python hast, hast du einen teuren Grafikrechner (zum Beispiel deinen 1.000-Dollar-Laptop). Eric und Richard benutzen keinen echten Taschenrechner, sondern berechnen oft dumme Dinge wie Punktedifferenzen oder Summen in der Konsole, wenn sie eine schnelle Berechnung brauchen. Schauen wir uns ein paar Dinge an, die du tun kannst. Gib ein 2 + 2
entweder in die Konsole von Python oder R ein:
2
+
2
Das Ergebnis ist:
4
Hinweis
Menschen verwenden Kommentare, um sich und anderen Notizen im Code zu hinterlassen. Sowohl Python als auch R verwenden das #-Symbol für Kommentare (das Pfund-Symbolfür die Autoren oder Hashtag für jüngere Leser). Kommentare sind Texte (innerhalb des Codes), die der Computer nicht liest, die aber den Menschen helfen, den Code zu verstehen. In diesem Buch werden wir zwei Kommentarsymbole verwenden, um dir zu sagen, dass ein Codeblock Python (## Python) oder R (## R) ist
Du kannst Zahlen auch als Variablen speichern. In Python könntest du z
als 2
definieren und dann z
wiederverwenden und durch 3 dividieren:
## Python
z
=
2
z
/
3
Das Ergebnis ist:
0.6666666666666666
Tipp
In R kann entweder <-
oder =
verwendet werden, um Variablen zu erstellen. Wir verwenden<-
aus zwei Gründen. Erstens hilft dir das in diesem Buch, den Unterschied zwischen R- und Python-Code zu erkennen. Zweitens verwenden wir diesen Stil auch in unserem Programmieralltag. In Kapitel 9 werden die Codestile näher erläutert. Unabhängig davon, welchen Operator du verwendest, solltest du in jeder Sprache einen einheitlichen Programmierstil verwenden. Dein zukünftiges Ich (und andere, die deinen Code lesen) werden es dir danken.
In R kannst du auch z
als 2
definieren und dann z
wiederverwenden und durch 3 dividieren:
## R
z
<-
2
z
/
3
Das Ergebnis ist:
[1] 0.6666667
Hinweis
Python und R formatieren die Ausgaben unterschiedlich. Python rundet nicht auf und enthält mehr Stellen. Umgekehrt zeigt R weniger Stellen an und rundet auf.
Beispieldaten: Wer wirft tief?
Nachdem du nun einige Grundlagen von R kennengelernt hast, lass uns in ein Beispiel mit Fußballdaten eintauchen. Du wirst die Daten von nflfastR
für viele der Beispiele in diesem Buch verwenden. Diese Daten können als R-Paket oder als Python-Paket nfl_data_py
installiert werden. Konkret werden wir uns mit der allgemeinen (und allzu einfachen) Frage "Wer waren die aggressivsten Quarterbacks im Jahr 2021? Wir werden das Paket zunächst mit R vorstellen, weil die Daten aus R stammen.
Hinweis
Sowohl Python als auch R haben sich gut entwickelt, weil sie Zusatzpakete zulassen. Conda ist ein Werkzeug für die Verwaltung dieser Add-ons.In Kapitel 9 und Anhang A werden diese Add-ons ausführlicher behandelt. Im Allgemeinen kannst du Pakete in Python installieren, indem du pip install package name
oderconda install package name
im Terminal eingibst (z. B. in der Bash-Shell unter Linux, in der Zsh-Shell unter macOS oder in der Eingabeaufforderung unter Microsoft Windows). Manchmal musst du pip3
verwenden, je nach Konfiguration deines Betriebssystems, wenn du das pip
Paketverwaltungssystem verwendest. Ein konkretes Beispiel: Um das Paket seaborn
zu installieren, kannst du Folgendes eingebenpip install seaborn
in dein Terminal eingeben. Im Allgemeinen können Pakete in R installiert werden, indem du R öffnest und dann eintippstinstall.packages("package name")
. Um zum Beispiel die Paketsammlungtidyverse
zu installieren, öffnest du R und gibst ein install.packages("tidyverse")
.
nflfastR in R
Starte mit R und installiere das Paket nflfastR
:
## R
install.packages
(
"nflfastR"
)
Tipp
Die Verwendung von einfachen Anführungszeichen um einen Namen, wie z.B. 'x'
, oder doppelten Anführungszeichen, wie z.B. "x"
, ist für Sprachen wie Python oder R zulässig. Achte darauf, dass die öffnenden und schließenden Anführungszeichen übereinstimmen. 'x"
wäre zum Beispiel nicht zulässig. Du kannst sowohl einfache als auch doppelte Anführungszeichen verwenden, um Anführungszeichen innerhalb von Anführungszeichen zu setzen. In einer Bildunterschrift könntest du zum Beispiel "Panthers' points earned"
oder'Air temperature ("true temperature")'
schreiben. In Python kannst du später auch eine Kombination von Anführungszeichen für Eingaben wie "team == 'GB'"
verwenden, weil du Anführungszeichen innerhalb von Anführungszeichen verschachteln musst.
Als Nächstes lädst du dieses Paket sowie das tidyverse
, das dir Werkzeuge zur Bearbeitung und Darstellung der Daten bietet:
## R
library
(
"tidyverse"
)
library
(
"nflfastR"
)
Hinweis
Base R enthält Datenrahmen als data.frame()
. Wir verwenden stattdessen Tibbles aus dem Tidyverse, weil diese auf Bildschirmen besser dargestellt werden und andere nützliche Funktionen enthalten. Viele Benutzer betrachten data.frame()
von Base R als ein veraltetes Objekt, obwohl du diese Objekte wahrscheinlich sehen wirst, wenn du dir Hilfedateien und Beispiele im Internet ansiehst. Schließlich gibt es in R noch das Paket data.table
. Die data.table
Erweiterung von Datenrahmen ähnelt einem Tibble und funktioniert besser mit größeren Daten (z.B. 10 GB oder 100 GB Dateien) und hat eine kompaktere Kodierungssyntax, hat aber den Kompromiss, dass sie im Vergleich zu Tibbles weniger benutzerfreundlich ist. In unserer eigenen Arbeit verwenden wir eher eine data.table als ein Tibble oder einen data.frame, wenn wir eine hohe Leistung benötigen, aber den Kompromiss der Lesbarkeit des Codes eingehen wollen.
Nachdem du die Pakete geladen hast, musst du die Daten von jedem Spielzug oder die Play-by-Play-Daten (pbp) für die Saison 2021 laden. Verwende die Funktion load_pbp()
von nflfastR
und rufe die Daten pbp_r
auf (die Endung _r
hilft dir zu erkennen, dass der Code aus einem R-Beispiel in diesem Buch stammt):
## R
pbp_r
<-
load_pbp
(
2021
)
Hinweis
Wir fügen in der Regel _py
in den Namen von Python-Datenrahmen und _r
in den Namen von R-Datenrahmen ein, um dir zu helfen, die Sprache für verschiedene Codeobjekte zu identifizieren.
Nachdem du die Daten als pbp_r
geladen hast, übergibst (oder leitest) du die Daten weiter, um sie mit |>
zu filtern. Verwende die Funktion filter()
, um nur Daten auszuwählen, bei denen Übergaben stattgefunden haben (play_type == "pass"
) und bei denen air_yards
nicht fehlen oder NA
in der R-Syntax (im Klartext: die Übergabe hatte eine aufgezeichnete Tiefe). Kapitel 2, Anhang B und Anhang C behandeln die Datenmanipulation genauer, und die meisten Beispiele in diesem Buch verwenden Datenmanipulation, um Daten zu formatieren. Gib jetzt einfach diesen Code ein. Du kannst wahrscheinlich herausfinden, was der Code macht, aber mach dir keine Sorgen, dass du ihn zu sehr verstehst:
## R
pbp_r_p
<-
pbp_r
|>
filter
(
play_type
==
'pass'
&
!
is.na
(
air_yards
))
Auf kannst du dir die durchschnittliche Zieltiefe (aDOT) oder die durchschnittlichen Air Yards pro Pass für jeden Quarterback in der NFL im Jahr 2021 ansehen, der 100 oder mehr Pässe mit einer bestimmten Tiefe geworfen hat. Um zu vermeiden, dass mehrere Spieler denselben Namen haben, was häufiger vorkommt, als du denkst, fasst du sowohl die Spieler-ID als auch den Spielernamen zusammen.
Gruppiere zunächst nach passer_id
und passer
. Fasse dann zusammen, um die Anzahl der Spielzüge (n()
) und die durchschnittlichen Air Yards pro Pass (adot
) pro Spieler zu berechnen. Filtere außerdem, um nur Spieler mit 100 oder mehr Spielzügen einzuschließen und um alle Zeilen ohne Passer-Namen zu entfernen (insbesondere solche mit fehlenden oder NA
Werten).
Bei diesem und den vorherigen Beispielbefehlen prüft die Funktion is.na(passer)
, ob der Wert in der Spalte passer
den Wert NA
hat und gibt TRUE
für Spalten mit einem NA
Wert zurück. In Anhang B werden diese Logik und die Terminologie ausführlicher erklärt. Wenn du ein Ausrufezeichen (!
) hinzufügst, wird dieser Ausdruck in das Gegenteil von nicht fehlendem Wert umgewandelt, so dass du Zellen mit einem Wert behältst. Nebenbei bemerkt: Auch wir Autoren finden die Verwendung von doppelten Verneinungen verwirrend. Schließlich ordnest du nach den adot
Werten und gibst dann alle (oder unendlich, Inf
) Werte aus:
## R
pbp_r_p
|>
group_by
(
passer_id
,
passer
)
|>
summarize
(
n
=
n
(),
adot
=
mean
(
air_yards
))
|>
filter
(
n
>=
100
&
!
is.na
(
passer
))
|>
arrange
(
-
adot
)
|>
(
n
=
Inf
)
Das Ergebnis ist:
[Entire table] A tibble: 42 × 4 # Groups: passer_id [42] passer_id passer n adot <chr> <chr> <int> <dbl> 1 00-0035704 D.Lock 110 10.2 2 00-0029263 R.Wilson 400 9.89 3 00-0036945 J.Fields 268 9.84 4 00-0034796 L.Jackson 378 9.34 5 00-0036389 J.Hurts 473 9.19 6 00-0034855 B.Mayfield 416 8.78 7 00-0026498 M.Stafford 740 8.51 8 00-0031503 J.Winston 161 8.32 9 00-0029604 K.Cousins 556 8.23 10 00-0034857 J.Allen 708 8.22 11 00-0031280 D.Carr 676 8.13 12 00-0031237 T.Bridgewater 426 8.04 13 00-0019596 T.Brady 808 7.94 14 00-0035228 K.Murray 515 7.94 15 00-0036971 T.Lawrence 598 7.91 16 00-0036972 M.Jones 557 7.90 17 00-0033077 D.Prescott 638 7.81 18 00-0036442 J.Burrow 659 7.75 19 00-0023459 A.Rodgers 556 7.73 20 00-0031800 T.Heinicke 491 7.69 21 00-0035993 T.Huntley 185 7.68 22 00-0032950 C.Wentz 516 7.64 23 00-0029701 R.Tannehill 554 7.61 24 00-0037013 Z.Wilson 382 7.57 25 00-0036355 J.Herbert 671 7.55 26 00-0033119 J.Brissett 224 7.55 27 00-0033357 T.Hill 132 7.44 28 00-0028118 T.Taylor 149 7.43 29 00-0030520 M.Glennon 164 7.38 30 00-0035710 D.Jones 360 7.34 31 00-0036898 D.Mills 392 7.32 32 00-0031345 J.Garoppolo 511 7.31 33 00-0034869 S.Darnold 405 7.26 34 00-0026143 M.Ryan 559 7.16 35 00-0032156 T.Siemian 187 7.13 36 00-0036212 T.Tagovailoa 387 7.10 37 00-0033873 P.Mahomes 780 7.08 38 00-0027973 A.Dalton 235 6.99 39 00-0027939 C.Newton 126 6.97 40 00-0022924 B.Roethlisberger 647 6.76 41 00-0033106 J.Goff 489 6.44 42 00-0034401 M.White 132 5.89
Der adot
Wert, ein häufig verwendetes Maß für die Aggressivität von Quarterbacks, bietet einen quantitativen Ansatz, um Quarterbacks nach ihrer Aggressivität einzustufen, gemessen an den durchschnittlichen Air Yards pro Pass (fallen dir noch andere Möglichkeiten zur Messung der Aggressivität ein, die die Pass-Tiefe allein nicht berücksichtigt?). Sieh dir die Ergebnisse an und überlege, ob sie für dich Sinn ergeben oder ob du angesichts deiner persönlichen Meinung über Quarterbacks überrascht bist.
nfl_data_py in Python
In Python existiert das nfl_data_py
Paket von Cooper Adams als Klon des R nflfastR
Pakets für Daten. Um die Daten aus diesem Paket zu verwenden, importiere zuerst das pandas
Paket mit dem Alias (oder kurzen Spitznamen) pd
für die Arbeit mit Daten und importiere das nfl_data_py
Paket als nfl
:
## Python
import
pandas
as
pd
import
nfl_data_py
as
nfl
Als Nächstes sagst du Python, dass es die Daten für 2021 importieren soll(Kapitel 2 zeigt, wie du mehrere Jahre importieren kannst). Beachte, dass du das Jahr in einer Python-Liste als [2021]
angeben musst:
## Python
pbp_py
=
nfl
.
import_pbp_data
([
2021
])
Wie beim R-Code filterst du die Daten in Python (Pandas nennt das Filtern query
). In Python kannst du die Filterkriterien (filter_crit
) ganz einfach als Objekt an query()
übergeben, und wir lassen dich das tun, um Platz in der Zeile zu sparen. Anschließend gruppierst du nach passer_id
und passer
, bevor du die Daten mithilfe eines Python-Wörterbuchs (dict()
oder kurz {}
) mit der Funktion .agg()
aggregierst:
## Python
filter_crit
=
'play_type == "pass" & air_yards.notnull()'
pbp_py_p
=
(
pbp_py
.
query
(
filter_crit
)
.
groupby
([
"passer_id"
,
"passer"
])
.
agg
({
"air_yards"
:
[
"count"
,
"mean"
]})
)
Das Pandas-Paket erfordert auch die Neuformatierung der Spaltenköpfe mit der Funktion list()
und die Änderung der Überschrift von zwei Zeilen in eine einzige Zeile mit map(). Als Nächstes druckst du die Ausgaben aus, nachdem du sie mit der Funktion query()
nach dem Mittelwert sortiert hast (mitto_string()
können alle Ausgaben gedruckt werden):
## Python
pbp_py_p
.
columns
=
list
(
map
(
"_"
.
join
,
pbp_py_p
.
columns
.
values
))
sort_crit
=
"air_yards_count > 100"
(
pbp_py_p
.
query
(
sort_crit
)
\.
sort_values
(
by
=
"air_yards_mean"
,
ascending
=
[
False
])
\.
to_string
()
)
Das Ergebnis ist:
air_yards_count air_yards_mean passer_id passer 00-0035704 D.Lock 110 10.154545 00-0029263 R.Wilson 400 9.887500 00-0036945 J.Fields 268 9.835821 00-0034796 L.Jackson 378 9.341270 00-0036389 J.Hurts 473 9.190275 00-0034855 B.Mayfield 416 8.776442 00-0026498 M.Stafford 740 8.508108 00-0031503 J.Winston 161 8.322981 00-0029604 K.Cousins 556 8.228417 00-0034857 J.Allen 708 8.224576 00-0031280 D.Carr 676 8.128698 00-0031237 T.Bridgewater 426 8.037559 00-0019596 T.Brady 808 7.941832 00-0035228 K.Murray 515 7.941748 00-0036971 T.Lawrence 598 7.913043 00-0036972 M.Jones 557 7.901257 00-0033077 D.Prescott 638 7.811912 00-0036442 J.Burrow 659 7.745068 00-0023459 A.Rodgers 556 7.730216 00-0031800 T.Heinicke 491 7.692464 00-0035993 T.Huntley 185 7.675676 00-0032950 C.Wentz 516 7.641473 00-0029701 R.Tannehill 554 7.606498 00-0037013 Z.Wilson 382 7.565445 00-0036355 J.Herbert 671 7.554396 00-0033119 J.Brissett 224 7.549107 00-0033357 T.Hill 132 7.439394 00-0028118 T.Taylor 149 7.429530 00-0030520 M.Glennon 164 7.378049 00-0035710 D.Jones 360 7.344444 00-0036898 D.Mills 392 7.318878 00-0031345 J.Garoppolo 511 7.305284 00-0034869 S.Darnold 405 7.259259 00-0026143 M.Ryan 559 7.159213 00-0032156 T.Siemian 187 7.133690 00-0036212 T.Tagovailoa 387 7.103359 00-0033873 P.Mahomes 780 7.075641 00-0027973 A.Dalton 235 6.987234 00-0027939 C.Newton 126 6.968254 00-0022924 B.Roethlisberger 647 6.761978 00-0033106 J.Goff 489 6.441718 00-0034401 M.White 132 5.886364
Hoffentlich hat dieses Kapitel deinen Appetit geweckt, Mathe zur Untersuchung von Fußballdaten einzusetzen. Wir haben einige der vielen Themen angeschnitten, die du in späteren Kapiteln kennenlernen wirst, z. B. das Sortieren von Daten, das Zusammenfassen von Daten und das Bereinigen von Daten. Du hattest auch die Gelegenheit, Python und R für grundlegende Aufgaben bei der Arbeit mit Daten, einschließlich der Modellierung, zu vergleichen. Anhang B beschäftigt sich mit den Daten der Air Yards, um grundlegende Statistiken und Datenverarbeitung zu behandeln.
In diesem Kapitel verwendete Data Science Tools
In diesem Kapitel wurden die folgenden Themen behandelt:
-
Beschaffung von Daten aus einer Saison mit dem Paket
nflfastR
entweder direkt in R oder über das Paketnfl_data_py
in Python -
Verwende
filter()
in R oderquery()
in Python, um eine Teilmenge von Daten für die Analyse auszuwählen und zu erstellen. -
Verwenden von
summarize()
, um Daten in R mit Hilfe vongroup_by()
zu gruppieren, und Aggregieren (agg()
) von Daten nach Gruppen in Python mit Hilfe vongroupby()
-
Datenrahmen auf dem Bildschirm ausgeben, um die Daten zu betrachten
-
Entfernen von fehlenden Daten mit
is.na()
in R odernotnull()
in Python
Empfohlene Lektüre
Wenn du dich wirklich für Analytik interessierst, ohne zu programmieren, findest du hier einige Quellen, die wir gelesen haben, um unsere Philosophie und Strategien für Fußballanalysen zu entwickeln:
-
Das verborgene Spiel des Fußballs: A Revolutionary Approach to the Game and Its Statistics von Bob Carroll et al. (University of Chicago Press, 2023). Dieser Kultklassiker aus dem Jahr 1988 stellt die zahlreichen Ideen vor, die später zum Grundstein der modernen Fußballanalyse geworden sind.
-
Moneyball: The Art of Winning an Unfair Game von Michael Lewis (W.W. Norton & Company, 2003). Lewis beschreibt den Aufstieg der Analytik im Baseball und zeigt, wie die Weichen für andere Sportarten gestellt wurden. Das Buch hilft uns dabei, darüber nachzudenken, wie Modellierung und Daten dabei helfen können, den Sport zu steuern. Aus diesem Buch wurde auch ein Film gemacht.
-
The Signal and the Noise: Why So Many Predictions Fail, but Some Don't von Nate Silver (Penguin, 2012). Silver beschreibt, warum Modelle in manchen Fällen funktionieren und in anderen fehlschlagen. Er stützt sich dabei auf seine Erfahrungen mit Poker, Baseball-Analysen und der politischen Vorhersage-Website FiveThirtyEight. Das Buch zeigt, wie man bei großen Problemen quantitativ denken kann, ohne sich in den Details zu verlieren.
nflfastR
Zu guter Letzt empfehlen wir dir, die Dokumentation des Pakets zu lesen. Die Lektüre dieses Pakets wird dir helfen, viele der in diesem Buch verwendeten Daten besser zu verstehen.
Get Fußballanalyse mit Python & R now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.