[PYTHON] [Für Anfänger] Baseball-Statistiken, die in 33 Minuten und 4 Sekunden gespeichert werden können, und PyData ~ mit Yojima Steel

Es macht Spaß, ich Herd Liga Hallo!

In diesem Beitrag möchte ich ein Beispiel für die Baseballstatistik "Sabre Metrics" mit professionellem Baseball vorstellen, die jeder liebt und Pandas und andere, die auf der Straße beliebt sind und die ich auch für Arbeit und Hobbys verwende.

Außerdem ist dieser Artikel Python Adventskalender 2016 12/4 Minuten Artikel & ** Bis Sie den Artikel gelesen und den Code kopiert und verschoben haben Die dafür benötigte Zeit wird mit ca. 33 Minuten und 4 Sekunden angenommen. **

Starting Menmber

Darüber hinaus wurde dieser Artikel in der Vergangenheit geschrieben. "Mal sehen, wie erstaunlich der Schlagmann Shohei Otani mit nur wenigen Zeilen Python-Code ist ”Wird aus Sicht der Python-Programmierung und der Baseball-Statistik neu transkribiert.

Vorstellen

Sabre Metrics in 10 Minuten zu verstehen (Baseball-Statistik)

Schreiben Sie Python-Code und analysieren Sie die Hitter! Vorher möchte ich Ihnen die Light Sabre Metrics vorstellen.

Wenn Sie es richtig schreiben, wird es nicht enden, selbst wenn es einen ganzen Tag dauert, also werde ich in Zukunft nur die Punkte vorstellen, die für Hack notwendig sind.

Was ist Sabre Metrics?

Dies ist ein Zitat aus Wikipedia (Sabre Metrics).

Sabermetrics (SABRmetrics) ist eine Analysemethode, die Daten im Baseball unter statistischen Gesichtspunkten objektiv analysiert und Spielerbewertungen und -strategien berücksichtigt. ** ** **

Trefferquote / Trefferpunkt / Homerun, Sieg, Verteidigungsquote, Fehler usw. Es gibt verschiedene Indikatoren im Baseball, aber sobald diese beiseite gelegt werden, wird ein Index für die "objektive Analyse" basierend auf der "Hypothese" erstellt. , Die Analysemethode "Über die Bewertung / Strategie der Spieler nachdenken" und ihre Idee sind Sabre Metrics.

Indikatoren werden erstellt, indem vorhandene Daten (Punktedaten wie Sitze, Treffer, Innings usw.) und detaillierte Sensordaten, die von Geschwindigkeitskanonen und Kameras / Radargeräten erfasst werden, vollständig genutzt werden.

Dieses Mal werden wir Score-Daten verwenden (Sensordaten existieren im Web überhaupt nicht viel).

Grundidee von Sabre Metrics

Es ist in Ordnung, wenn Sie die folgenden drei fangen.

  1. ** Die Gewinnquote beträgt 50%, wenn die Tordifferenz des Teams Null beträgt (Pitagolas-Gewinnquote) **

  2. ** Es ist gerecht für den Teig, "nicht rauszugehen" und "zur vorherigen Basis zu gehen"! ** ** **

  3. ** Pitchers & Fielder sollten "so viele Outs wie möglich machen" und "den Gegner nicht auf die vordere Basis zielen lassen"! ** ** **

  4. hat die Idee von "[Pitagolas Gewinnrate](https://ja.wikipedia.org/wiki/Pitagolas Gewinnrate)", und diese Gewinnratenvorhersage ist die Grundlage aller Baseballstatistiken.

** Wenn das Ziel Null ist, 50%, plus ist eine Ersparnis, minus ist eine hohe Wahrscheinlichkeit der Verschuldung. **

Außerdem wird Baseball weiterhin angreifen, es sei denn, Sie erhalten drei Outs

Sollte geschätzt werden! Sie können die Richtlinie sehen.

