Sport und Daten sind untrennbar verknüpft. Seit es Sport in der Moderne als Wettbewerb gibt, werden Unterschiede quantifiziert. Was in der Leichtathletik mit Uhr und Maßband einfach zu bestimmen sein mag, ruft in anderen Sportarten Diskussionen hervor: Haltungsnoten im Turnen oder Skispringen, Trikotwertungen im Radsport oder letztlich Tie-Breaker in etlichen Ballsportarten machen aus unterschiedlichen Leistungen vermeintlich vergleichbare Ergebnisse.
Scheint banal? Ist es, weil es allen geläufig ist. Ist es nicht, weil immer, wenn Merkmale egal welcher Art in Zahlen ausgedrückt werden, Skepsis und Überprüfung, Analyse und Interpretation notwendig werden. In unserer Tutorial Serie wollen wir zeigen, wie ihr das alles selbst machen könnt.
Gütekriterien von Daten
Punkte beispielsweise sollen eine unabhängig zu bestimmende Kennzahl sein, wer wie gespielt hat. Ist der Running Back über die Goal Line gekommen, gibt es sechs Punkte für den Touchdown. Theoretisch. Festzulegen, wann das Knie auf dem Boden war oder ob ein Receiver den Regeln entsprechend den Ball in der Endzone gefangen hat, sind Beispiele für das Problem der Objektivität. Idealerweise sollte es egal sein ob ein NFL Referee, ich oder ein trainierter Affe den Vorgang beobachtet – alle kommen zum gleichen Ergebnis: Touchdown. Idealerweise.
Der „unverdiente Sieg“ ist Beispiel für ein weiteres Problem: Inwiefern ein Team, welches mehr Punkte am Ende des Spiels hat, das „sportlich bessere“ war – darüber lässt sich trefflich streiten. Misst eine Variable das, was sie zu messen vorgibt – idealerweise – so nennt man sie in der Wissenschaft „valide“.
Darüber hinaus sollten Daten zuverlässig sein. Bildet sich der qualitative Unterschied zwischen zwei Teams über die Punktedifferenz ab und dieser Unterschied ist nicht von Messfehlern oder anderem behaftet, würde man jene reliabel nennen. Das bedeutet, dass die Ausprägung eines Merkmals – hier der Unterschied zwischen der Qualität zweier Teams – ausgedrückt wird und eben jene Quantifizierung über die Zeit stabil bleibt. Idealerweise.
Zukünftig lest ihr hier, wie man mit NFL Daten umgeht. Wie ihr sie selbst finden, auswählen, analysieren könnt. Dafür braucht es aber ein paar Begriffe und Grundlagen. Theorieunterricht Gütekriterien ist damit absolviert: Daten werden anhand von Objektivität, Validität und Reliabilität eingeschätzt. Sind diese nicht gegeben oder zweifelhaft, sind Aussagen, die man aus den Daten zieht mit großer Vorsicht zu genießen. Wie man das überprüft, dazu werden wir demnächst kommen.
Zur Praxis
NFL Daten sind in unfassbarer Menge verfügbar – und davon zu beachtlichen Teilen kostenfrei. Das Programm, mit dem ich diese Daten im Tutorial bearbeiten werde, ist auch Freeware und heißt RStudio. Hier findet ihr eine kurze und einfache Anleitung, wie ihr R bzw. RStudio auf eurem Rechner installiert. R ist eine Programmiersprache, RStudio eine grafische Benutzeroberfläche dafür.
Die Daten können natürlich auch mit Python, Matlab, SPSS oder Excel bearbeitet werden. Hier werde ich mich jedoch auf RStudio fokussieren. Ich lerne seit kurzem R und möchte euch an meinem Lernprozess teilhaben lassen. Zu den Vorteilen von R könnt ihr euch hier, zu RStudio hier etwas belesen.

