MadelaineGuevara-web

Actividad dirigida 4

En esta actividad dirigida 4 nos conectaremos con el API del COVID19 y analizaremos con Panda

Nos conectaremos al API: https://api.covid19api.com/

Lo siguiente sería instalar la librería de Panda

Instalación e importación de Pandas

A continuación los códigos para la instalación e importación de la librería Pandas

pip install pandas
Defaulting to user installation because normal site-packages is not writeableNote: you may need to restart the kernel to use updated packages.

Requirement already satisfied: pandas in d:\anaconda\lib\site-packages (1.4.2)
Requirement already satisfied: python-dateutil>=2.8.1 in d:\anaconda\lib\site-packages (from pandas) (2.8.2)
Requirement already satisfied: numpy>=1.18.5 in d:\anaconda\lib\site-packages (from pandas) (1.21.5)
Requirement already satisfied: pytz>=2020.1 in d:\anaconda\lib\site-packages (from pandas) (2021.3)
Requirement already satisfied: six>=1.5 in d:\anaconda\lib\site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)
import pandas as pd

Conexión con URL

Creamos una variable llamada url y la definimos como la dirección del API que tiene la información del COVID19 en los distintos países.

url = 'https://api.covid19api.com/countries'

Comprobamos la variable invocando url

url
'https://api.covid19api.com/countries'

Data Frame

Como el API tiene la información en un lista de datos JSON, creamos un Data Frame df(estructuras de lista de datos de Python) compuesto por la función de Pandas que permite leer el formato JSON.

df = pd.read_json(url)

Comprobamos el df invocándolo y nos aparece el JSON en formato de tabla.

df
Country Slug ISO2
0 Gibraltar gibraltar GI
1 Oman oman OM
2 France france FR
3 Jersey jersey JE
4 Mali mali ML
... ... ... ...
243 Puerto Rico puerto-rico PR
244 Papua New Guinea papua-new-guinea PG
245 Saint Pierre and Miquelon saint-pierre-and-miquelon PM
246 Timor-Leste timor-leste TL
247 Montenegro montenegro ME

248 rows × 3 columns

Datos por país

España

Para obtener los datos específicamente de España, utilizamos el siguiente código:

df[df['Country'] == 'Spain']
Country Slug ISO2
141 Spain spain ES

A continuación creamos una nueva variable llamada url_rt_es y la definimos con la sección del API que tiene los datos en tiempo real de los casos en España.

También hacemos un data frame que ayudado por la función de Pandas, lea el JSON de estos datos específicos y terminamos invocándo este mismo data frame para obtener la tabla.

url_rt_es = 'https://api.covid19api.com/country/spain/status/confirmed/live'
df_rt_es = pd.read_json(url_rt_es) 
df_rt_es
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Spain ES 40.46 -3.75 0 confirmed 2020-01-22 00:00:00+00:00
1 Spain ES 40.46 -3.75 0 confirmed 2020-01-23 00:00:00+00:00
2 Spain ES 40.46 -3.75 0 confirmed 2020-01-24 00:00:00+00:00
3 Spain ES 40.46 -3.75 0 confirmed 2020-01-25 00:00:00+00:00
4 Spain ES 40.46 -3.75 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
894 Spain ES 40.46 -3.75 12818184 confirmed 2022-07-04 00:00:00+00:00
895 Spain ES 40.46 -3.75 12890002 confirmed 2022-07-05 00:00:00+00:00
896 Spain ES 40.46 -3.75 12890002 confirmed 2022-07-06 00:00:00+00:00
897 Spain ES 40.46 -3.75 12890002 confirmed 2022-07-07 00:00:00+00:00
898 Spain ES 40.46 -3.75 12973615 confirmed 2022-07-08 00:00:00+00:00

899 rows × 10 columns

Para obtener la cabecera de esta tabla utilizamos el siguiente código:

df_rt_es.head()
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Spain ES 40.46 -3.75 0 confirmed 2020-01-22 00:00:00+00:00
1 Spain ES 40.46 -3.75 0 confirmed 2020-01-23 00:00:00+00:00
2 Spain ES 40.46 -3.75 0 confirmed 2020-01-24 00:00:00+00:00
3 Spain ES 40.46 -3.75 0 confirmed 2020-01-25 00:00:00+00:00
4 Spain ES 40.46 -3.75 0 confirmed 2020-01-26 00:00:00+00:00

