Skip to content

Latest commit

 

History

History
1991 lines (1707 loc) · 38 KB

ad4.md

File metadata and controls

1991 lines (1707 loc) · 38 KB

Uso De la API del Covid-19 con Pandas

A continuación trabajaremos con los datos facilitados por la página la API de datos del COVID-19, cuyo fin es recopilar información se los contagias de covid-19 en todo el planeta.

ad4.ipynb

En este ejercicio implementaremos la función Pandas, librería externa de Python, con la trabajaremos los datos del Covid-19 para aprender a crear gráficas de líneas

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

Instalación de librerias:

Para la instalación las librerías con la que trabajaremos se utiliza pip.

pip es un manejador de paquetes para Python

pip install pandas
Requirement already satisfied: pandas in c:\users\gabri\anaconda3\lib\site-packages (1.4.4)
Requirement already satisfied: pytz>=2020.1 in c:\users\gabri\anaconda3\lib\site-packages (from pandas) (2022.1)
Requirement already satisfied: python-dateutil>=2.8.1 in c:\users\gabri\anaconda3\lib\site-packages (from pandas) (2.8.2)
Requirement already satisfied: numpy>=1.18.5 in c:\users\gabri\anaconda3\lib\site-packages (from pandas) (1.21.5)
Requirement already satisfied: six>=1.5 in c:\users\gabri\anaconda3\lib\site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)
Note: you may need to restart the kernel to use updated packages.

Configuración de Pandas

Al instalar el Pandas este se importa como pd

import pandas as pd

Pandas: de acuerdo con pypi.org esta es una herramienta de análisis de datos de código, de lectura rápida en el lenguaje de programación de Python.

Para que Python carga todas las bibliotecas. Se tiene que usar el enunciado import en nuestro código para usar las funciones de la biblioteca. E importar la biblioteca Pandas empleando su abreviatura pd.

Mi url

Luego creamos la variable miurl para designar la dirección de la página deseada que incluiremos en la fórmula dentro de comillas simples.

miurl = "https://api.covid19api.com/countries"

Para certificar el correcto funcionamiento de la variable creada, escribimos miurl y debería mostrar el link de la página con que trabajaremos.

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

Si queremos saber qué tipo de variable representa miurl, solo tengo que encerrarlo en paréntesis y entrar en una función type

type(miurl)
str

str según w3schools Str en Python es una función convierte el valor especificado en una cadena.

Ejecutamos función Pandas

dataframe

Según pandas.pydata.org dataframe puede contener series, matrices, constantes, clases de datos u objetos similares a listas. Si los datos son un dictado, el orden de las columnas sigue el orden de inserción. Si un dict contiene Series que tienen un índice definido, se alinea por su índice.

La abreviatura de dataframe es df. Con función read_json() que lee el formato json. dentro del parentecer ponemos lo que queremos leer. Ejemplo, un miurl.

df = pd.read_json(miurl)

Para visualizar los datos llamamos el objeto y Pandas identifica una de las entradas del dataframe. Y Observamos una tabla de Pandas que identifica las entradas del dataframe.

df
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country Slug ISO2
0 Maldives maldives MV
1 Slovakia slovakia SK
2 Christmas Island christmas-island CX
3 Djibouti djibouti DJ
4 Macedonia, Republic of macedonia MK
... ... ... ...
243 Bulgaria bulgaria BG
244 Greenland greenland GL
245 Sweden sweden SE
246 Georgia georgia GE
247 Uruguay uruguay UY

248 rows × 3 columns

Exploracion de la tabla

Para ver las primeras entradas de la tabla utilizaremos la siguiente función:

df.head(6)
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country Slug ISO2
0 Maldives maldives MV
1 Slovakia slovakia SK
2 Christmas Island christmas-island CX
3 Djibouti djibouti DJ
4 Macedonia, Republic of macedonia MK
5 Singapore singapore SG

Con df.tail() Vemos las ultimas

df.tail(6)
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country Slug ISO2
242 Northern Mariana Islands northern-mariana-islands MP
243 Bulgaria bulgaria BG
244 Greenland greenland GL
245 Sweden sweden SE
246 Georgia georgia GE
247 Uruguay uruguay UY

Para ver las informaciones sobre las variables que contiene el df usamos la siguiente función:

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 248 entries, 0 to 247
Data columns (total 3 columns):
 #   Column   Non-Null Count  Dtype 