RStudio setzt sich aus vier Oberflächen zusammen. Oben links können Scripts geschrieben werden, die ihr je nach Bedarf ablaufen lassen könnt oder mit Notizen versehen könnt. Dieser Quadrant wird euren primären Arbeitsplatz darstellen. Darunter findet sich die Konsole, in der ihr entweder direkt Befehle eingeben könnt, aber auch den Output des Scripts und – sehr wahrscheinlich oft zunächst – Fehlermeldungen angezeigt bekommt. Empfehlenswert ist es, Befehle über die Scripts laufen zu lassen. Sie sind so einfacher nach zu vollziehen und zu speichern.
Im rechten, oberen Quadranten wird die Arbeitsumgebung angezeigt. Unten rechts finden sich diverse wichtige Informationen und Einstellungen: Erstellte Graphen werden dort angezeigt, Informationen über die Befehle können abgerufen werden, die installierten und aktiven packages werden angezeigt und das Verzeichnis, aus dem heraus gearbeitet wird, kann bestimmt werden.
Packages
Nicht nur ist RStudio frei verfügbar, hinzu kommt eine über Jahrzehnte gewachsene Community, die mittels R Hilfestellungen für quasi jede Problemstellung vorprogrammiert hat. Ihr könnt sogenannte packages in euren Workspace implementieren, mittels derer sich Daten aufbereiten bzw. auch einfach integrieren lassen. Wie das geht erfahrt ihr gleich an einem Beispiel.
NFL Daten
Beginnen mag ich mit dem neuen Datenpackage namens nflfastR, das von Ben Baldwin und Sebastian Carl just dieses Jahr das altgediente nflscrapR quasi abgelöst und überholt hat: Dieses package vereint play-by-play Daten von 1999 an in sich, ist unfassbar schnell und bietet dabei auch jede Menge nützliche Befehle und – etwas zu meinem Leidwesen – ein richtig gutes Tutorial und eine neue Website.
Um jenes package zu implementieren, benötigt ihr zunächst die packages “devtools“, “dbplyr” und “dplyr”. Dafür gebt ihr
install.packages("devtools")
install.packages("dplyr")
install.packages("dbplyr")
in euer Script im oberen linken Quadranten ein. Damit dieses package in euren Arbeitsplatz geladen wird, braucht es noch die Befehle
library(devtools)
library(dplyr)
library(dbplyr)
Fügt
install.packages("nflfastR")
library(nflfastR)
hinzu, markiert alle Zeilen und lasst sie dann mittels Klick auf „Run“ mittig oben in der Taskleiste oder – einfacher – mit strg+Enter ablaufen. Wenn ihr mit der Installation von nflfastR Probleme bekommt, nutzt
devtools::install_github("mrcaseb/nflfastR")
library(nflfastR)
und installiert alle Versionen indem ihr “1” in die Konsole eingebt, sobald ihr gefragt werdet.
Somit installiert ihr das package nflfastR (bzw. updatet auch zukünftig die aktuelle Version). Gleich könnt ihr sehr einfach alle play-by-play Daten von 1999 bis zum jetzigen Zeitpunkt mit wenigen Befehlen abrufen. Dafür benötigt ihr zusätzlich die packages DBI und RSQLite. Dafür lasst ihr
install.packages("DBI")
install.packages("RSQLite")
laufen. Nach deren Installation müsst ihr
library(DBI)
library(RSQLite)
ausüfhren. Jetzt solltet ihr mittels
update_db()
die aktuelle Datenbank aller play-by-play Daten herunterladen können. Diese Datei wird auf eurer Festplatte gespeichert.
Daten einlesen
Jetzt sind die Daten auf eurem Rechner. Um sie in R verarbeiten zu können bedarf es noch ein paar mehr Schritten. Mehr Infos dazu findet ihr bei Thomas Mock, dem ihr ebenfalls folgen solltet.
Lasst folgenden Code laufen
connection <- dbConnect(SQLite(), "./pbp_db")
connection
dbListTables(connection)
pbp_db <- tbl(connection, "nflfastR_pbp")
pbp_db
Jetzt sollte ihr in etwa das sehen

Wie es weiter geht
Bis hierhin habt ihr neben einem kleinen Exkurs in die Testtheorie RStudio installiert und nflfastR darin integriert. Im nächsten Teil des Tutorials zeige ich, wie man sich diesem riesigen Datensatz annähert. Bis dahin, klickt euch durch die Website, lasst ein paar der Skripte durchlaufen und erfreut euch an bunten Graphen und den Ausführungen von Ben und Sebastian. Vor allem würde ich raten, dabei zu versuchen zu verstehen, wie sich der Code aufbaut, wie Befehle eingegeben werden und die Syntax zu durchdringen. Die Hilfefunktion in RStudio im unteren rechten Feld oder über F1 als auch die Suchmaschine eures Vertrauens geben euch zahlreiche Antworten. Wenn nicht – schreibt mir oder unserem Analytics Team. Und vor allem verfolgt diese Seite – bald schon gibt es mehr Tutorials zu lesen. Wie wähle ich Daten aus? Wie prüfe ich meine These? Worauf muss ich dabei achten?
Wenn ihr Ausblicke wollt, wohin es gehen kann, gibt es schon einige spannende Artikel bei uns.
Als letztes: Die Entwickler von nflfastR bauen gerade unfassbar schnell (no pun intended) an Neuerungen, bug fixes und Erweiterungen. Lee Sharpe gehört neben den oben genannten auch zu denen, die viel am package basteln – uneingeschränkte Empfehlung: folgt ihm. Wenn die hier veröffentlichte Einführung bei euch nicht funktioniert: schreibt mir oder kommentiert den Blog.
Danke für das Tutorial. Funktioniert so weit. Nur anfangs muss man eingeben:
install.packages(“dbplyr”) statt install.packages(“dplyr”)
Sonst läuft man weiter hinten bei Installation der DB in Fehlermeldungen rein.
Danke, habe grade recht lange nach dem Fehler gesucht.
sorry, der Kommentar oben ist mir durchgerutscht: ich habe gerade noch einmal bei Tom Mock nachgelesen: tatsächlich benötigt man für seine Vorgehensweise beide packages, also dbplyr UND dplyr. Habe es im Text oben aktualisiert. Danke für den Hinweis und noch einmal Verzeihung für die Ungenauigkeit.
den dplyr hatte man ja eh schon installiert 😉 … aber trotzdem super Tutorium, macht riesig Spaß