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.
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)
Para importar utilizaremos la convención "pd" como abreviatura para llevar a la librería.
import pandas as pd
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
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
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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
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)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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'
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
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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
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)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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 |
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')
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
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'>
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'>
Para completar este ejercicio, estos pasos se repetirán para Ecuador, República Dominicana y España. Esto se puede observar en este archivo