---  ------   --------------  ----- 
 0   Country  248 non-null    object
 1   Slug     248 non-null    object
 2   ISO2     248 non-null    object
dtypes: object(3)
memory usage: 5.9+ KB

Para ver un valor concreto de una de las varibles:

df['Country'][66]
'Ireland'
df['ISO2'].head()
0    MV
1    SK
2    CX
3    DJ
4    MK
Name: ISO2, dtype: object

Tiempo real

Colombia

La url que utilizamos ahora es la siguiente: https://api.covid19api.com/country/colombia/status/confirmed/live

Guardamos los datos, pero ahora añadiendo col (abreviatura de colombia) para identificar y solo trabajar con este país df_col.

url_col = 'https://api.covid19api.com/country/colombia/status/confirmed/live'
df_col = pd.read_json(url_col)
df_col
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Colombia CO 4.57 -74.3 0 confirmed 2020-01-22 00:00:00+00:00
1 Colombia CO 4.57 -74.3 0 confirmed 2020-01-23 00:00:00+00:00
2 Colombia CO 4.57 -74.3 0 confirmed 2020-01-24 00:00:00+00:00
3 Colombia CO 4.57 -74.3 0 confirmed 2020-01-25 00:00:00+00:00
4 Colombia CO 4.57 -74.3 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
1042 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-29 00:00:00+00:00
1043 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-30 00:00:00+00:00
1044 Colombia CO 4.57 -74.3 6312657 confirmed 2022-12-01 00:00:00+00:00
1045 Colombia CO 4.57 -74.3 6314107 confirmed 2022-12-02 00:00:00+00:00
1046 Colombia CO 4.57 -74.3 6314107 confirmed 2022-12-03 00:00:00+00:00

1047 rows × 10 columns

Explorar Datos

Para saber el nombre de las sesiones de como se están en que se están dividiendo las columnas

df_col.columns
Index(['Country', 'CountryCode', 'Province', 'City', 'CityCode', 'Lat', 'Lon',
       'Cases', 'Status', 'Date'],
      dtype='object')

Para ver las entradas que encabezan nuestra tabla usamos el siguiente código

df_col.head(10)
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Colombia CO 4.57 -74.3 0 confirmed 2020-01-22 00:00:00+00:00
1 Colombia CO 4.57 -74.3 0 confirmed 2020-01-23 00:00:00+00:00
2 Colombia CO 4.57 -74.3 0 confirmed 2020-01-24 00:00:00+00:00
3 Colombia CO 4.57 -74.3 0 confirmed 2020-01-25 00:00:00+00:00
4 Colombia CO 4.57 -74.3 0 confirmed 2020-01-26 00:00:00+00:00
5 Colombia CO 4.57 -74.3 0 confirmed 2020-01-27 00:00:00+00:00
6 Colombia CO 4.57 -74.3 0 confirmed 2020-01-28 00:00:00+00:00
7 Colombia CO 4.57 -74.3 0 confirmed 2020-01-29 00:00:00+00:00
8 Colombia CO 4.57 -74.3 0 confirmed 2020-01-30 00:00:00+00:00
9 Colombia CO 4.57 -74.3 0 confirmed 2020-01-31 00:00:00+00:00

Para ver las entradas que finalizan nuestra tabla usamos el siguiente código

df_col.tail(10)
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country CountryCode Province City CityCode Lat Lon Cases Status Date
1037 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-24 00:00:00+00:00
1038 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-25 00:00:00+00:00
1039 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-26 00:00:00+00:00
1040 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-27 00:00:00+00:00
1041 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-28 00:00:00+00:00
1042 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-29 00:00:00+00:00
1043 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-30 00:00:00+00:00
1044 Colombia CO 4.57 -74.3 6312657 confirmed 2022-12-01 00:00:00+00:00
1045 Colombia CO 4.57 -74.3 6314107 confirmed 2022-12-02 00:00:00+00:00
1046 Colombia CO 4.57 -74.3 6314107 confirmed 2022-12-03 00:00:00+00:00
df_col.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1047 entries, 0 to 1046
Data columns (total 10 columns):
 #   Column       Non-Null Count  Dtype              
