En esta práctica, se va a usar la API COVID-19, desarrollada por Kyle Redelinghuys y basada en los datos que proporciona la Universidad Johns Hopkins.
En primer lugar, es necesario instalar la librería para proyectar los datos que se obtengan sobre la incidencia de la COVID-19. Para ello, se emplea el comando pip install pandas
. Pandas es una librería estándar de Python que se encarga del manejo de datos. Para especificar que lo que se está realizando es ejecutar un comando bash, se indica con el signo !
al inicio de la línea.
A continuación, se instala Pandas con el siguiente comando:
!pip install pandas
Tras este paso, se importa el proyecto. Para ello, se utiliza la función import
y se importa la librería Pandas como pd
, de forma abreviada, tal y como sigue a continuación.
import pandas as pd
Ya se ha instalado la librería Pandas y se ha importado. Ahora se comienza con la creación de las variables necesarias para, posteriormente, realizar los gráficos con los datos de la API. Primero se define la variable url
, que será la que le diga a Python el origen de los datos:
url = 'https://api.covid19api.com/countries'
Cuando se tiene el enlace donde se encuentran los datos, los mostramos. Primero se crea un DataFrame (una tabla con filas y columnas en la que aparecerán los datos). Para ello, se utiliza 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)
, se le señala a Pandas cuáles son los datos que tiene que leer.
df = pd.read_json(url)
Se ejecuta el df
para visualizar que todo está correcto:
df
Como se observa, al componerse de 248 filas, solo se muestra un extracto, las primeras y las últimas filas. A continuación, se sigue explorando la tabla.
Por ejemplo, se van a visualizar las 6 primeras filas. Para ello, a través de head
, se le dice que muestre el DataFrame con las X primeras filas, que en este caso se ha indicado que sean 6:
df.head(6)
Por consiguiente, sucede lo mismo pero al contrario, empezando por el final. Para decirle que se quiere comenzar por el final, en lugar de head
se utiliza tail
, con el mismo formato: entre paréntesis se señala el X número de filas que se quiere visualizar.
Se muestran las últimas entradas de la tabla (tail); el 2 indica cuántas filas se exponen:
df.info()
Si se quieren conocer más datos técnicos acerca de la composición de lo que se está usando, se puede usar info
. Esto indica información sobre el DataFrame entre la que incluye el índice (RangeIndex) con el número de entradas, el número de columnas que hay (Data Columns), el nombre de las columnas (Colum), la cantidad de datos nulos que posee la tabla (Non-Null Count), el tipo de variable de las columnas (Dtype) y el tamaño (memory usage).
Se muestra la información de la tabla como objecto de Pandas:
df.tail(2)
Si se quiere filtrar por columnas para ver los datos de alguna en particular, se sigue utilizando df
pero ahora, entre corchetes, se pone el nombre de la columna que se quiera visualizar. Por ejemplo, para ver una lista (abreviada) de países, se emplea 'Country'.
A continuación, se muestra la columna 'Country':
df['Country']
Además de esto, también se pueden cruzar filas con columnas. Es decir, saber qué valor tiene la fila X en la columna Y. Para ello, se incluye otro corchete a los que se tiene especificando el número de la fila. En este caso, se quiere saber qué país está codificado en la fila número 66 de la tabla o DataFrame.
Se muestra la columna 'Country' y la fila número 66:
df['Country'][66]
https://api.covid19api.com/country/spain/status/confirmed/live
Una vez se han testeado algunas formas de visualización del DataFrame de los países, se centra en algunos territorios concretos para ver su evolución en tiempo real de los casos confirmados.
Para hacer esto, se tiene 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, se observarán los datos de España, por lo que se obtienen desde la API los casos confirmados en tiempo real para el país y se definen. Posteriormente, se muestran 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 se realizó anteriormente, se observan diferentes datos de la tabla. Para empezar, se listan las columnas existentes para saber qué datos contiene cada una. Esto se realiza mostrando el DataFrame de España y añadiendo columns
.
Se muestran los nombres de las columnas de la tabla:
df_es.columns
De la misma manera, se pueden 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, se filtra por la columna 'Date'
, y con .head(x)
se indica el número que se quiere ver.
Se muestra la primera fila (1) por la cabecera (head) de la columna 'Date' de la tabla:
df_es['Date'].head(1)
Se muestra la primera fila (1) por el final de la tabla (tail) de la columna 'Date' de la tabla:
df_es['Date'].tail(1)
Se utiliza info
para exponer información sobre el DataFrame entre la que incluye el índice (RangeIndex) con el número de entradas, el número de columnas que hay (Data Columns), el nombre de las columnas (Colum), la cantidad de datos nulos que posee la tabla (Non-Null Count), el tipo de variable de las columnas (Dtype) y el tamaño (memory usage).
df_es.info()
Si se profundiza en cuestiones estadísticas, se pueden conocer, por ejemplo, datos como la media, la desviación estándar, los diferentes cuartiles y el valor mínimo y máximo. Para ello, se emplea describe
.
Muestra variables estadísticas de la tabla (de las columnas numéricas):
df_es.describe()
A continuación se vuelve a mostrar el DataFrame completo, aunque aparece de forma abreviada por cuestión de espacio, sin filtrar por columna o tipo de datos.
df_es
Por consiguiente, se coloca como referencia la fecha de los datos, obteniéndose así una imagen general de la evolución de los datos. Para ello, se fija con set_index
el nombre de la columna que se quiere colocar como referencia, en este caso es la fecha ('Date').
Se muestra la tabla según la columna 'Date':
df_es.set_index('Date')
Para ceñirnos estrictamente a los datos que se quieren 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 se indican la(s) columna(s) que se quieren mostrar, además de la de la fecha.
df_es.set_index('Date')['Cases']
Manteniendo lo anterior, es decir, los datos que se quieren visualizar (fecha y número de casos, para ver la evolución temporal), se añade plot
para crear el gráfico y mediante title
se da un título al gráfico recién creado, dentro de los paréntesis a partir de plot.
df_es.set_index('Date')['Cases'].plot(title="Casos de Covid19 en España")
Se repite el mismo proceso que se ha hecho hasta ahora, pero con otro país (Italia). Nos centramos solo en la representación visual de los datos:
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()
Una vez que se han 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, se crea una nueva variable por cada país que contenga solo los datos que se han ido necesitando y trabajando anteriormente: fecha y número de casos confirmados.
Se comparan estos dos países en un solo gráfico:
casos_es = df_es.set_index('Date')['Cases']
casos_it = df_it.set_index('Date')['Cases']
Se concatenan los casos de los dos países en una misma tabla:
vs = pd.concat([casos_es,casos_it],axis=1)
vs
Ahora, se da nombre a las columnas para organizar bien los datos y el gráfico. Una vez hecho esto, se muestra el gráfico con plot
y se elige el tipo de gráfico, que en este caso, será de área.
vs.columns =['España', 'Italia']
vs.plot(title="España vs Italia")
Se exporta la nueva variable a un archivo separado por comas (.csv)
, con la función to_csv
.
vs.to_csv('esvit.csv')
Se comprueba que el archivo se ha 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. Se genera 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('escit.png')