Umgebung:
In diesem Artikel möchte ich Baseballdaten wie Sabre Metrics selbst analysieren! Dies ist eine Zusammenfassung des Ablaufs bis zu dem Punkt, an dem ich die erforderlichen Daten eingegeben und in die Datenbank gestellt habe.
Am 29. Oktober 2015 gewann Softbank die Japan Series in Japan, und die Royals gewannen zum zweiten Mal in Folge die World Series, was für mich als Baseball-Enthusiast eine sehr aufregende Saison ist.
Der Grund, warum ich mich für Sabre interessierte, war, dass ich zuerst Datenanalyse studieren wollte. Als ich dann darüber nachdachte, welche Art von Daten ich analysieren und wie ich das Beste daraus machen sollte, kam ich auf die Idee, meine Lieblings-Baseballdaten mit Python zu hacken.
Daher hoffe ich, dass dieser Artikel denjenigen hilft, die über dasselbe nachdenken.
Retrosheet Leider ist NPB nicht so detailliert wie MLB und kann nicht heruntergeladen werden (es kann durch Scraping gesammelt werden).
Dieses Mal werde ich die MLB-Daten von Retrosheet herunterladen (es gibt andere Lahman usw.) und sie in die Datenbank stellen.
(1) py-retrosheet, Chadwick Retrosheet-Daten sind so wie sie sind sehr schwer zu lesen, und die Datenbereinigung ist sehr mühsam. Es gibt jedoch einige Leute, die solche Daten ordentlich angeordnet haben, daher werde ich diesen Code verwenden.
$ brew update
$ brew install chadwick
$ git clone https://github.com/wellsoliver/py-retrosheet.git
Außerdem werden die für die Verwendung von [py-retrosheet] erforderlichen Bibliotheken heruntergeladen (https://github.com/wellsoliver/py-retrosheet). mysql-python wird für sqlalchemy benötigt und MySQL wird diesmal verwendet.
$ pip install sqlalchemy mysql-python
(2) MySQL Das Herunterladen und Importieren von Daten in SQL erfolgt ebenfalls mit py-retrosheet. Der Rest besteht in der Pflege einer Datenbank wie MySQL.
$ brew install mysql
Nehmen Sie als Nächstes verschiedene Einstellungen für MySQL vor. (Erstellen und verwenden Sie dieses Mal einen Testbenutzer.)
$ mysql_secure_installation #Sicherheitseinstellungen wie Passwort
$ mysql.server start
$ mysql -u root -p
Enter password:Was Sie einstellen
mysql> CREATE DATABASE retrosheet #Datenbank erstellen
mysql> CREATE USER test IDENTIFIED BY "*****(Your Password)" #Erstellen Sie einen Testbenutzer mit dem Namen test
mysql> GRANT ALL ON retrosheet.* TO test #Legen Sie den Retrosheet-Datenbankzugriff für Testbenutzer fest
Importieren Sie anschließend das Schema mit dem zuvor erstellten Testbenutzer
$ mysql -u test[USER_NAME] -p retrosheet[DB_NAME] < sql/schema.sql
Damit sind die MySQL-Einstellungen abgeschlossen.
parse.py[line58-59,61]
sql = 'SELECT * FROM rosters WHERE year = %s AND player_id = %s AND team_tx = %s'
res = conn.execute(sql, [row[0], row[1], row[6]])
if results.rowcount() == 1:
parse.py[Überarbeitet]
sql = 'SELECT * FROM rosters WHERE year = ? AND player_id = ? AND team_tx = ?'
res = conn.execute(sql, [row[0], row[1], row[6]])
if len(results.fetchall()) == 1:
Bearbeiten Sie abschließend die Datei congit.ini und richten Sie die soeben erstellte Datenbank ein
$ cd scripts
$ cp config.ini.dist config.ini
$ vim config.ini # config.Bearbeitung ini
config.ini
[database]
engine = mysql # or sqlite, postgresql
host = localhost
database = retrosheet
schema = retrosheet
user = test
password = ****** # your password
Laden Sie dann die Daten mit download.py herunter und importieren Sie sie mit parse.py in SQL!
$ python download.py -y 2014 #Geben Sie das Jahr für den Download im Kalender an. Eine Option ist nicht möglich
$ python parse.py -y 2014 #In SQL importieren
Überprüfen Sie damit den Inhalt von SQL, und wenn es ordnungsgemäß importiert werden kann, endet es. Alles was Sie tun müssen, ist die Daten zu analysieren, wie Sie möchten!
mysql> select * from retrosheet.teams;
+---------+-------+---------------+--------------+
| TEAM_ID | LG_ID | LOC_TEAM_TX | NAME_TEAM_TX |
+---------+-------+---------------+--------------+
| ANA | A | Anaheim | Angels |
| BAL | A | Baltimore | Orioles |
| BOS | A | Boston | Red Sox |
| CHA | A | Chicago | White Sox |
| CLE | A | Cleveland | Indians |
| DET | A | Detroit | Tigers |
| HOU | A | Houston | Astros |
| KCA | A | Kansas City | Royals |
| MIN | A | Minnesota | Twins |
| NYA | A | New York | Yankees |
| OAK | A | Oakland | Athletics |
| SEA | A | Seattle | Mariners |
| TBA | A | Tampa Bay | Rays |
| TEX | A | Texas | Rangers |
| TOR | A | Toronto | Blue Jays |
| ARI | N | Arizona | Diamondbacks |
| ATL | N | Atlanta | Braves |
| CHN | N | Chicago | Cubs |
| CIN | N | Cincinnati | Reds |
| COL | N | Colorado | Rockies |
| LAN | N | Los Angeles | Dodgers |
| MIA | N | Miami | Marlins |
| MIL | N | Milwaukee | Brewers |
| NYN | N | New York | Mets |
| PHI | N | Philadelphia | Phillies |
| PIT | N | Pittsburgh | Pirates |
| SDN | N | San Diego | Padres |
| SFN | N | San Francisco | Giants |
| SLN | N | St. Louis | Cardinals |
| WAS | N | Washington | Nationals |
+---------+-------+---------------+--------------+
Recommended Posts