Gameday: Descargando y Graficando Porcentajes de Victorias con Python y R.

Introducción

En este post analizamos el archivo contextMetrics para obtener los porcentajes de victoria de los equipos que conforman a la Liga Venezolana de Béisbol Profesional (LVBP).

Partidos

Para realizar este ejercicio es necesario que descargues el archivo games.csv desde aquí. Este fichero contiene los partidos que se llevaron a cabo en la LBVP desde la temporada 2015-2016 hasta la fecha. Cada línea del fichero hace referencia a un partido y contiene contiene los siguientes datos para cada encuentro:

  • Identificador del Partido
  • Fecha
  • Hora Local del Partido
  • Tipo de Partido
  • Nombre Corto de Equipo de Local
  • Nombre Completo de Equipo Local
  • Nombre Corto de Equipo de Visitante
  • Nombre Completo de  Equipo Visitante
  • Nombre del Estadio

Código

Las líneas 1 y 2 le indican a Python que utilizaremos los módulos csv y requests en nuestro código.

La línea 4 inicia una lista vacía. Una lista es básicamente una colección de valores. Tales valores pueden ser entre muchos otros, números, cadenas de texto y listas. En este caso, la lista de nombre listaDePorcentajes guardará otras listas. Más información acerca de las listas aquí.

En la línea 6 abrimos el archivo games.csv y le damos el alias archivoPartido. Por cierto, para que esta línea de código funcione, el fichero games.csv debe encontrarse en el directorio donde reside este código.

En la línea 10 utilizamos la herramienta reader del módulo csv para crear un lector que pueda interpretar al archivo abrimos en la línea 6. El lector que creamos recibe el nombre lectorDePartidos.

Ahora que tenemos el lector podemos analizar cada una de las líneas del archivo csv. La línea 13 nos permite hacer esto por medio del comando for. Este comando da el nombre p a cada una de las líneas del archivo y sigue una secuencia de pasos para cada una de ellas. En este caso en particular, el comando for nos permite ejecutar las líneas 16, 19, 22, 25, 28, 31 y 39 para cada partido contenido en el archivo. Más información acerca del comando for aquí.

Cabe destacar que cada línea p tiene los campos descritos en el apartado de Partidos en forma de lista. De este modo la línea 16 primero revisa si el partido fue parte de una temporada regular. La línea 17 simplemente imprime una descripción acerca del partido:

Analizando partido 449894,Tigres de Aragua vs. Cardenales de Lara jugado en Estadio Antonio Herrera Gutierrez el 2015-10-22 a las 19:30 hrs.
Analizando partido 449892,Leones del Caracas vs. Aguilas del Zulia jugado en Estadio Luis Aparicio el 2015-10-22 a las 19:30 hrs.
view raw descripcion.txt hosted with ❤ by GitHub

Las líneas 22, 25 y 28 realizan lo que ya hemos descrito en este post. La línea 31 crea una lista con datos para el equipo local y la agrega a la lista listaDePorcentajes. La línea 32 hace lo mismo para equipo visitante. Así, a partir de estas dos últimas líneas la lista listaDePorcentajes toma la siguiente forma:

[
['2015-10-07', 'Navegantes del Magallanes', '.000', '2015']
, ['2015-10-07', 'Tigres de Aragua', '1.000', '2015']
, ['2015-10-07', 'Tiburones de La Guaira', '.000', '2015']
, ['2015-10-07', 'Cardenales de Lara', '1.000', '2015']
]
view raw gistfile1.txt hosted with ❤ by GitHub

La linea 47 crea un archivo llamado porcentaje.csv y se refiere a él como archivoPorcentajes. Posteriormente utilizamos la herramienta writer del módulo csv para crear un redactor que pueda escribir al archivo porcentaje.csv.

La línea 53 escribe un registro a este archivo por cada lista contenida dentro de listaPorcentajes.

import csv
import requests
listaDePorcentajes = []
# Abrir archivo de partidos.
with open( 'games.csv' ) as archivoPartido:
# Crear un lector de archivos
lectorDePartidos = csv.reader( archivoPartido )
# Por cada partido, hacer...
for p in lectorDePartidos:
# Revision de si es un partido de temporada regular.
if p[3] == 'R':
# Impresion de descripcion.
print( 'Analizando partido '+p[0]+', '+p[7]+' vs. '+p[5]+' jugado en '+p[8]+' el '+p[1]+' a las '+p[2]+' hrs.' )
# Una url.
url = 'http://statsapi.mlb.com/api/v1/game/' + p[0] + '/contextMetrics'
# Una peticion.
texto = requests.get(url)
# Una conversion de texto a json
json = texto.json()
# Guardar porcentaje de victoria de equipo local
listaDePorcentajes.append( [ p[1]
, p[5]
, json['game']['teams']['home']['leagueRecord']['pct']
, json['game']['season']
]
)
# Guardar porcentaje de victoria de equipo visitante
listaDePorcentajes.append( [ p[1]
, p[7]
, json['game']['teams']['away']['leagueRecord']['pct']
, json['game']['season']
]
)
# Crear archivo de porcentajes.
with open( 'porcentajes.csv', 'w' ) as archivoPorcentajes:
# Crear un redactor de archivos
escritorDePorcentajes = csv.writer( archivoPorcentajes )
# Escribir archivo
escritorDePorcentajes.writerows( listaDePorcentajes )

Grafico en R

Una vez descargados los porcentajes de victorias toca graficarlos. Usaremos R para hacer esto ya que a mi en lo personal me agrada mucho ggplot. El código para generar el gráfico puedes descargarlo de  aquí.

Rplot01

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s