Para obtener la parte final de esta tabla utilizamos el siguiente código:

df_rt_es.tail()
Country CountryCode Province City CityCode Lat Lon Cases Status Date
894 Spain ES 40.46 -3.75 12818184 confirmed 2022-07-04 00:00:00+00:00
895 Spain ES 40.46 -3.75 12890002 confirmed 2022-07-05 00:00:00+00:00
896 Spain ES 40.46 -3.75 12890002 confirmed 2022-07-06 00:00:00+00:00
897 Spain ES 40.46 -3.75 12890002 confirmed 2022-07-07 00:00:00+00:00
898 Spain ES 40.46 -3.75 12973615 confirmed 2022-07-08 00:00:00+00:00

Visualización

A continuación definimos los datos que queremos representar en la visualización gráfica. En esta ocasión escogimos la fecha y la cantidad de casos. Además, le pedimos que plotée, le añada el título y sumamos el parametro kind “area” para determinar este tipo de gráfica.

casos_es = df_rt_es.set_index('Date')['Cases']
casos_es.plot(title="Casos de Covid-19 en España desde 20/01/2020 hasta 9/07/2022", kind = "area")
<AxesSubplot:title={'center':'Casos de Covid-19 en España desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png

Datos Panamá

Seguiremos el mismo procedimiento que hemos hecho con España para obtener y visualizar los datos de COVID19 en Panamá

df[df['Country'] == 'Panama']
Country Slug ISO2
190 Panama panama PA
url_rt_pa = 'https://api.covid19api.com/country/panama/status/confirmed/live'
df_rt_pa = pd.read_json(url_rt_pa) 
df_rt_pa
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Panama PA 8.54 -80.78 0 confirmed 2020-01-22 00:00:00+00:00
1 Panama PA 8.54 -80.78 0 confirmed 2020-01-23 00:00:00+00:00
2 Panama PA 8.54 -80.78 0 confirmed 2020-01-24 00:00:00+00:00
3 Panama PA 8.54 -80.78 0 confirmed 2020-01-25 00:00:00+00:00
4 Panama PA 8.54 -80.78 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
895 Panama PA 8.54 -80.78 925254 confirmed 2022-07-05 00:00:00+00:00
896 Panama PA 8.54 -80.78 925254 confirmed 2022-07-06 00:00:00+00:00
897 Panama PA 8.54 -80.78 925254 confirmed 2022-07-07 00:00:00+00:00
898 Panama PA 8.54 -80.78 932710 confirmed 2022-07-08 00:00:00+00:00
899 Panama PA 8.54 -80.78 932710 confirmed 2022-07-10 00:00:00+00:00

900 rows × 10 columns

casos_pa = df_rt_pa.set_index('Date')['Cases']
casos_pa.plot(title="Casos de Covid-19 en Panamá desde 20/01/2020 hasta 9/07/2022", kind = "area")
<AxesSubplot:title={'center':'Casos de Covid-19 en Panamá desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png

Comparación de datos de dos países (España y Panamá)

Después de obtener los datos de ambos países, ahora contrastaremos el comportamiento del virus en España y Panamá a través de una gráfica comparativa.

Para lograr esto primero tendremos que concatenar los resultados basándonos en el eje de las filas (axis=1) creando la variable pa_vs_es

pa_vs_es = pd.concat([casos_es,casos_pa],axis=1)
pa_vs_es
Cases Cases
Date
2020-01-22 00:00:00+00:00 0.0 0
2020-01-23 00:00:00+00:00 0.0 0
2020-01-24 00:00:00+00:00 0.0 0
2020-01-25 00:00:00+00:00 0.0 0
2020-01-26 00:00:00+00:00 0.0 0
... ... ...
2022-07-05 00:00:00+00:00 12890002.0 925254
2022-07-06 00:00:00+00:00 12890002.0 925254
2022-07-07 00:00:00+00:00 12890002.0 925254
2022-07-08 00:00:00+00:00 12973615.0 932710
2022-07-10 00:00:00+00:00 NaN 932710

900 rows × 2 columns

Luego tendremos que titular las columnas con el nombre del país al que pertenecen los datos (porque solo aparece la variable cases en ambas columnas.

Para eso creamos un nuevo objeto llamado pa_vs_es.columns

pa_vs_es.columns = ['España', 'Panamá']
pa_vs_es
España Panamá
Date
2020-01-22 00:00:00+00:00 0.0 0
2020-01-23 00:00:00+00:00 0.0 0
2020-01-24 00:00:00+00:00 0.0 0
2020-01-25 00:00:00+00:00 0.0 0
2020-01-26 00:00:00+00:00 0.0 0
... ... ...
2022-07-05 00:00:00+00:00 12890002.0 925254
2022-07-06 00:00:00+00:00 12890002.0 925254
2022-07-07 00:00:00+00:00 12890002.0 925254
2022-07-08 00:00:00+00:00 12973615.0 932710
2022-07-10 00:00:00+00:00 NaN 932710

900 rows × 2 columns

Gráfica de comparación Panamá vs España

Ahora plotearemos la variable pa_vs_es colocándole un título acorde.

pa_vs_es.plot(title="Comparativa Covid19 España-Panamá")
<AxesSubplot:title={'center':'Comparativa Covid19 España-Panamá'}, xlabel='Date'>

png

Comparativa del comportamiento del COVID19 en países centroamericanos.

A continuación contrastaremos los datos de Panamá con el resto de países centroamericanos (Costa Rica, Honduras, El Salvador, Guatemala y Nicaragua).

Para conseguir esto, aplicaremos el procedimiento antes descrito para cada país.

Costa Rica

url_rt_cr = 'https://api.covid19api.com/country/costa-rica/status/confirmed/live'
df_rt_cr = pd.read_json(url_rt_cr) 
df_rt_cr
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Costa Rica CR 9.75 -83.75 0 confirmed 2020-01-22 00:00:00+00:00
1 Costa Rica CR 9.75 -83.75 0 confirmed 2020-01-23 00:00:00+00:00
2 Costa Rica CR 9.75 -83.75 0 confirmed 2020-01-24 00:00:00+00:00
3 Costa Rica CR 9.75 -83.75 0 confirmed 2020-01-25 00:00:00+00:00
4 Costa Rica CR 9.75 -83.75 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
895 Costa Rica CR 9.75 -83.75 904934 confirmed 2022-07-05 00:00:00+00:00
896 Costa Rica CR 9.75 -83.75 904934 confirmed 2022-07-06 00:00:00+00:00
897 Costa Rica CR 9.75 -83.75 904934 confirmed 2022-07-07 00:00:00+00:00
898 Costa Rica CR 9.75 -83.75 904934 confirmed 2022-07-08 00:00:00+00:00
899 Costa Rica CR 9.75 -83.75 904934 confirmed 2022-07-10 00:00:00+00:00

900 rows × 10 columns

casos_cr = df_rt_cr.set_index('Date')['Cases']
casos_cr.plot(title="Casos de Covid-19 en Costa Rica desde 20/01/2020 hasta 9/07/2022")
<AxesSubplot:title={'center':'Casos de Covid-19 en Costa Rica desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png

Honduras

url_rt_hnd = 'https://api.covid19api.com/country/honduras/status/confirmed/live'
df_rt_hnd = pd.read_json(url_rt_hnd) 
df_rt_hnd
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Honduras HN 15.2 -86.24 0 confirmed 2020-01-22 00:00:00+00:00
1 Honduras HN 15.2 -86.24 0 confirmed 2020-01-23 00:00:00+00:00
2 Honduras HN 15.2 -86.24 0 confirmed 2020-01-24 00:00:00+00:00
3 Honduras HN 15.2 -86.24 0 confirmed 2020-01-25 00:00:00+00:00
4 Honduras HN 15.2 -86.24 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
895 Honduras HN 15.2 -86.24 427718 confirmed 2022-07-05 00:00:00+00:00
896 Honduras HN 15.2 -86.24 427718 confirmed 2022-07-06 00:00:00+00:00
897 Honduras HN 15.2 -86.24 427718 confirmed 2022-07-07 00:00:00+00:00
898 Honduras HN 15.2 -86.24 429408 confirmed 2022-07-08 00:00:00+00:00
899 Honduras HN 15.2 -86.24 429408 confirmed 2022-07-10 00:00:00+00:00

900 rows × 10 columns

casos_hnd = df_rt_hnd.set_index('Date')['Cases']
casos_hnd.plot(title="Casos de Covid-19 en Honduras desde 20/01/2020 hasta 9/07/2022")
<AxesSubplot:title={'center':'Casos de Covid-19 en Honduras desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png

## El Salvador

url_casos_elsalv = 'https://api.covid19api.com/country/el-salvador/status/confirmed/live'
df_rt_elsalv = pd.read_json(url_casos_elsalv)
df_rt_elsalv 

Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 El Salvador SV 13.79 -88.9 0 confirmed 2020-01-22 00:00:00+00:00
1 El Salvador SV 13.79 -88.9 0 confirmed 2020-01-23 00:00:00+00:00
2 El Salvador SV 13.79 -88.9 0 confirmed 2020-01-24 00:00:00+00:00
3 El Salvador SV 13.79 -88.9 0 confirmed 2020-01-25 00:00:00+00:00
4 El Salvador SV 13.79 -88.9 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
895 El Salvador SV 13.79 -88.9 169646 confirmed 2022-07-05 00:00:00+00:00
896 El Salvador SV 13.79 -88.9 169646 confirmed 2022-07-06 00:00:00+00:00
897 El Salvador SV 13.79 -88.9 169646 confirmed 2022-07-07 00:00:00+00:00
898 El Salvador SV 13.79 -88.9 180970 confirmed 2022-07-08 00:00:00+00:00
899 El Salvador SV 13.79 -88.9 180970 confirmed 2022-07-10 00:00:00+00:00

900 rows × 10 columns

casos_elsalv = df_rt_elsalv.set_index('Date')['Cases']
casos_elsalv.plot(title="Casos de Covid19 en El Salvador desde 20/01/2020 hasta 9/07/2022")
<AxesSubplot:title={'center':'Casos de Covid19 en El Salvador desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png

Guatemala

url_casos_guat = 'https://api.covid19api.com/country/guatemala/status/confirmed/live'
df_rt_guat = pd.read_json(url_casos_guat)
df_rt_guat
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Guatemala GT 15.78 -90.23 0 confirmed 2020-01-22 00:00:00+00:00
1 Guatemala GT 15.78 -90.23 0 confirmed 2020-01-23 00:00:00+00:00
2 Guatemala GT 15.78 -90.23 0 confirmed 2020-01-24 00:00:00+00:00
3 Guatemala GT 15.78 -90.23 0 confirmed 2020-01-25 00:00:00+00:00
4 Guatemala GT 15.78 -90.23 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
895 Guatemala GT 15.78 -90.23 922340 confirmed 2022-07-05 00:00:00+00:00
896 Guatemala GT 15.78 -90.23 927473 confirmed 2022-07-06 00:00:00+00:00
897 Guatemala GT 15.78 -90.23 933259 confirmed 2022-07-07 00:00:00+00:00
898 Guatemala GT 15.78 -90.23 939300 confirmed 2022-07-08 00:00:00+00:00
899 Guatemala GT 15.78 -90.23 944993 confirmed 2022-07-10 00:00:00+00:00

900 rows × 10 columns

casos_guat = df_rt_guat.set_index('Date')['Cases']
casos_guat.plot(title="Casos de Covid19 en Guatemala desde 20/01/2020 hasta 9/07/2022")
<AxesSubplot:title={'center':'Casos de Covid19 en Guatemala desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png

Nicaragua

url_casos_ni = 'https://api.covid19api.com/country/nicaragua/status/confirmed/live'
df_rt_ni = pd.read_json(url_casos_ni)
df_rt_ni
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Nicaragua NI 12.87 -85.21 0 confirmed 2020-01-22 00:00:00+00:00
1 Nicaragua NI 12.87 -85.21 0 confirmed 2020-01-23 00:00:00+00:00
2 Nicaragua NI 12.87 -85.21 0 confirmed 2020-01-24 00:00:00+00:00
3 Nicaragua NI 12.87 -85.21 0 confirmed 2020-01-25 00:00:00+00:00
4 Nicaragua NI 12.87 -85.21 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
895 Nicaragua NI 12.87 -85.21 14690 confirmed 2022-07-05 00:00:00+00:00
896 Nicaragua NI 12.87 -85.21 14721 confirmed 2022-07-06 00:00:00+00:00
897 Nicaragua NI 12.87 -85.21 14721 confirmed 2022-07-07 00:00:00+00:00
898 Nicaragua NI 12.87 -85.21 14721 confirmed 2022-07-08 00:00:00+00:00
899 Nicaragua NI 12.87 -85.21 14721 confirmed 2022-07-10 00:00:00+00:00

900 rows × 10 columns

casos_ni = df_rt_ni.set_index('Date')['Cases']
casos_ni.plot(title="Casos de Covid19 en Nicaraguas desde 20/01/2020 hasta 9/07/2022")
<AxesSubplot:title={'center':'Casos de Covid19 en Nicaraguas desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png

Concatenación de datos

Aquí aplicaremos una concatenación de los datos de todos los países antes presentados. Crearemos una variable llamada df_centroamerica para agrupar todos los datos de los países centroamericanos.

df_centroamerica = pd.concat([casos_pa,casos_cr,casos_hnd,casos_elsalv,casos_guat,casos_ni],axis=1)
df_centroamerica
Cases Cases Cases Cases Cases Cases
Date
2020-01-22 00:00:00+00:00 0 0 0 0 0 0
2020-01-23 00:00:00+00:00 0 0 0 0 0 0
2020-01-24 00:00:00+00:00 0 0 0 0 0 0
2020-01-25 00:00:00+00:00 0 0 0 0 0 0
2020-01-26 00:00:00+00:00 0 0 0 0 0 0
... ... ... ... ... ... ...
2022-07-05 00:00:00+00:00 925254 904934 427718 169646 922340 14690
2022-07-06 00:00:00+00:00 925254 904934 427718 169646 927473 14721
2022-07-07 00:00:00+00:00 925254 904934 427718 169646 933259 14721
2022-07-08 00:00:00+00:00 932710 904934 429408 180970 939300 14721
2022-07-10 00:00:00+00:00 932710 904934 429408 180970 944993 14721

900 rows × 6 columns

Colocamos el nombre del país a cada columna.

df_centroamerica.columns = ['Panamá','Costa Rica','Honduras','El Salvador','Guatemala','Nicaragua']
df_centroamerica
Panamá Costa Rica Honduras El Salvador Guatemala Nicaragua
Date
2020-01-22 00:00:00+00:00 0 0 0 0 0 0
2020-01-23 00:00:00+00:00 0 0 0 0 0 0
2020-01-24 00:00:00+00:00 0 0 0 0 0 0
2020-01-25 00:00:00+00:00 0 0 0 0 0 0
2020-01-26 00:00:00+00:00 0 0 0 0 0 0
... ... ... ... ... ... ...
2022-07-05 00:00:00+00:00 925254 904934 427718 169646 922340 14690
2022-07-06 00:00:00+00:00 925254 904934 427718 169646 927473 14721
2022-07-07 00:00:00+00:00 925254 904934 427718 169646 933259 14721
2022-07-08 00:00:00+00:00 932710 904934 429408 180970 939300 14721
2022-07-10 00:00:00+00:00 932710 904934 429408 180970 944993 14721

900 rows × 6 columns

Gráfica comparativa final

Finalmente podremos plotear una gráfica comparativa con los datos de todos los países centroamericanos.

df_centroamerica.plot(title="Comparativa de los casos de Covid19 en países Centroamericanos desde 20/01/2020 hasta 9/07/2022")
<AxesSubplot:title={'center':'Comparativa de los casos de Covid19 en países Centroamericanos desde 20/01/2020 hasta 9/07/2022'}, xlabel='Date'>

png