---  ------       --------------  -----              
 0   Country      1047 non-null   object             
 1   CountryCode  1047 non-null   object             
 2   Province     1047 non-null   object             
 3   City         1047 non-null   object             
 4   CityCode     1047 non-null   object             
 5   Lat          1047 non-null   float64            
 6   Lon          1047 non-null   float64            
 7   Cases        1047 non-null   int64              
 8   Status       1047 non-null   object             
 9   Date         1047 non-null   datetime64[ns, UTC]
dtypes: datetime64[ns, UTC](1), float64(2), int64(1), object(6)
memory usage: 81.9+ KB

Para Obtener una descripción estadística de las variables del df (numero total, media, moda, desviación, mínimo, máximo y cuartiles):

df_col.describe()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Lat Lon Cases
count 1.047000e+03 1.047000e+03 1.047000e+03
mean 4.570000e+00 -7.430000e+01 3.444014e+06
std 1.866066e-14 1.464418e-12 2.438811e+06
min 4.570000e+00 -7.430000e+01 0.000000e+00
25% 4.570000e+00 -7.430000e+01 8.985235e+05
50% 4.570000e+00 -7.430000e+01 4.187194e+06
75% 4.570000e+00 -7.430000e+01 6.078859e+06
max 4.570000e+00 -7.430000e+01 6.314107e+06

Gráficos

Para la elaboración del mismo en el eje X (fechas) y Y (Casos).

Vamos a establcer la fecha como índice.

df_col.set_index('Date')
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country CountryCode Province City CityCode Lat Lon Cases Status
Date
2020-01-22 00:00:00+00:00 Colombia CO 4.57 -74.3 0 confirmed
2020-01-23 00:00:00+00:00 Colombia CO 4.57 -74.3 0 confirmed
2020-01-24 00:00:00+00:00 Colombia CO 4.57 -74.3 0 confirmed
2020-01-25 00:00:00+00:00 Colombia CO 4.57 -74.3 0 confirmed
2020-01-26 00:00:00+00:00 Colombia CO 4.57 -74.3 0 confirmed
... ... ... ... ... ... ... ... ... ...
2022-11-29 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed
2022-11-30 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed
2022-12-01 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed
2022-12-02 00:00:00+00:00 Colombia CO 4.57 -74.3 6314107 confirmed
2022-12-03 00:00:00+00:00 Colombia CO 4.57 -74.3 6314107 confirmed

1047 rows × 9 columns

df_col
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Colombia CO 4.57 -74.3 0 confirmed 2020-01-22 00:00:00+00:00
1 Colombia CO 4.57 -74.3 0 confirmed 2020-01-23 00:00:00+00:00
2 Colombia CO 4.57 -74.3 0 confirmed 2020-01-24 00:00:00+00:00
3 Colombia CO 4.57 -74.3 0 confirmed 2020-01-25 00:00:00+00:00
4 Colombia CO 4.57 -74.3 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
1042 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-29 00:00:00+00:00
1043 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-30 00:00:00+00:00
1044 Colombia CO 4.57 -74.3 6312657 confirmed 2022-12-01 00:00:00+00:00
1045 Colombia CO 4.57 -74.3 6314107 confirmed 2022-12-02 00:00:00+00:00
1046 Colombia CO 4.57 -74.3 6314107 confirmed 2022-12-03 00:00:00+00:00

1047 rows × 10 columns

Como la tabla debe reflejar también los casos, creamos una tabla para ver datos por fechas con el código siguiente:

df_col.set_index('Date')['Cases']
Date
2020-01-22 00:00:00+00:00          0
2020-01-23 00:00:00+00:00          0
2020-01-24 00:00:00+00:00          0
2020-01-25 00:00:00+00:00          0
2020-01-26 00:00:00+00:00          0
                              ...   
2022-11-29 00:00:00+00:00    6312657
2022-11-30 00:00:00+00:00    6312657
2022-12-01 00:00:00+00:00    6312657
2022-12-02 00:00:00+00:00    6314107
2022-12-03 00:00:00+00:00    6314107
Name: Cases, Length: 1047, dtype: int64

Sobre esta vista creamos el gráfico con la funcion plot.

df_col.set_index('Date')['Cases'].plot()
<AxesSubplot:xlabel='Date'>

png

La variable title que significa en español título. Esta variable se encuentra dentro de paréntesis en del siguiente código df_col.set_index('Date')['Cases'].plot(title= ""). Dentro de estas comillas pondremos el enunciado que servirá de título para nuestra gráfica

