En esta práctica, vamos a usar la API COVID-19, desarrollada por Kyle Redelinghuys y basada en los datos que proporciona la Universidad Johns Hopkins.
Para empezar, tenemos que instalar la librería necesaria para proyectar los datos que obtengamos sobre la incidencia de la COVID-19. Para ello, usamos el comando pip install pandas. Para especificar que lo que estamos haciendo es ejecutar un comando bash, ponemos un ! al inicio de la línea.
!pip install pandas
Una vez instalada, tenemos que importarla al proyecto que estamos realizando. Para ello, usamos la función import, e importamos la librería como pd, de forma abreviada, tal y como sigue a continuación.
import pandas as pd
Ya está instalada la librería Pandas y la hemos importado. Ahora ya podemos empezar a crear las variables necesarias para, posteriormente, realizar los gráficos con los datos de la API. Lo primero será definir la variable url, que será la que le diga a Python el origen de los datos.
url = 'https://api.covid19api.com/countries'
Una vez tenemos el enlace donde se encuentran los datos, podemos empezar a mostrarlos. Lo primero será crear un dataframe, una tabla con filas y columnas en la que aparecerán los datos. Para ello, usamos la función de Pandas que lee el formato .json, en el que están los datos de la API: pd.read_json(url). Al poner (url), le estamos indicando a Pandas cuáles son los datos que tiene que leer.
df = pd.read_json(url)
Ejecutamos el df para visualizar que todo está correcto.
df
Como vemos, al componerse de 248 filas, solo se nos muestra un extracto, las primeras y las últimas filas. Ahora vamos a seguir explorando la tabla.
Por ejemplo, vamos a visualizar las 6 primeras filas. Para ello, a través de head, le decimos que nos muestre el dataframe con las X primeras filas, que en este caso le hemos indicado que sean 6.
df.head(6)
Ahora lo mismo, pero al contrario, empezando por el final. Para decirle que queremos comenzar por el final, en lugar de head usamos tail, con el mismo formato: entre paréntesis indicamos el X número de filas que queremos visualizar.
df.tail(2)
Si queremos conocer más datos técnicos acerca de la composición de lo que estamos usando, podemos usar info, que nos indicará de qué tipo son los datos por columnas, el total de filas y columnas, cuánto utiliza de memoria o si existen datos nulos.
df.info()
Si queremos filtrar por columnas para ver los datos de alguna en particular, seguimos usando el df pero ahora, entre corchetes, ponemos el nombre de la columna que queramos visualizar. Por ejemplo, para ver una lista (abreviada) de países, usamos 'Country'.
df['Country']
Además de esto, también podemos cruzar filas con columnas. Es decir, saber qué valor tiene la fila X en la columna Y. Para ello, añadimos otro corchete a los que tenemos especificando el número de la fila. En este caso, queremos saber qué país está codificado en la fila 66 de la tabla o dataframe.
df['Country'][66]
Una vez hemos testeado algunas formas de visualización del dataframe de los países, vamos a centrarnos en algunos territorios concretos para ver su evolución en tiempo real de los casos confirmados.
Para hacer esto, tenemos que definir de nuevo el enlace desde el que Pandas leerá los datos y crear, a partir de este, el dataframe. En esta ocasión, veremos los datos de España, por lo que obtenemos desde la API los casos confirmados en tiempo real para el país y los definimos. Posteriormente, los mostramos para ver que todo ha ido bien.
url_es = 'https://api.covid19api.com/country/spain/status/confirmed/live'
df_es = pd.read_json(url_es)
df_es
Al igual que hicimos anteriormente, vamos a ver diferentes datos de la tabla. Para empezar, queremos listar las columnas existentes y saber qué datos contiene cada una. Lo hacemos mostrando el dataframe de España y añadiendo columns.
df_es.columns
De la misma manera, podemos cruzar filas con las columnas para saber un dato concreto. Por ejemplo, para saber cuál es el dato que se encuentra en la primera fila, empezando por el principio, filtramos por la columna 'Date', y con .head(x) le indicamos el número que queremos.
df_es['Date'].head(1)
Además, para saber los tipos de datos contenidos en el dataframe, si existen datos nulos y el tamaño total de la tabla, usamos info.
df_es.info()
Si profundizamos en cuestiones estadísticas, podemos saber, por ejemplo, datos como la media, la desviación estándar, los diferentes cuartiles y el valor mínimo y máximo, usamos describe.
df_es.describe()
Aquí volvemos a mostrar el dataframe entero, aunque aparece de forma abrevada por cuestión de espacio, sin filtrar por columna o tipo de datos.
df_es
A continuación, colocamos como referencia la fecha de los datos, para empezar a obtener una imagen general de la evolución de los datos. Para ello, fijamos con set_index el nombre de la columna que queremos colocar como referencia, que en este caso es la fecha ('Date').
df_es.set_index('Date')
Para ceñirnos estrictamente a los datos que queremos ver, y así dejar fuera los que son innecesarios, como el país, la latitud y la longitud o el código del país, entre corchetes especificamos la(s) columna(s) que queramos mostrar además de la de la fecha.
df_es.set_index('Date')['Cases']
Vamos a pasar a la representación gráfica. Manteniendo lo anterior, es decir, los datos que queremos visualizar (fecha y número de casos, para ver la evolución temporal), añadimos plot y le ponemos un título al gráfico, dentro de los paréntesis a partir de plot.
df_es.set_index('Date')['Cases'].plot(title="Casos de Covid19 en España")
Ahora repetimos el mismo proceso que hemos hecho hasta ahora pero con otro país, pero centrándonos solo en la representación visual de los datos.En este caso se ha elegido Italia.
url_it = 'https://api.covid19api.com/country/italy/status/confirmed/live'
df_it = pd.read_json(url_it)
df_it.set_index('Date')['Cases'].plot(title="Casos de Covid19 Ben Italia")
De nuevo, escogemos un tercer país de la API y volvemos a visualizarlo a través de plot de su dataframe. Se ha elegido México.
url_mex = 'https://api.covid19api.com/country/mexico/status/confirmed/live'
df_mex = pd.read_json(url_mex)
df_mex.set_index('Date')['Cases'].plot(title="Casos de Covid19 en México")
Una vez que hemos visto diversos países por separados, es el momento de unir todos sus datos para poder compararlos y ver cómo han ido evolucionando sus casos confirmados de coronavirus a lo largo de un periodo temporal.
Para ello, creamos una nueva variable por cada país que contenga solo los datos que hemos ido necesitando y trabajando anteriormente: fecha y número de casos confirmados.
casos_it = df_it.set_index('Date')['Cases']
casos_es = df_es.set_index('Date')['Cases']
casos_mex = df_mex.set_index('Date')['Cases']
Una vez definidas estas variables, empezamos a jugar con ellas y mostrándolas, esta vez haciendo uso de la concatenación de la librería de Pandas.
pd.concat([casos_it, casos_es, casos_mex],axis=1)
Para simplificar esta agrupación, creamos una nueva variable a partir de la concatenación anterior, a la que llamaremos 'vs' y la mostramos.
vs = pd.concat([casos_it, casos_es, casos_mex],axis=1)
vs
Ahora, damos nombre a las columnas para organizar bien los datos y el gráfico. Una vez hecho esto, mostramos el gráfico con plot y elegimos el tipo de gráfico, que en este caso, será de área.
vs.columns = ['Italia', 'España', 'Mexico']
vs.plot(title="Italia vs España vs Mexico",kind='area')
Expportamos nuestra nueva variable, que hemos limpiado para que contenga únicamente los datos necesarios, y la exportamos a un archivo separado por comas (.csv), con la función to_csv.
vs.to_csv('esvsit.csv')
Verificamos que se haya guardado ejecutando el comando bash ls.
!ls
Para guardar el gráfico como imagen PNG, tenemos que importar la librería pyplot de matplotlib, que ya se encuentra instalada. Generamos el gráfico de nuevo y con plt.savefig('nombre-grafico.png') se crea la imagen.
import matplotlib.pyplot as plt
vs.plot()
plt.savefig('esvsit.png')
Volvemos a verificar que se ha exportado correctamente y que el gráfico existe como imagen PNG con el nombre que le hemos dado.
!ls