(Es gibt verschiedene Theorien und ich gebe Uneinigkeit zu.) Sabre-Metriken vermeiden "Spiele mit einem hohen Risiko, draußen zu sein", wie das Opfer von Bunts und den Diebstahl von Basen.

Ich möchte ein bisschen mehr wissen! Für diejenigen, die sagen, Artikel in 30 Minuten erklärt (Dies ist mein früherer Artikel und stellen den Hintergrund und einfache Anwendungsfälle vor Bitte beziehen Sie sich darauf, weil es (Stemma) gibt

Werfen Sie in 20 Minuten einen kurzen Blick auf die Eigenschaften des Schlagmanns mit Python + Pandas

Endlich ist das Thema Programmierung da (warte auf mich).

Lassen Sie uns tatsächlich Python verwenden.

Dinge die zu tun sind

Vorbereitungen

Dieser Artikel ist

Ich werde unter der Prämisse erklären (ich hoffe, Sie können es entsprechend Ihrer eigenen Umgebung lesen)

& Fragmentierte Codefragmente werden angezeigt, aber derjenige, der sie am Ende zusammengefasst hat, wird ebenfalls veröffentlicht.

(Um es klar auszudrücken: Wenn Sie den letzten kopieren, sollten Sie ihn nachahmen können.)

Bibliotheksinstallation

Schreiben Sie diesmal den Code mit der folgenden Konfiguration.

Wenn Sie pip verwenden, reicht es aus, diese eine Zeile auszuführen (bitte lesen Sie sie gut für Leute wie Anaconda).

> $ pip install ipython pandas beautifulsoup4 numpy lxml html5lib jupyter matplotlib seaborn

Starten Sie die Umgebung

Starten Sie das Jupyter-Notizbuch.

> $ jupyter notebook

Datenrahmenerfassung und -bereinigung (Vorverarbeitung)

Bibliotheksimport etc.

Da ich ein Diagramm schreibe, schreibe ich eine magische Funktion (die mit% beginnt) und importiere Pandas.

Geben Sie übrigens die Anzahl der Spalten und Zeilen an, die im Notizbuch angezeigt werden sollen, um das spätere Debuggen zu erleichtern.

%matplotlib inline
import pandas

#Erhöhen Sie die Anzeigespalten / -zeilen(30 Reihen,10 Zeilen)

pandas.options.display.max_columns = 30
pandas.options.display.max_rows = 10

Datenrahmen abrufen

Holen Sie es sich mit der Methode read_html von pandas.

Auf der Rückseite verwende ich beautifulsoup, html5lib usw., um das Table-Tag abzukratzen.

url = 'http://npb.jp/bis/players/21825112.html'  #Yojima Steel's HP(npb.jp)
df = pandas.io.html.read_html(url)  #Schaben Sie das Tabellen-Tag! Liste von df(Der Inhalt sind Pandas.core.frame.DataFrame-Objekt)Ich werde mit zurückkehren

Auf dieser Seite befinden sich mehrere Tabellen. Finden Sie also heraus, in welcher Zeile die Trefferquote liegt.

Wenn Sie zuerst die Antwort sagen, ist Index = 3 (4. Zeile) das Trefferergebnis.

Vielleicht passiert das.

FireShot Capture 4 - yo_daikan - http___localhost_8888_notebooks_yo_daikan.ipynb.png

Vorverarbeitung

Wählen Sie die gewünschte Tabelle aus mehreren Tabellen auf der Seite aus und bereinigen Sie den Datentyp usw. für eine einfache spätere Verarbeitung.

#Verwerfen Sie Mülldaten und verschieben Sie sie in einen anderen Datenrahmen(Index und,Ergebnisse vor 2010&gesamt)
atbats = df[3].drop([0, 1, 2, 3,4, 11])

Da die Spalte dieser Daten ein Index ist (die tatsächliche japanische Spalte wird als Daten behandelt), fügen Sie die Spalte erneut hinzu.

Japanisch ist in Ordnung, aber ich persönlich empfehle die Abkürzung für Baseball-Englisch (ich denke, es ist denen bekannt, die MLB schauen).

Da der Datentyp auch ein gewöhnliches Objekt ist (er ändert den Datentyp nicht wie read_csv), werde ich den Typ korrekt angeben.

#Geben Sie einen Spaltennamen an(Baseball englische Abkürzung)
atbats.columns = ['year', 'team', 'g', 'pa', 'ab', 'r', 'h', '_2b', '_3b', 'hr', 'tb', 'rbi', 'sb', 'cs', 'sh', 'sf', 'bb', 'hbp', 'so', 'dp', 'ba', 'slg', 'obp']

#Verarbeiten Sie jede Spalte vor
import numpy as np
atbats['year'] = atbats['year'].fillna(0).astype(np.float64)
atbats['g'] = atbats['g'].fillna(0).astype(np.float64)
atbats['pa'] = atbats['pa'].fillna(0).astype(np.float64)
atbats['ab'] = atbats['ab'].fillna(0).astype(np.float64)
atbats['r'] = atbats['r'].fillna(0).astype(np.float64)
atbats['h'] = atbats['h'].fillna(0).astype(np.float64)
atbats['_2b'] = atbats['_2b'].fillna(0).astype(np.float64)
atbats['_3b'] = atbats['_3b'].fillna(0).astype(np.float64)
atbats['hr'] = atbats['hr'].fillna(0).astype(np.float64)
atbats['tb'] = atbats['tb'].fillna(0).astype(np.float64)
atbats['rbi'] = atbats['rbi'].fillna(0).astype(np.float64)
atbats['sb'] = atbats['sb'].fillna(0).astype(np.float64)
atbats['cs'] = atbats['cs'].fillna(0).astype(np.float64)
atbats['sh'] = atbats['tb'].fillna(0).astype(np.float64)
atbats['sf'] = atbats['sf'].fillna(0).astype(np.float64)
atbats['bb'] = atbats['bb'].fillna(0).astype(np.float64)
atbats['hbp'] = atbats['hbp'].fillna(0).astype(np.float64)
atbats['so'] = atbats['so'].fillna(0).astype(np.float64)
atbats['dp'] = atbats['dp'].fillna(0).astype(np.float64)
atbats['ba'] = atbats['ba'].fillna(0).astype(np.float64)
atbats['slg'] = atbats['slg'].fillna(0).astype(np.float64)
atbats['obp'] = atbats['obp'].fillna(0).astype(np.float64)

Wenn Sie es in diesen Zustand bringen können, ist es Zeit für eine unterhaltsame Visualisierung und Indexberechnung.

FireShot Capture 5 - yo_daikan - http___localhost_8888_notebooks_yo_daikan.ipynb.png

Zeit für Analyse!

Versuchen Sie zunächst, die Indikatoren grafisch darzustellen

Hier verwenden wir Seaborn.

Lassen Sie uns den Übergang der Schlagrate von 2011 auf 2016 sehen.

#Zeichnen Sie ein Diagramm(bei seaborn)
import seaborn as sns

#Schlagdurchschnitt(ba, batting average)Zu einem Faltliniendiagramm
sns.pointplot(x="year", y="ba", data=atbats)

Ich bin sicher, Sie werden eine Grafik wie diese sehen.

ダウンロード.png

Sie können sehen, dass die Zahlen für 2015 gesunken sind.

Dieses Jahr war das Jahr mit der schlechtesten Leistung aufgrund von Verletzungen während der Saison, zusätzlich zu den verletzten Schultern und Oberschenkeln seit 2014 (aus meiner Erinnerung und Wikipedia).

Es gibt einige andere Daten. Wenn Sie also interessiert sind, erstellen Sie bitte eine Grafik und spielen Sie damit.

Darüber hinaus ist es gut, auf der offiziellen Website nachzusehen, wie man Seaborn benutzt.

offizielles Dokument für Seeleute

Endlich in die Welt von Sabre Metrics! !! !!

Dieses Mal werde ich mit einem einfachen Index herausfordern.

OPS(On the base Plus Slugging) Erfassen Sie die grobe Angriffskraft, indem Sie die Basisrate + die lange Trefferquote, die Fähigkeit, nicht auszugehen (Basisrate) und die Fähigkeit, zur Basis vorzurücken (lange Trefferquote), addieren.

BB/K(Base on Balls per Strike out)

Code

Dies kann durch vier Betriebsregeln zwischen Datenrahmen erfolgen.

#OPS und BB/Berechne K.

atbats['ops'] = atbats['obp'] + atbats['slg'] # OPS
atbats['bb_k'] = atbats['bb'] / atbats['so'] # BB/K

Klicken Sie hier für die Ergebnisse!

OPS

FireShot Capture 6 - yo_daikan - http___localhost_8888_notebooks_yo_daikan.ipynb.png

BB/K

FireShot Capture 7 - yo_daikan - http___localhost_8888_notebooks_yo_daikan.ipynb.png

Erwägung

Fordern Sie erneut heraus! ~ Wie viele Schaukeln jedes Mal, wenn Sie eine auswählen

Es gibt auch K / BB, was das Gegenteil von BB / K ist, also schauen wir uns das auch an.

FireShot Capture 8 - yo_daikan - http___localhost_8888_notebooks_yo_daikan.ipynb.png

** Sie können sehen, dass Yojima Steel in diesem Jahr ungefähr dreimal pro 4 Bälle geschwungen hat. **

Wenn K / BB nicht in 1.5-2.0 passt, wenn nicht so schlecht wie 6.09 im Jahr 2011 und 4.42 im Jahr 2015,

** Nr. 1 Schlagart in Bezug auf OPS, aber mehr Treffer als Chancen, auf die Basis zu kommen **

Es scheint ein schmerzhaftes Gefühl zu sein.

Die Hokkaido Nippon Ham Fighters sind ein Team, das die Daten sehr detailliert betrachtet (obwohl es ein Rätsel ist, Opferbunts zu empfehlen), und es scheint möglich, dass die Verschlechterung der Zahlen in diesem Bereich zu FA führte (tatsächlich detailliertere Zahlen & hier). Die Verteidigung, die nicht zum Ausdruck gebracht werden kann, ist ebenfalls betroffen.

Zusammenfassung (3 Minuten 4 Sekunden)

Dieser Code-Ausschnitt (1 Minute)

Hier ist eine Zusammenfassung der Schnipsel, die ich in Fragmenten geschrieben habe.

Speichern wir den positiven Stahl

Impressionen & was ich sagen möchte (2 Minuten)

Im Sinne von Python (oder PyData)

Hauptsächlich was ich sagen möchte Main (erfahren)

Im Sinne eines Baseballs (oder eines Sparers)

Ein letztes Wort (4 Sekunden)

** Warum hat es nichts mit Hanshin zu tun! ** ** **

... morgen, kimihiro_n, danke!

[Bonus] Nachschlagewerk (Baseball)

Für diejenigen, die mehr über Sabre Metrics erfahren möchten.

Ich frage mich, ob es keinen Zweifel gibt, ob dieser Bereich unterdrückt wird!

Recommended Posts

[Für Anfänger] Baseball-Statistiken, die in 33 Minuten und 4 Sekunden gespeichert werden können, und PyData ~ mit Yojima Steel
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
Morphologische Analyse und tfidf (mit Testcode), die in ca. 1 Minute durchgeführt werden können
Ich habe die Jumbo-Lotterie zum Jahresende mit Python gekauft und analysiert, die in Colaboratory ausgeführt werden kann
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
[Kann in 10 Minuten erledigt werden] Erstellen Sie schnell eine lokale Website mit Django
Eine Geschichte, die Heroku, die in 5 Minuten gemacht werden kann, tatsächlich 3 Tage dauerte
Hinweise zum Erstellen von Zahlen, die mit matplotlib in Zeitschriften veröffentlicht werden können
Einfache Programminstallation und automatische Programmaktualisierung, die in jeder Sprache verwendet werden kann