df_col.set_index('Date')['Cases'].plot(title= "Casos Covid-19 Colombia 2021-2022")
<AxesSubplot:title={'center':'Casos Covid-19 Colombia 2021-2022'}, xlabel='Date'>

png

Repetimos con los datos de España, Ecuador y República Dominicana:

España

La url que utilizamos ahora es la siguiente: https://api.covid19api.com/country/spain/status/confirmed/live

Guardamos los datos, pero ahora añadiendo es (abreviatura de España) para identificar y solo trabajar con este país df_es.

url_es = 'https://api.covid19api.com/country/spain/status/confirmed/live'
df_es = pd.read_json(url_es)
df_es    
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
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
... ... ... ... ... ... ... ... ... ... ...
1042 Spain ES 40.46 -3.75 13595504 confirmed 2022-11-29 00:00:00+00:00
1043 Spain ES 40.46 -3.75 13595504 confirmed 2022-11-30 00:00:00+00:00
1044 Spain ES 40.46 -3.75 13595504 confirmed 2022-12-01 00:00:00+00:00
1045 Spain ES 40.46 -3.75 13614807 confirmed 2022-12-02 00:00:00+00:00
1046 Spain ES 40.46 -3.75 13614807 confirmed 2022-12-03 00:00:00+00:00

1047 rows × 10 columns

df_es.set_index('Date')['Cases'].plot(title= "Casos Covid-19 España 2021-2022")
<AxesSubplot:title={'center':'Casos Covid-19 España 2021-2022'}, xlabel='Date'>

png

Ecuador

La url que utilizamos ahora es la siguiente: https://api.covid19api.com/country/ecuador/status/confirmed/live

Guardamos los datos, pero ahora añadiendo ec (abreviatura de Ecuador) para identificar y solo trabajar con este país df_ec.

url_ec = 'https://api.covid19api.com/country/ecuador/status/confirmed/live'
df_ec = pd.read_json(url_ec)
df_ec
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
Country CountryCode Province City CityCode Lat Lon Cases Status Date
0 Ecuador EC -1.83 -78.18 0 confirmed 2020-01-22 00:00:00+00:00
1 Ecuador EC -1.83 -78.18 0 confirmed 2020-01-23 00:00:00+00:00
2 Ecuador EC -1.83 -78.18 0 confirmed 2020-01-24 00:00:00+00:00
3 Ecuador EC -1.83 -78.18 0 confirmed 2020-01-25 00:00:00+00:00
4 Ecuador EC -1.83 -78.18 0 confirmed 2020-01-26 00:00:00+00:00
... ... ... ... ... ... ... ... ... ... ...
1042 Ecuador EC -1.83 -78.18 1011132 confirmed 2022-11-29 00:00:00+00:00
1043 Ecuador EC -1.83 -78.18 1011132 confirmed 2022-11-30 00:00:00+00:00
1044 Ecuador EC -1.83 -78.18 1011132 confirmed 2022-12-01 00:00:00+00:00
1045 Ecuador EC -1.83 -78.18 1011132 confirmed 2022-12-02 00:00:00+00:00
1046 Ecuador EC -1.83 -78.18 1011132 confirmed 2022-12-03 00:00:00+00:00

1047 rows × 10 columns

df_ec.set_index('Date')['Cases'].plot(title= "Casos Covid-19 Ecuador 2021-2022")
<AxesSubplot:title={'center':'Casos Covid-19 Ecuador 2021-2022'}, xlabel='Date'>

png

República Dominicana

La url que utilizamos ahora es la siguiente: https://api.covid19api.com/country/Dominican%20Republic/status/confirmed/live

Guardamos los datos, pero ahora añadiendo do (abreviatura de Dominican Republic) para identificar y solo trabajar con este país df_do.

url_do = 'https://api.covid19api.com/country/Dominican%20Republic/status/confirmed/live'
df_do = pd.read_json(url_do)
df_do
df_do.set_index('Date')['Cases'].plot(title= "Casos Covid-19 República Dominicana 2021-2022")

Conclusión

Es impresionante poder trabajaron una herramienta tan fácil y práctica como Python acompañado de la función Pandas, con la cual en minutos pudimos procesar los datos facilitados por api.covid19api y crear visualizaciones en segundos.