Skip to content

Latest commit

 

History

History
1334 lines (1127 loc) · 25.4 KB

ad4.md

File metadata and controls

1334 lines (1127 loc) · 25.4 KB

Uso De la API del Covid-19 con Pandas

En la cuarta y última actividad dirigida, utilizaremos “Pandas”, una librería de Phython, para trabajar con datos de la Covid-19. Esta es la URL: https://api.covid19api.com/countries

El ejercicio completo se puede encontrar en formato de cuaderno de Jupyter en esta dirección.

Instalación de librerías:

Para la instalación de las librerías usaremos la función !pip. La excavación se debe a que estamos ejecutando bash.

!pip install pandas
Requirement already satisfied: pandas in c:\users\erika\anaconda3\lib\site-packages (1.4.4)
Requirement already satisfied: pytz>=2020.1 in c:\users\erika\anaconda3\lib\site-packages (from pandas) (2022.1)
Requirement already satisfied: python-dateutil>=2.8.1 in c:\users\erika\anaconda3\lib\site-packages (from pandas) (2.8.2)
Requirement already satisfied: numpy>=1.18.5 in c:\users\erika\anaconda3\lib\site-packages (from pandas) (1.21.5)
Requirement already satisfied: six>=1.5 in c:\users\erika\anaconda3\lib\site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)

Configuración de Pandas

Para importar utilizaremos la convención "pd" como abreviatura para llevar a la librería.

import pandas as pd

Crear variable

Las variables se asignan con el símbolo "=" y se redactará entrecomillado, ya que se trata de una cadena de caracteres.

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

Para saber cual es el valor de esta variable, en caso de querer conocerlo, tendremos que introducir el termino "miurl" y este tendrá que marcar un resultado igual a la url propuesta.

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

Si colocamos "miurl" dentro de un parentesis precedido por el comando "type", mostrará que se trata de una cadena de caracteres.

type(miurl)
str

Empieza la magia de Pandas

Crear dataframe

La abreviatura que se emplea para los dataframe es "dl". Existe una función "read_json()" que lee el formato "json". Dentro del paréntesis indicaremos el valor de lo que queremos que lea, en este caso la url.

df = pd.read_json(url)

Para visualizar los datos llamamos al objeto "df". Así, observamos una tabla que contiene tres columnas y una columna de control de Pandas, que identifica cada una de 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 Angola angola AO
1 Georgia georgia GE
2 Ireland ireland IE
3 Slovenia slovenia SI
4 French Guiana french-guiana GF
... ... ... ...
243 Sri Lanka sri-lanka LK
244 Canada canada CA
245 Kuwait kuwait KW
246 Libya libya LY
247 Seychelles seychelles SC

248 rows × 3 columns

Exploración de la tabla

Para ver las primeras entradas de la tabla, tendrémos que utilizar las siguientes funciones. Estas nos darán los seis primeros países en la tabla según su posició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 Angola angola AO
1 Georgia georgia GE
2 Ireland ireland IE
3 Slovenia slovenia SI
4 French Guiana french-guiana GF
5 Guam guam GU

La siguiente nos mostrará las seis últimas.

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 Spain spain ES
243 Sri Lanka sri-lanka LK
244 Canada canada CA
245 Kuwait kuwait KW
246 Libya libya LY
247 Seychelles seychelles SC

Para conocer más información sobre las variables que contiene el dataframe habrá que utilizar 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 mostrar una sola variable se utiliza la siguiente función. En este caso muestra el país.

df['Country']
0             Angola
1            Georgia
2            Ireland
3           Slovenia
4      French Guiana
           ...      
243        Sri Lanka
244           Canada
245           Kuwait
246            Libya
247       Seychelles
Name: Country, Length: 248, dtype: object

Lo mismo se puede realizar con la columna "Slug".

df['Slug']
0             angola
1            georgia
2            ireland
3           slovenia
4      french-guiana
           ...      
243        sri-lanka
244           canada
245           kuwait
246            libya
247       seychelles
Name: Slug, Length: 248, dtype: object

