Introducción
En el post anterior comenté un poco acerca de los motivos que me llevaron a abandonar el análisis de los archivos XML de Gameday para concentrarme en los JSON. No obstante jamás explique realmente lo que era un archivo JSON o el papel que juegan dentro del mundo del análisis del béisbol. Pues bien, en este post, doy una explicación básica acerca de lo que son los JSON’s y cómo estructuran información. Asimismo, describo los pasos básicos que se deben seguir para descargar un conjunto de datos en formato JSON desde Gameday utilizando Python.
Gameday
Gameday es una plataforma creada por la Major League Baseball Advance Media para publicar información acerca de diferentes ligas que existen a lrededor del mundo. Entre la vasta cantidad de datos que Gameday difunde para su libre descarga, podemos encontrar datos relacionados a jugadores, equipos, estadios, temporadas, partidos e incluso apariciones al plato y picheos. Eso, sin mencionar la enorme cantidad de estadísticas que provee.
Los JSON’s de Gameday
Gameday reparte la enorme cantidad de datos que posee en múltiples archivos de texto. Esto con la finalidad de dividir la información en diferentes temas o áreas. De este modo, cada uno de estos archivos guarda información de su dominio en un formato conocido como JSON. De entre la gran cantidad de archivos JSON que conforman a Gameday, podemos señalar los siguientes:
- people: Contiene información acerca de las personas que han tenido participación en algún partido. Incluye datos como nombre, altura, edad, peso, posición predilecta dentro del campo, lateralidad, etcétera.
- contextMetrics: Contiene información general de un partido. Incluye entre muchos otras cosas, lugar, fecha y hora donde se llevó a cabo un encuentro y los equipos que participaron.
- playByPlay: Contiene todos las jugadas ocurridas durante un partido. Entre sus registros se pueden encontrar datos acerca de pitcheos, robos de base, sustituciones, etcétera.
- boxscore: Contiene entre otras cosas, las estadísticas de bateo, pitcheo y fildeo de los jugadores y equipos que participaron en un partido.
El formato JSON
Un formato JSON (o simplemente JSON) es un método computacional y de organización de texto que tiene entre sus principales objetivos el estructurar un conjunto de datos a fin de que este sea legible para el ojo humano. Para entender de qué manera lo hace, revisemos el siguiente bloque de texto extraido a partir del archivo contextMetrics.
{
"teams" : {
"away" : {
"leagueRecord" : {
"wins" : 18,
"losses" : 26,
"pct" : ".409"
}
},
"home" : {
"leagueRecord" : {
"wins" : 21,
"losses" : 23,
"pct" : ".477"
}
}
}
}
Sin duda, lo primero que se podemos notar al leer este conjunto de datos es la enorme cantidad de de llaves ({}) que contiene. Sin embargo, si lo examinamos un poco más a fondo, también podemos notar que:
- El bloque comienza y termina con una llave. Esto se debe a que un JSON utiliza las llaves { y } para marcar el inicio y el fin de un conjunto de datos. Por cierto, debo mencionar que dentro del mundo de JSON, todo lo que se encuentra encerrado entre un par de llaves recibe el nombre objeto. De este modo, en nuestro ejemplo, el conjunto de datos u objeto comienza en la línea 1 y termina en la línea 15.
- Existen muchas palabras entrecomilladas a las que les proceden dos puntos (:). A tales palabras se les conoce como keys (o llaves en español). Cada key tiene asignado un value (valor en español), mismo que se sitúa a la derecha de los dos puntos. Así, podemos pensar en el carácter : como un símbolo de asociación que sirve para dar un nombre a un valor. En nuestro ejemplo, el valor “.409” lleva el nombre de pct.
- Un par de llaves puede tener dentro de sí otros conjuntos de llaves. Esto se debe a que un key puede tener asignado un objeto (o conjunto de datos, como prefieras llamarle) por valor. Así, podemos pensar en un objeto JSON como un conjunto de parejas key-value que a su vez pueden estar compuestas por otros objetos que contienen otras parejas llave-valor. En nuestro ejemplo, el objeto JSON está compuesto por un objeto de nombre teams. Teams, a su vez está compuesto por dos objetos: home y away. Ambos objetos home y away se componen cada uno de un objeto llamado leagueRecord. Los objetos leagueRecords, por su parte se compone de las llaves wins, losses y pct, los cuales que poseen un valor numérico o de texto.
Descargando JSON’s de Gameday mediante Python
Ahora que sabemos lo que es Gameday y entendemos cómo estructura sus datos, ha llegado la hora que liberes al hacker que llevas dentro y aprendas a descargar datos de esta plataforma. Por cierto, antes de empezar a descargar datos de GD te invito a que descargues Anaconda, un software que entre muchas herramientas de Ciencia de Datos, trae consigo Spyder y RStudio, programas que te facilitarán escribir código en Python y R respectivamente. Bien una vez que hayas abierto Spyder, escribe y ejecuta el siguiente código:
import requests
miTexto = requests.get('http://statsapi.mlb.com/api/v1/game/431674/contextMetrics')
miJson = miTexto.json()
Ahora, entendamos línea por línea lo que acabamos de escribir. En la línea 1, utilizamos el comando import para decirle a Python que necesitamos utilizar el módulo requests en nuestro código. Técnicamente hablando, los módulos son archivos que contienen código Python. Podemos pensar en ellos como cajas de herramientas que contiene utensilios que posteriormente podemos emplear en nuestro código. Así, podemos pensar que en este ejercicio, empleamos el comando import para que Python nos permitiera utilizar las herramientas que hay dentro del módulo requests.
En la línea 3, utilizamos el método(o herramienta) get del módulo requests para pedirle a Gameday que nos deje descargar el archivo contextMetrics del juego 431674. Dos aspectos importantes que debemos resaltar de esta línea son:
- Utilizamos el carácter . en requests.get para especificar que get es un instrumento que reside dentro de requests.
- Para acceder a un archivo de Gameday, debemos unir la cadena de texto http://statsapi.mlb.com/api/v1/game/ con un numero de juego y el nombre del archivo que queramos descargar.
Por último, en la línea 4, le indicamos a Python que el texto que acabamos de descargar se encuentra en formato JSON y queremos que lo decodifique. La decodificación transformara al archivo en formato JSON en un diccionario de Python. Los JSON’s y los diccionarios, tal y como veremos más adelante son básicamente lo mismo. Sin embargo, los diccionarios a diferencia de los JSON si pueden ser utilizados de manera directa por Python y es por eso que necesitamos realizar una conversión.
Comentarios Finales
Aunque las explicaciones que aquí se dieron son algo simplistas, para nosotros que vamos dando los primeros pasos en la extracción, limpia y análisis de datos de béisbol, estas deberían ser suficiente por ahora. No obstante, conforme vayamos explorando datos de Gameday iré explicando más a fondo estos y otros aspectos relacionados con Gameday, JSON y Python. Asimismo, te invito a que empieces a relacionarte más con al lenguaje de Programación Python ya que es sumamente fácil de aprender, incluso si nunca has programado antes. Existen muchísimos cursos/libros gratuitos en internet que puedes utilizar.
Un comentario en “Gameday: Descargando JSON’s.”