Una vez que descargamos los datos de Retrosheet con el shell script que vimos en la primera parte de esta serie, pasamos a crear una base de datos MySQL. Una vez que creamos la base de datos, creamos dos tablas, una para los eventos ocurridos dentro del juego y otra para los datos generales del juego. Para crear estas tablas utilizamos los scripts s_retrosheet_events.sql y s_retrosheet_games.sql respectivamente. Posteriormente corremos el siguiente script. Lo que hace es iterar a través de los archivos e insertarlos dentro de las dos tablas que se acaban de crear. Para ejecutarlo, instala las librerías que se muestran en las primeras tres lineas y posteriormente cambia las líneas 9, 31 y 32 para que se ajusten a tu entorno de trabajo.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
import glob | |
from sqlalchemy import create_engine as ce, types | |
def insertToDatabase( p_df, p_tbl ): | |
# Idealmente, poner en un archivo .const. | |
# Se pone aqui para mas facilidad y hacer menos lineas. | |
con = "mysql://usuario:contrasenia@localhost/nombreDeBaseDeDatos?use_unicode=1&charset=utf8" | |
p_df.to_sql( name = p_tbl | |
, con = ce( con ) | |
, if_exists = "append" | |
, index = False | |
) | |
def processCsvs( dir, p_tbl ): | |
# Recorrer todo el directorio en busca de CSV's. | |
# glob permite encontrar patrones en el nombre de archivos. | |
for csv in glob.glob(f"{dir}/*.csv"): | |
print(f"Processing {csv}") | |
df = pd.read_csv( filepath_or_buffer = csv, header = 0 ) | |
insertToDatabase( p_df = df, p_tbl = p_tbl ) | |
# Main | |
games_dir = # Directorio que contiene los csv's de partidos | |
events_dir = # Directorio que contiene los csv's de eventos. | |
processCsvs( dir = games_dir, p_tbl = "s_retrosheet_games" ) | |
processCsvs( dir = events_dir, p_tbl = "s_retrosheet_events" ) |