En caso de querer saber más sobre un valor en concreto, habrá que utilizar la siguiente función.

df['Country'][40]
'Haiti'

Tiempo real

Colombia

Para esta sección del trabajo, utilizaremos los datos en vivo, localizados en esta url: https://api.covid19api.com/country/colombia/status/confirmed/live

Guardaremos los datos de la misma manera en la que lo hicimos anteriormente, pero añadiendo "df_co" (la abreviatura de Colombia) para identificar que este dataframe es de este país en concreto.

url_co = 'https://api.covid19api.com/country/colombia/status/confirmed/live'
df_co = pd.read_json(url_co)
df_co
<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
... ... ... ... ... ... ... ... ... ... ...
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 rows × 10 columns

Explorar estos nuevos datos

Esta llamada tiene la capacidad de invocar todos los nombres que aparecen en las columnas.

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

Si quisieramos ver la cabecera, tendríamos que introducir el siguiente comando. En este caso lo limitaremos a los primeros 10 valores.

df_co.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 los 8 últimos valores, insertaremos el siguiente comando.

df_co.tail(8)
<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
1035 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-22 00:00:00+00:00
1036 Colombia CO 4.57 -74.3 6312657 confirmed 2022-11-23 00:00:00+00:00
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

Para conocer la información de esta variable, añadiremos el siguiente comando.

df_co.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1043 entries, 0 to 1042
Data columns (total 10 columns):
 #   Column       Non-Null Count  Dtype              
---  ------       --------------  -----              
 0   Country      1043 non-null   object             
 1   CountryCode  1043 non-null   object             
 2   Province     1043 non-null   object             
 3   City         1043 non-null   object             
 4   CityCode     1043 non-null   object             
 5   Lat          1043 non-null   float64            
 6   Lon          1043 non-null   float64            
 7   Cases        1043 non-null   int64              
 8   Status       1043 non-null   object             
 9   Date         1043 non-null   datetime64[ns, UTC]
dtypes: datetime64[ns, UTC](1), float64(2), int64(1), object(6)
memory usage: 81.6+ KB

Para obtener una descripción estadística de las variables numéricas del dataframe (obtenemos el número total, la media, la desviación, el mínimo y mácimo y los cuartiles):

df_co.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.043000e+03 1.043000e+03 1.043000e+03
mean 4.570000e+00 -7.430000e+01 3.433010e+06
std 1.954930e-14 1.464420e-12 2.436987e+06
min 4.570000e+00 -7.430000e+01 0.000000e+00
25% 4.570000e+00 -7.430000e+01 8.902395e+05
50% 4.570000e+00 -7.430000e+01 4.126340e+06
75% 4.570000e+00 -7.430000e+01 6.077054e+06
max 4.570000e+00 -7.430000e+01 6.312657e+06

Elaboración de un gráfico

Para elaborar un gráfico que contenga la fecha en el eje X y los casos confinados en el eje Y, estableceremos la fecha como índice de la función.

Esto hará que las entradas se identifiquen por la fecha y no por el índice que le había dado Pandas en un principio.

df_co.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-25 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed
2022-11-26 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed
2022-11-27 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed
2022-11-28 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed
2022-11-29 00:00:00+00:00 Colombia CO 4.57 -74.3 6312657 confirmed

1043 rows × 9 columns

Para añadir los casos confirmados se utilizará el siguiente comando.

df_co.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-25 00:00:00+00:00    6312657
2022-11-26 00:00:00+00:00    6312657
2022-11-27 00:00:00+00:00    6312657
2022-11-28 00:00:00+00:00    6312657
2022-11-29 00:00:00+00:00    6312657
Name: Cases, Length: 1043, dtype: int64

Con esto crearemos el gráfico con la función "plot", palabra utilizada para que se genere uno.

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

png

Para asignarle un nombre, utilizaremos el atributo "title".

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

png

Para completar este ejercicio, estos pasos se repetirán para Ecuador, República Dominicana y España. Esto se puede observar en este archivo