Instalamos con !pip la libreria de pandas, es una libreria de software diseñada para manipular y analizar estructuras de datos en Python
!pip install pandasRequirement already satisfied: pandas in /usr/local/lib/python3.8/dist-packages (1.3.1)
Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.8/dist-packages (from pandas) (1.21.1)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.8/dist-packages (from pandas) (2.8.1)
Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.8/dist-packages (from pandas) (2020.4)
Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7.3->pandas) (1.14.0)
Configuramos panda como pd para importar la libreria
import pandas as pdAsignamos a la variable URL la dirección de la que queremos extraer los datos
url = "https://api.covid19api.com/countries"Creamos el dataframe y así podremos visualizar la información del lugar del cual extraemos los datos
Decimos que el dataframe sea igual a la lectura que va a hacer pandas, previamente importado como pd, que lea los datos de la url con JSON (Java Script Object Notation)
poniendo df le pedimos que nos muestre el dataframe
df = pd.read_json(url)df| Country | Slug | ISO2 | |
|---|---|---|---|
| 0 | French Polynesia | french-polynesia | PF |
| 1 | Indonesia | indonesia | ID |
| 2 | Malta | malta | MT |
| 3 | Sao Tome and Principe | sao-tome-and-principe | ST |
| 4 | Haiti | haiti | HT |
| ... | ... | ... | ... |
| 243 | Myanmar | myanmar | MM |
| 244 | Turkey | turkey | TR |
| 245 | Western Sahara | western-sahara | EH |
| 246 | Pitcairn | pitcairn | PN |
| 247 | Tanzania, United Republic of | tanzania | TZ |
248 rows × 3 columns
Nos saldran solo los cinco primeros datos y los cinco últimos porque hay demasiados datos, pero se puede cambiar utilizando df.heado df.tail seguido de el numero de resultado que queremos que salgan en parentesis (n)
df.head(6)| Country | Slug | ISO2 | |
|---|---|---|---|
| 0 | French Polynesia | french-polynesia | PF |
| 1 | Indonesia | indonesia | ID |
| 2 | Malta | malta | MT |
| 3 | Sao Tome and Principe | sao-tome-and-principe | ST |
| 4 | Haiti | haiti | HT |
| 5 | Poland | poland | PL |
df.tail(2)| Country | Slug | ISO2 | |
|---|---|---|---|
| 246 | Pitcairn | pitcairn | PN |
| 247 | Tanzania, United Republic of | tanzania | TZ |
Queremos mostrar la información del dataframe asi que utilizamos df.info() O para buscar en el nombre en concreto de la lista df["Country"]["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
df["Country"][66]'Somalia'
https://api.covid19api.com/country/spain/status/confirmed/live
Repetimos el ejercicio on un país en especifico
Elijo España, creamos su variable, tanto de los datos como del dataframe (url_es y df_es)
Igualamos la url a la dirección de la que queremos extraer los datos y el data frame a la lectura que queremos que haga pandas (previamente importado como pd) de la dirección de la que queremos extraer los datos gracias a JSON
Ponemos df_es y asi tenemos la visualizacion de los datos
url_es = "https://api.covid19api.com/country/spain/status/confirmed/live"
df_es = pd.read_json(url_es)
df_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 | |||
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 798 | Spain | ES | 40.46 | -3.75 | 11508309 | confirmed | 2022-03-30 00:00:00+00:00 | |||
| 799 | Spain | ES | 40.46 | -3.75 | 11508309 | confirmed | 2022-03-31 00:00:00+00:00 | |||
| 800 | Spain | ES | 40.46 | -3.75 | 11551574 | confirmed | 2022-04-01 00:00:00+00:00 | |||
| 801 | Spain | ES | 40.46 | -3.75 | 11551574 | confirmed | 2022-04-02 00:00:00+00:00 | |||
| 802 | Spain | ES | 40.46 | -3.75 | 11551574 | confirmed | 2022-04-03 00:00:00+00:00 |
803 rows × 10 columns
Investigamos que tipo de datos nos muestra la propia tabla de visualización de los datos poniendo el df_es seguido de .columns
df_es.columnsIndex(['Country', 'CountryCode', 'Province', 'City', 'CityCode', 'Lat', 'Lon',
'Cases', 'Status', 'Date'],
dtype='object')
df_es["Date"].head(1)0 2020-01-22 00:00:00+00:00
Name: Date, dtype: datetime64[ns, UTC]
df_es["Date"].tail(1)802 2022-04-03 00:00:00+00:00
Name: Date, dtype: datetime64[ns, UTC]
df_es.info()<class 'pandas.core.frame.DataFrame'>
RangeIndex: 803 entries, 0 to 802
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Country 803 non-null object
1 CountryCode 803 non-null object
2 Province 803 non-null object
3 City 803 non-null object
4 CityCode 803 non-null object
5 Lat 803 non-null float64
6 Lon 803 non-null float64
7 Cases 803 non-null int64
8 Status 803 non-null object
9 Date 803 non-null datetime64[ns, UTC]
dtypes: datetime64[ns, UTC](1), float64(2), int64(1), object(6)
memory usage: 62.9+ KB
Pedimos que el dataframe haga una descripción de los datos
df_es.describe()| Lat | Lon | Cases | |
|---|---|---|---|
| count | 8.030000e+02 | 803.00 | 8.030000e+02 |
| mean | 4.046000e+01 | -3.75 | 3.242248e+06 |
| std | 7.109856e-15 | 0.00 | 3.109442e+06 |
| min | 4.046000e+01 | -3.75 | 0.000000e+00 |
| 25% | 4.046000e+01 | -3.75 | 3.186710e+05 |
| 50% | 4.046000e+01 | -3.75 | 3.149012e+06 |
| 75% | 4.046000e+01 | -3.75 | 4.920388e+06 |
| max | 4.046000e+01 | -3.75 | 1.155157e+07 |
Ahora le pedimos que nos muestre los datos en un índice con los datos clasificados por la fecha
df_es.set_index("Date")| Country | CountryCode | Province | City | CityCode | Lat | Lon | Cases | Status | |
|---|---|---|---|---|---|---|---|---|---|
| Date | |||||||||
| 2020-01-22 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 0 | confirmed | |||
| 2020-01-23 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 0 | confirmed | |||
| 2020-01-24 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 0 | confirmed | |||
| 2020-01-25 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 0 | confirmed | |||
| 2020-01-26 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 0 | confirmed | |||
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2022-03-30 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 11508309 | confirmed | |||
| 2022-03-31 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 11508309 | confirmed | |||
| 2022-04-01 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 11551574 | confirmed | |||
| 2022-04-02 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 11551574 | confirmed | |||
| 2022-04-03 00:00:00+00:00 | Spain | ES | 40.46 | -3.75 | 11551574 | confirmed |
803 rows × 9 columns
Ahora queremos que nos saque solamente los casos con su respectiva fecha que se ubican en los datos
df_es.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-03-30 00:00:00+00:00 11508309
2022-03-31 00:00:00+00:00 11508309
2022-04-01 00:00:00+00:00 11551574
2022-04-02 00:00:00+00:00 11551574
2022-04-03 00:00:00+00:00 11551574
Name: Cases, Length: 803, dtype: int64
A partir de las funciones que hemos visto para ordenar y buscar los datos, hacemos que nos muestre el dataframe a través de un gráfico. Primero le pedimos que nos saque las fechas y los casos de los datos leídos. Utilzamos plotpara designar el gráfico y entre paréntesis indicamos el nombre de el grafico
df_es.set_index("Date")["Cases"].plot(title="Casos de Covid19 en España")<AxesSubplot:title={'center':'Casos de Covid19 en España'}, xlabel='Date'>

Repetimos el mismo procedimiento con dos países más para poder hacer así una comparación
url_it = "https://api.covid19api.com/country/italy/status/confirmed/live"
df_it = pd.read_json(url_it)
df_it| Country | CountryCode | Province | City | CityCode | Lat | Lon | Cases | Status | Date | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Italy | IT | 41.87 | 12.57 | 0 | confirmed | 2020-01-22 00:00:00+00:00 | |||
| 1 | Italy | IT | 41.87 | 12.57 | 0 | confirmed | 2020-01-23 00:00:00+00:00 | |||
| 2 | Italy | IT | 41.87 | 12.57 | 0 | confirmed | 2020-01-24 00:00:00+00:00 | |||
| 3 | Italy | IT | 41.87 | 12.57 | 0 | confirmed | 2020-01-25 00:00:00+00:00 | |||
| 4 | Italy | IT | 41.87 | 12.57 | 0 | confirmed | 2020-01-26 00:00:00+00:00 | |||
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 798 | Italy | IT | 41.87 | 12.57 | 14567990 | confirmed | 2022-03-30 00:00:00+00:00 | |||
| 799 | Italy | IT | 41.87 | 12.57 | 14642354 | confirmed | 2022-03-31 00:00:00+00:00 | |||
| 800 | Italy | IT | 41.87 | 12.57 | 14719394 | confirmed | 2022-04-01 00:00:00+00:00 | |||
| 801 | Italy | IT | 41.87 | 12.57 | 14790806 | confirmed | 2022-04-02 00:00:00+00:00 | |||
| 802 | Italy | IT | 41.87 | 12.57 | 14845815 | confirmed | 2022-04-03 00:00:00+00:00 |
803 rows × 10 columns
df_it.set_index("Date")["Cases"].plot(title="Casos de Covid19 en Italia")<AxesSubplot:title={'center':'Casos de Covid19 en Italia'}, xlabel='Date'>

url_ger = "https://api.covid19api.com/country/germany/status/confirmed/live"
df_ger = pd.read_json(url_ger)
df_ger.set_index("Date")["Cases"].plot(title="Casos de Covid19 en Alemania")<AxesSubplot:title={'center':'Casos de Covid19 en Alemania'}, xlabel='Date'>

Comparamos los tres países en un gráfico
Creamos una variable para cada uno de los dataframe de los tres países que hemos escogido, España, Italia y Alemania
casos_es = df_es.set_index("Date")["Cases"]
casos_it = df_it.set_index("Date")["Cases"]
casos_ger = df_ger.set_index("Date")["Cases"]Creamos la variable de vs para visualizar los datos que igualamos a la concatenación de los dataframe de cada pais que hacemos con panda por ello pd.concat Finalmente ponemos axis=1para ordenar los países en una sola fila Escribimos vs para mostrar la concatenacion de los datos
vs = pd.concat([casos_es,casos_it,casos_ger],axis=1)
vs| Cases | 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-03-30 00:00:00+00:00 | 11508309 | 14567990 | 20829608 |
| 2022-03-31 00:00:00+00:00 | 11508309 | 14642354 | 21394747 |
| 2022-04-01 00:00:00+00:00 | 11551574 | 14719394 | 21394691 |
| 2022-04-02 00:00:00+00:00 | 11551574 | 14790806 | 21591147 |
| 2022-04-03 00:00:00+00:00 | 11551574 | 14845815 | 21706329 |
803 rows × 3 columns
Nombramos cada una de las columnas de vs con los nombres de los países correspondientes
vs.columns = ["España","Italia","Alemania"]
vs| España | Italia | Alemania | |
|---|---|---|---|
| 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-03-30 00:00:00+00:00 | 11508309 | 14567990 | 20829608 |
| 2022-03-31 00:00:00+00:00 | 11508309 | 14642354 | 21394747 |
| 2022-04-01 00:00:00+00:00 | 11551574 | 14719394 | 21394691 |
| 2022-04-02 00:00:00+00:00 | 11551574 | 14790806 | 21591147 |
| 2022-04-03 00:00:00+00:00 | 11551574 | 14845815 | 21706329 |
803 rows × 3 columns
Para mostrar la visualizacion con un grafico utilizamos plotcon la variable vs. Le ponemos titulo e indicamos el tipo de gráfico que queremos mostrar, preferiblemente un gráfico que se clarifique el área de cada uno de los países.
vs.plot(title="Casos de Covid19 en España, Italia y Alemania", kind="area")<AxesSubplot:title={'center':'Casos de Covid19 en España, Italia y Alemania'}, xlabel='Date'>

Transformamos el grafico al formato de datos de csv y entre parentesis indicamos el nombre del archivo
vs.to_csv("esvsit.csv")Utilizamos la funcion !lspara poder comprobar si se ha guardado bien
!lsesvsit.csv python-prueba.ipynb Shared_Resources
python-api-covid19-pandas.ipynb seaborn-data
Guardamos el mismo gráfico como una imagen en PNG. Importamos la libreria que nos permite guardar imagenes en pyhon matplotlib.pypploty lo importamos como plt. Hacemos que aparezca el gráfico y utilizamos plt para guardar la imagen del gráfico con el nombre "esvsit.png"
import matplotlib.pyplot as plt
vs.plot()
plt.savefig("esvsit.png")
Comprobamos una vez más que todo esta guardado correctamente
!lsesvsit.csv python-api-covid19-pandas.ipynb seaborn-data
esvsit.png python-prueba.ipynb Shared_Resources