Para realizar esta práctica utilizamos Python, un lenguaje de programación de alto nivel para el desarrollo de software. A diferencia de otros lenguajes como Java, se trata de un lenguaje interpretado, es decir, cuyo código ya es legible y no requiere traducción.
En este cuaderno Python trabajaremos la representación de los datos de la API del Covid-19 por países con la librería Pandas. Como sus siglas indican, Pandas es la librería de Python para el anális de datos (Python Data Analysis Library) que nos es muy útil para la manipulación y análisis de datos en el lenguaje de progrmación de Python. Es una biblioteca de software escrita como extensión de NumPy que ofrece estructuras de datos y funcicones para manipular tablas numéricas y series temporales.
La Url con la que vampos a trabajar es la siguiente: https://api.covid19api.com/countries
Antes de poder empezar a trabajar con los datos necesitamos realizar tres pasos previos:
Requiere de dos pasos:
Necesitamos instalar la librería para que Python pueda trabajar a partir de ella para la leer los datos y trabajar con ellos. Una vez instalada permanecerá en la consola. Lo hacemos con la sintaxis !pip install ()
!pip install pandas
El f nos indica que no estamos ejecutando Python, sino Bash. Pandas es una librería de Python especializada en manejar análisis y estructuras de datos. En clases anteriores efectivamente estuvimos viendo el tipo de estructura de datos en temas, donde los tipos de datos que podemos encontrar son: cadenas de datos, numbers o datos binarios v(erdadero / falso). Hoy veremos la estructura de datos.
Que hayamos instalado la librería no significa que podamos trabajar con ella. Tenemos que configurarla, importarla al presente notebook para hacer uso de ella. Puede compararse a cuando nos compramos un libro: necesitamos abrirlo para poder leerlo.
Lo hacemos con el comando import()
y con su abreviación típica:
import pandas as pd
Así abreviamos la importación de pandas como pd.
Ya tenemos el libro comprado y abierto. Ahora falta leerlo. Para ello tenemos que crear un dataframe, la forma en la que Python a través de Pandas leerá los datos de la API. Pero para ello primero debemos decirle qué datos queremos que lea. Para ello creamos una variable que lo indique. lo hacemos con =
url = "https://api.covid19api.com/countries"
Así definimos la variable url que pusimos antes y que Python vea lo que es. Para ello le explicamos a Python que url es =
a una cadena de de caracreres, motivo por el que van "entre comillas". La referencia nos sirve para el resto de las cajas del cuaderno.
Por último, ahora que Pyton ya tiene la librería (Pandas) y los datos de la API con la variable url
definida es el momento de que lea los datos. De Pandas hay una función que se llama read_json; esto es, una función para leer JSON (Java Script Object Notation o notación de objetos en java script. Dentro de la función read_json ponemos : para poner lo que queremos que lea, La url con los datos está es JSON: son los datos en este lenguaje.
df = pd.read_json(url)
La función read_jason lee un JSON y entre paréntesis () la función de lo que queremos que lea, en este caso una url. Es decir, si ponemos en el navegador esta función, me devuelve un JSON, una lista de diccionarios. Al crear un Dataframe creamos una tabla que nos lee esto en JSON. Una vez creada la variable de dataframe la ejecutamos.
df
Ahora que ya Python ha abierto los datos es el momendo de explorarlos. A la variable definida como df
podemos añadirle funciones. En este caso la función .head
sirve para mostrarnos los datos a la cabeza del conjunto. Para ver los últimos valores (que se corresponden en este caso con los países con menos certeza de casos covid), la función es .tail
.
Para determinar el número de países que queremos que nos muestre en ambas funciones, lo especificamos dentro del paréntseis.
df.head (6)
df.tail (3)
La función .info
nos explica qué hay en el dataframe (df).
df.info()
df['Country'] [66]
Para centrarnos en una columna concreta ponemos los corechetes y dentro de comillas simples [''] el nombre de la columna que nos interese explorar. Para seleccionar un número concreto de la lista abrimos a continuación, tras un espacio, otros corchetes con el número de la fila que queramos dentro.
Vamos a centrarnos en los patos de España de la Api del covid-19 con el objetico de representar en un gráfico la evolución de la pandemia en este país. Para ello creamos un dataframe con estos datos definiendo previamente la url.
url_es = 'https://api.covid19api.com/country/spain/status/confirmed/live'
Repetimos el proceso con la nueva url y la función de Pandas .read_json()
df_es = pd.read_json(url_es)
df_es
La función .columns
dice el nombre de las distintas columnas que hay.
df_es.columns
Al ver las columnas de esta manera resulta mucho más facil detectar qué categorías de datos tenemos que usar para nuestro objetivo. Como queremos representar la evolución en el tiempo de la pandemia en España nos interesan las categorías "Cases" y "Date".
df_es.info()
Con .info
obtenemos la información básica del dataframe. La función .describe
se centra en valores numéricos. Hace un conteo de los valores, la media, la mínima, la desviación típica...
df_es.describe()
df_es
Definimos los ejes: El valor de la gráfica es el número de casos (eje Y) y las fechas (eje X).
Con la función set_index
, ponemos la columna Dates la primera para organizar los datos a partir de la misma. Puesto que el eje X son las fechas comenzamos por esta categoría.
df_es.set_index('Date')
Pero además del número de casos confirmados los demás datos no nos interesan. Queremos cruzar el datos de las fechas con los de casos confirmados para lograr un gráfico que represente la evolución de la pandemia en España. Por lo que añadimos [ ] en el nombre de la otra columna:
df_es.set_index('Date')['Cases']
Así vemos que ya solo nos muestra la información que necesitamos. A continuación, utilizamos la función .plot()
al final de la sintaxis anterior para pintar la gráfica. Esta función es una de las funciones de Python por defecto.
df_es.set_index('Date')['Cases'].plot()
La función .plot(title='...')
sirve para titular la gráfica:
df_es.set_index('Date')['Cases'].plot(title="Casos de COVID19 en España")
Así tenemos la representación gráfica que queríamos partiendo de unos datos. Podemos tratar el gráfico como imagen y gruardarlo como archivo independiente para poder utilizarlo donde nos interese.
La librería Pandas es muy útil tambien para comparar datos. Vamos a repetir este proceso con otro país, Italia por ejemplo, para luego comparar las curvas de ambos países.
Repetimos el proceso esta vez en un sólo paso porque ya sabemos hacerlo:
.read_json()
.set:index()[]
con las columnas de los datos que queremos curzar para su representación..plot(title='...')
para que nos muestre directamente estos datos representados en un gráfico titulado.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 en Italia")
Así obtenemos el gráfico resultante. Una vez seguido el procedimiento podemos utilizar los tres tipos de códigos empleados arriba para conocer la gráfica de otros países. Escojo Francia por su cercanía.
url_fr = 'https://api.covid19api.com/country/france/status/confirmed/live'
df_fr = pd.read_json(url_fr)
df_fr.set_index('Date')['Cases'].plot(title="Casos de COVID19 en Francia")
Ahora que tenemos la evolución de la pandemia en tres países, España, Francia e Italia, los comparamos en un sólo gráfico. Primero comparamos solo Italia y España. Para ello buscaremos concatenar las columnas de los casos de los distitntos países, definiendo primero qué incluimos en esta categoría: columna Date.
Definimos las variables a concatenar. Lo hacemos como anteriormente, con la función .set_index()[]
sobre el dataframe correspondiente en cada caso:
casos_es = df_es.set_index('Date')['Cases']
casos_it = df_it.set_index('Date')['Cases']
Ahora concatenamos las variables recién definidas con la función .concat
para crear una serie con ambos países y poder compararlos.
pd.concat([casos_es,casos_it],axis=1)
Pero con los datos presentados de esta manera no rsulta intuitivo inferir qué columna es para cada país. Necesitamos nombrarlas. Para ello creamos una variable ("vs") con la sintaxis anterior para nombrar de esta forma la primera fila y poder renombrar sus categorías.
vs = pd.concat([casos_es,casos_it],axis=1)
vs
A esta variable creada le añadimos la función .columns
indiccándole las categorías.
vs.columns = ['España', 'Italia']
Lo comprobamos:
vs.columns
Lo ejecutamos
vs
Ahora que ya tenemos los datos a pintar respresentados de esta manera clara aplicamos la función .plot(title="...")
sobre la variable anterior.
vs.plot(title="Comparación de la evolución de la pandemia en España e Italia")
Ya tenemos el resultado. Ahora puede ser interesante incluir el país restante.
Repetimos el proceso anterior creando la variable para los casos de Francia.
casos_es = df_es.set_index('Date')['Cases']
casos_it = df_it.set_index('Date')['Cases']
casos_fr = df_fr.set_index('Date')['Cases']
pd.concat([casos_es,casos_it,casos_fr],axis=1)
vs = pd.concat([casos_es,casos_it,casos_fr],axis=1)
vs
vs.columns = ['España', 'Italia', 'Francia']
Para que no nos pinte la franja con los casos acumulados de los tres países sino que distinga la de cada país añadimos kind='area'
.
vs.plot(title="España vs Italia vs Francia", kind='area')
Al pinchar con el boton derecho encima de cada gráfico puedo gurardalo en el ordenador local como imagen. Pero también puedo hacerlo en Jupyter. Eso es últil para utilizar el archivo en otro cuaderno y para tener los datos representados en una hoja aparte. Para ello indicamos el nombre de la variable de nuestro gráfico añadiendo la función .to_csv('...')
. Queremos guardarlo como un archivo csv para que guarde los datos tabulados.
vs.to_csv('esvsit.csv')
Comprobamos que esté el archivo con un ls
precedido de !
porque es comando de Bash.
ls
!ls
Para guardarlo como imagen necesitamos importar la librería Matplolib.pyplot Lo hacemos con su abreviación plt y utilizamos su función .savefig
.
import matplotlib.pyplot as plt
vs.plot(title='Evolución pandemia: España vs Italia')
plt.savefig('esvsitvsmx.png')
!ls