On this page

Open In Colab

Pandas

Comandi base pip packet manager

%%capture 
# %%capture Nasconde l'output delle instruzioni

# Elencare tutti i pacchetti installati
!pip list

# Mostrare tutti i pacchetti che contengono nel nome la parola "tensorflow"
!pip list | grep tensorflow

# Installare delle librerie specificando il nome
!pip install pandas matplotlib names xlrd openpyxl

# Cercare la libreria (pacchetto) chiamata "names"
!pip search names

# Installare la libreria "names"
!pip install  names 

# Disinstallare la libreria "names" e controllare che non è installata
!pip uninstall -y names 
!pip list | grep names

# Installare la libreria names e controllare che è installata
!pip install   names
!pip list | grep names

# Scrivi sul file "requirements.txt" tutte le librie che sto  utilizzando
!pip freeze > requirements.txt
%%capture
!pip install pandas

Esempio n.1: Creazione statica di un dataframe

In questo primo esempio andremo a creare un dataframe inserendo manualmente il contenuto di ogni colonna. È importate sottolineare che i dataframe in python sono oggetti chiamati dizionari che si basano sulla logica chiave - valore. Infatti per accedere a una colonna (valore) della tabella del nostro dataframe è necessario specificare il nome della colonna (chiave).

Installare e importare la libreria Pandas

# Importare la libreria pandas come pd
import pandas as pd

Creazione di un dataframe

# Creazione di un Dataframe in cui dati vengono inseriti a mano
# Datafrane (dict-like container for Series Object)
# Each column of a dataframe is a Series
content = {
    "Nome" : [
            "Amadesi Elena", 	 	
            "Buscemi Daniela",	 	
            "Cantini Nicolò",	
            "Carta Luca", 	
            "Cortès Rocìo Beatriz",
            "Cremonini Gian Marco",
            "Crescenzi Francesca", 		
            "Del Magno Saverio", 	 	
            "Di Tanna Luca",	 	
            "Fresu Arianna",		 
            "Hagi Marwa",	 	
            "Lesiv Nadiya",	 	
            "Losi Lorenzo", 	 	
            "Magazzino Sara",  	
            "Matti Caterina", 	 	
            "Mediatore Emanuele", 	 	
            "Miletta Giorgia", 		
            "Morena Chiara", 		
            "Paladino Emma",		
            "Peruzzi Orso", 		
            "Pilia Nicola", 		
            "Romano Francesca", 	 	
            "Rotaru Ilona",	 	  
            "Tacconi Francesco", 		
            "Teleianu Maria Andreea"
            ],		
    "Laurea" : [
                "Laurea in Direzione Aziendale",
                "Laurea in Lingue Moderne per la cooperazione internazonale",
                "Laurea in Relazioni Internazionali",
                "Laurea in Geografia e processi territoriali",
                "Laurea in Astronomia",
                "Laurea in Direzione Aziendale",
                "Laurea in Management",
                "Laurea in Comunicazione per l'Impresa i Media e le organizzazioni complesse",
                "Laurea in Ingegneria Gestionale",
                "Laurea in Relazioni Internazionali",
                "Laurea in Relazioni Internazionali",
                "Laurea in Economia Mercati e Istituzioni",
                "Laurea in Ingegneria Ambientale",
                "Laurea in Scienze Naturali",
                "Laurea in mediazione Linguistica Interculturale",
                "Laurea in Giurisprudenza",
                "Laurea in Tourism Economics and Management",
                "Laurea in Scienze e Tecnologie Agrarie",
                "Laurea in Economia e Politica Economica",
                "Laurea in Astronomia",
                "Laurea in Economia e Gestione delle Imprese",
                "Laurea in Ingegneria Elettronica",
                "Laurea in Astronomia",
                "Laurea in Design del profotto Industriale",
                "Laurea in Scienze Statistiche"
                ],
        "PC": 
        [
           "Mac",
           "Windows",
           "Windows",
           "Windows",
           "Mac",
           "Windows7",
           "Windows",
           "Mac",
           "Windows",
           "Mac",
           "Mac",
           "Mac",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows",
           "Windows"  
        ]
}
           
content2 ={
    "Nome": ["Manuel", "Giada", "Marco", "Francesca"],
    "Età" : ["26", "25", "28", "29"],
    "Sesso": ["M", "F", "M", "F"]
}

df = pd.DataFrame(content) #index=[4,5,6,7] )
#display(df)
df.head()
Nome Laurea PC
0 Amadesi Elena Laurea in Direzione Aziendale Mac
1 Buscemi Daniela Laurea in Lingue Moderne per la cooperazione i... Windows
2 Cantini Nicolò Laurea in Relazioni Internazionali Windows
3 Carta Luca Laurea in Geografia e processi territoriali Windows
4 Cortès Rocìo Beatriz Laurea in Astronomia Mac

Estrarre informazioni sui tipi dati contenuti nella tabella

df.dtypes
Nome      object
Laurea    object
PC        object
dtype: object
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25 entries, 0 to 24
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   Nome    25 non-null     object
 1   Laurea  25 non-null     object
 2   PC      25 non-null     object
dtypes: object(3)
memory usage: 728.0+ bytes

Estrarre il nome di tutte le colonne

df.keys()
for name in df.keys():
    print(name) 
Nome
Laurea
PC

Estrarre il contenuto dello tabella come array e stampare la dimensione di esso

arr = df.values # contenuto della tabella
#display(arr)
print("Dimensione della tabella: ", arr.shape)
print("Valore riga 1, colonna 0: " ,arr[1,0])
Dimensione della tabella:  (25, 3)
Valore riga 1, colonna 0:  Buscemi Daniela

Creare una nuova tabella chiamata df_small che contiene le prime 4 righe

df_small = df.head(4)
df_small
Nome Laurea PC
0 Amadesi Elena Laurea in Direzione Aziendale Mac
1 Buscemi Daniela Laurea in Lingue Moderne per la cooperazione i... Windows
2 Cantini Nicolò Laurea in Relazioni Internazionali Windows
3 Carta Luca Laurea in Geografia e processi territoriali Windows

Creare una nuova tabella chiamata df_small che contiene le ultime 4 righe

df_small = df.tail(4)
df_small
Nome Laurea PC
21 Romano Francesca Laurea in Ingegneria Elettronica Windows
22 Rotaru Ilona Laurea in Astronomia Windows
23 Tacconi Francesco Laurea in Design del profotto Industriale Windows
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows

Selezionare colonne

# Stampare tabella
display(df_small)

# Selezionare colonna Nome
#df_small["Nome"]

# Selezionare colonne Nome e Laurea
display(df_small[["Nome","Laurea"]])

# Selezionare tutte le colonne numero 0 e 2
display(df_small.iloc[:,[0,2]])

# Selezionare da riga 2,a 4 delle colonne numero 0 e 2
display(df_small.iloc[2:4,[0,2]]) # 2:4 è uguale a 2,3
#display(df_small.iloc[[2,3],[0,2]])
Nome Laurea PC
21 Romano Francesca Laurea in Ingegneria Elettronica Windows
22 Rotaru Ilona Laurea in Astronomia Windows
23 Tacconi Francesco Laurea in Design del profotto Industriale Windows
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows
Nome Laurea
21 Romano Francesca Laurea in Ingegneria Elettronica
22 Rotaru Ilona Laurea in Astronomia
23 Tacconi Francesco Laurea in Design del profotto Industriale
24 Teleianu Maria Andreea Laurea in Scienze Statistiche
Nome PC
21 Romano Francesca Windows
22 Rotaru Ilona Windows
23 Tacconi Francesco Windows
24 Teleianu Maria Andreea Windows
Nome PC
23 Tacconi Francesco Windows
24 Teleianu Maria Andreea Windows

Selezionare righe

# Stampare tabella
display(df_small)

# Selezionare i valori nella Riga 1 e colonne 0 e 2
display(df_small.iloc[[1],[0,2]])

# Selezionare tutta le righe 0 e 3
display(df_small.iloc[[0,3],:])
#df_small.iloc[[0,3]]
Nome Laurea PC
21 Romano Francesca Laurea in Ingegneria Elettronica Windows
22 Rotaru Ilona Laurea in Astronomia Windows
23 Tacconi Francesco Laurea in Design del profotto Industriale Windows
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows
Nome PC
22 Rotaru Ilona Windows
Nome Laurea PC
21 Romano Francesca Laurea in Ingegneria Elettronica Windows
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows

Aggiungere una nuova colonna

#df_small['Età'] = [26,27,28,26]
df_small.insert(3, "Età", [26, 27, 28, 26]) 
#df_small = df_small.assign(eta = [26, 27, 28, 26]) 
df_small
Nome Laurea PC Età
21 Romano Francesca Laurea in Ingegneria Elettronica Windows 26
22 Rotaru Ilona Laurea in Astronomia Windows 27
23 Tacconi Francesco Laurea in Design del profotto Industriale Windows 28
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows 26

Rimuovere colonne

#df_small.drop(['Laurea', 'Sesso'], axis=1)
#df_small_new = df_small.drop(columns=['PC', 'Età']) # inplace=True) # inplace permetter l'assegmamento automatico
df_small.drop(columns=['PC', 'Età']) 
Nome Laurea
21 Romano Francesca Laurea in Ingegneria Elettronica
22 Rotaru Ilona Laurea in Astronomia
23 Tacconi Francesco Laurea in Design del profotto Industriale
24 Teleianu Maria Andreea Laurea in Scienze Statistiche

Rimuovere righe

# rimuove riga 23 e 24 (in base all'enumerazione dell indice)
df_small.drop([23, 24]) # inplace=True)
Nome Laurea PC Età
21 Romano Francesca Laurea in Ingegneria Elettronica Windows 26
22 Rotaru Ilona Laurea in Astronomia Windows 27

Ordinare una tabella

# Facciamo un display della tabella iniziale
df_small
# display(df_small)
# print(df_small)
Nome Laurea PC Età
21 Romano Francesca Laurea in Ingegneria Elettronica Windows 26
22 Rotaru Ilona Laurea in Astronomia Windows 27
23 Tacconi Francesco Laurea in Design del profotto Industriale Windows 28
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows 26
# Ordinamento della tabella guardando alla colonna Età dal piu piccolo al piu grande
df_sorted = df_small.sort_values(by="Età", ascending=True)
display(df_sorted.head())
Nome Laurea PC Età
21 Romano Francesca Laurea in Ingegneria Elettronica Windows 26
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows 26
22 Rotaru Ilona Laurea in Astronomia Windows 27
23 Tacconi Francesco Laurea in Design del profotto Industriale Windows 28

Resettare gli indici (righe) della tabella

# Reset dell indice da 0 a N
df_sorted = df_sorted.reset_index()
display(df_sorted.head())
index Nome Laurea PC Età
0 21 Romano Francesca Laurea in Ingegneria Elettronica Windows 26
1 24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows 26
2 22 Rotaru Ilona Laurea in Astronomia Windows 27
3 23 Tacconi Francesco Laurea in Design del profotto Industriale Windows 28

Esempio n.2 : Creazione dinamica di un dataframe

In questo esempio andremo a creare programmaticamente (usando codice python) un dataframe. Per fare ciñ utilizzeremo la libreria names che genera randomicamente dei nomi e dei cognomi.

Installare e importare le librerie

%%capture
# installare le librerie names e numpy
!pip install names numpy pandas
# Importare le librerie
import names
import numpy as np
import pandas as pd

Creare una lista di nomi,di cognomi ed età in modo automatico

# Creare una lista di nomi,di cognomi ed età in modo automatico
list_names = []
list_surnames = []
list_nums = []
for i in range(0,30):
    num = np.random.randint(20,30,1)[0]
    #name = names.get_full_name()
    name = names.get_first_name()
    surname = names.get_last_name()
    #list_names.append([name, surname])
    list_names.append(name)
    list_surnames.append(surname)
    list_nums.append(num)

    #display(name)
print(list_names)
print("--------")
print("--------")
print(list_surnames)
print("--------")
print("--------")
print(list_nums)
['Lawrence', 'Michael', 'Lauren', 'Mary', 'Jean', 'Pamela', 'Sara', 'Freddie', 'Brandie', 'Kathleen', 'William', 'Susan', 'Dustin', 'Charles', 'Candy', 'Randall', 'William', 'Heather', 'Ralph', 'Molly', 'Len', 'Claude', 'Robert', 'Kimberly', 'Maurice', 'Megan', 'Betty', 'Mary', 'Stephanie', 'James']
--------
--------
['Ortiz', 'Lackey', 'Cole', 'Wiley', 'Eby', 'Mills', 'Lund', 'Shiels', 'Greenfield', 'Steiner', 'Mitchell', 'Arnold', 'Terry', 'Mcclain', 'Thompson', 'Dunston', 'Harbison', 'Taylor', 'Dick', 'Fortman', 'Vess', 'Brown', 'Blazek', 'Zimmerman', 'Jones', 'Curran', 'Reed', 'Pedro', 'Tryon', 'Couch']
--------
--------
[20, 27, 27, 27, 29, 24, 25, 25, 22, 22, 25, 24, 22, 27, 20, 26, 23, 29, 22, 28, 23, 26, 23, 22, 29, 26, 21, 21, 24, 29]

Creare un dataframe da delle liste

# Datafrane (dict-like container for Series Object)
content = {
    "Nome": list_names,
    "Cognomi": list_surnames,
    "Età" : list_nums
}
dff = pd.DataFrame(content )

# Mostrare l'intero dataframe
#display(df)

# Stampare le prime 5 righe 
#display(dff.head())

# Stampare le ultime
display(df.tail())
Nome Laurea PC
20 Pilia Nicola Laurea in Economia e Gestione delle Imprese Windows
21 Romano Francesca Laurea in Ingegneria Elettronica Windows
22 Rotaru Ilona Laurea in Astronomia Windows
23 Tacconi Francesco Laurea in Design del profotto Industriale Windows
24 Teleianu Maria Andreea Laurea in Scienze Statistiche Windows

Ordinare i dati in base all’età dal più grande al più piccolo e mostrare le prime 8 righe

display(dff.sort_values(by="Età", ascending=False).head(8))
Nome Cognomi Età
29 James Couch 29
4 Jean Eby 29
24 Maurice Jones 29
17 Heather Taylor 29
19 Molly Fortman 28
13 Charles Mcclain 27
2 Lauren Cole 27
3 Mary Wiley 27

Della colonna Età selezione i valori che banno da riga 0 a 3

# Da notare che 0:4 seleziona le righe da 0,1,2,3
dff["Età"][0:4]
0    20
1    27
2    27
3    27
Name: Età, dtype: int64

Della colonna Età e Cognomi seleziona i valori che banno da riga 0 a 3

dff[["Età","Cognomi"]][0:4]
Età Cognomi
0 20 Ortiz
1 27 Lackey
2 27 Cole
3 27 Wiley

Della colonna età selezionare tutte le righe che hanno età=20

dff[dff["Età"]==20]
Nome Cognomi Età
0 Lawrence Ortiz 20
14 Candy Thompson 20

Della colonna età selezionare tutte le righe che hanno età tra 20 (escluso) e 24 (incluso)

dff[(dff["Età"]>20) & (dff["Età"]<=24)]
#dff.loc[(dff["Età"]>20) & (dff["Età"]<=24)]
Nome Cognomi Età
5 Pamela Mills 24
8 Brandie Greenfield 22
9 Kathleen Steiner 22
11 Susan Arnold 24
12 Dustin Terry 22
16 William Harbison 23
18 Ralph Dick 22
20 Len Vess 23
22 Robert Blazek 23
23 Kimberly Zimmerman 22
26 Betty Reed 21
27 Mary Pedro 21
28 Stephanie Tryon 24

Delle colonne Nome e Cognomi trova tutti i Nomi che hanno la lettera D o M mauscole

dff[dff["Nome"].str.contains("D|M") | dff["Cognomi"].str.contains("D|M")]
Nome Cognomi Età
1 Michael Lackey 27
3 Mary Wiley 27
5 Pamela Mills 24
10 William Mitchell 25
12 Dustin Terry 22
13 Charles Mcclain 27
15 Randall Dunston 26
18 Ralph Dick 22
19 Molly Fortman 28
24 Maurice Jones 29
25 Megan Curran 26
27 Mary Pedro 21

Sostituire nella colonna Nome “e” con “,AAAA” (Replace method)

dff["Nome"] = dff["Nome"].str.replace("e",",AAAA")
# Mostra solo le prime 3 righe
dff.head(3) 
Nome Cognomi Età
0 Lawr,AAAAnc,AAAA Ortiz 20
1 Micha,AAAAl Lackey 27
2 Laur,AAAAn Cole 27
# Viceversa: Sostituire ",AAAA" con "e"
dff["Nome"] = dff["Nome"].str.replace(",AAAA","e")
# Mostra solo le prime 5 righe
dff.head(3) 
Nome Cognomi Età
0 Lawrence Ortiz 20
1 Michael Lackey 27
2 Lauren Cole 27

Esempio n.3: Creazione di un dataframe usando csv e fogli excel

Importare dataset da url online

# Dataset mondo covid 19
data = pd.read_csv('https://open-covid-19.github.io/data/data.csv')
data
Date Key CountryCode CountryName RegionCode RegionName Confirmed Deaths Latitude Longitude Population
0 2019-12-30 AE AE United Arab Emirates NaN NaN 0.0 0.0 24.400000 54.300000 9.400145e+06
1 2019-12-30 AF AF Afghanistan NaN NaN 0.0 0.0 34.000000 66.000000 3.494084e+07
2 2019-12-30 AM AM Armenia NaN NaN 0.0 0.0 40.383333 44.950000 2.930450e+06
3 2019-12-30 AT AT Austria NaN NaN 0.0 0.0 48.000000 14.000000 8.809212e+06
4 2019-12-30 AU AU Australia NaN NaN 0.0 0.0 -28.000000 137.000000 2.451180e+07
... ... ... ... ... ... ... ... ... ... ... ...
67074 2020-05-26 UA_40 RU Russia 40 Sevastopol 158.0 NaN 44.600000 33.533333 4.488290e+05
67075 2020-05-26 UA_43 RU Russia 43 Republic of Crimea 346.0 NaN 44.933300 34.100000 1.957801e+06
67076 2020-05-26 XK XK Kosovo NaN NaN 1038.0 30.0 42.550000 20.833333 1.883018e+06
67077 2020-05-27 CN CN China NaN NaN 84543.0 4645.0 35.000000 103.000000 1.382793e+09
67078 2020-05-27 CN_HK CN China HK Hong Kong 1065.0 4.0 22.278333 114.158610 7.500700e+06

67079 rows × 11 columns

# Dataset mondo covid 19
dati_province = "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-province/dpc-covid19-ita-province.csv"
dati_regioni = "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-regioni/dpc-covid19-ita-regioni.csv"
dati_italia = "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csv"
data = pd.read_csv(dati_italia)
display(data.head(5))
data stato ricoverati_con_sintomi terapia_intensiva totale_ospedalizzati isolamento_domiciliare totale_positivi variazione_totale_positivi nuovi_positivi dimessi_guariti deceduti totale_casi tamponi casi_testati note_it note_en
0 2020-02-24T18:00:00 ITA 101 26 127 94 221 0 221 1 7 229 4324 NaN NaN NaN
1 2020-02-25T18:00:00 ITA 114 35 150 162 311 90 93 1 10 322 8623 NaN NaN NaN
2 2020-02-26T18:00:00 ITA 128 36 164 221 385 74 78 3 12 400 9587 NaN NaN NaN
3 2020-02-27T18:00:00 ITA 248 56 304 284 588 203 250 45 17 650 12014 NaN NaN NaN
4 2020-02-28T18:00:00 ITA 345 64 409 412 821 233 238 46 21 888 15695 NaN NaN NaN

Stampare i tipi di dati contenuti nel dataframe

display(data.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 93 entries, 0 to 92
Data columns (total 16 columns):
 #   Column                      Non-Null Count  Dtype  
---  ------                      --------------  -----  
 0   data                        93 non-null     object 
 1   stato                       93 non-null     object 
 2   ricoverati_con_sintomi      93 non-null     int64  
 3   terapia_intensiva           93 non-null     int64  
 4   totale_ospedalizzati        93 non-null     int64  
 5   isolamento_domiciliare      93 non-null     int64  
 6   totale_positivi             93 non-null     int64  
 7   variazione_totale_positivi  93 non-null     int64  
 8   nuovi_positivi              93 non-null     int64  
 9   dimessi_guariti             93 non-null     int64  
 10  deceduti                    93 non-null     int64  
 11  totale_casi                 93 non-null     int64  
 12  tamponi                     93 non-null     int64  
 13  casi_testati                38 non-null     float64
 14  note_it                     29 non-null     object 
 15  note_en                     29 non-null     object 
dtypes: float64(1), int64(11), object(4)
memory usage: 11.8+ KB
None

Esportare il dataframe come foglio excel

data.to_excel('dati_italia.xlsx', index=False)

Esportare il dataframe come csv

data.to_csv('dati_italia.csv', index=False)

Importare un excel in un dataframe

data = pd.read_excel('dati_italia.xlsx')
data.head()
# Su colab è possibile caricare file: Upload option
data stato ricoverati_con_sintomi terapia_intensiva totale_ospedalizzati isolamento_domiciliare totale_positivi variazione_totale_positivi nuovi_positivi dimessi_guariti deceduti totale_casi tamponi casi_testati note_it note_en
0 2020-02-24T18:00:00 ITA 101 26 127 94 221 0 221 1 7 229 4324 NaN NaN NaN
1 2020-02-25T18:00:00 ITA 114 35 150 162 311 90 93 1 10 322 8623 NaN NaN NaN
2 2020-02-26T18:00:00 ITA 128 36 164 221 385 74 78 3 12 400 9587 NaN NaN NaN
3 2020-02-27T18:00:00 ITA 248 56 304 284 588 203 250 45 17 650 12014 NaN NaN NaN
4 2020-02-28T18:00:00 ITA 345 64 409 412 821 233 238 46 21 888 15695 NaN NaN NaN

Visualizzare la colonna di terapia_intensiva come riga

# Creare un nuovo dataframe contenente le colonne data e terapia_intensiva
dn = data[["data", "terapia_intensiva"]]
#display(dn.shape)
# Eseguire l'operazione Trasposta. Che inverte righe con colonne
dn = dn.T
display(dn)
#display(dn.shape)
0 1 2 3 4 5 6 7 8 9 ... 83 84 85 86 87 88 89 90 91 92
data 2020-02-24T18:00:00 2020-02-25T18:00:00 2020-02-26T18:00:00 2020-02-27T18:00:00 2020-02-28T18:00:00 2020-02-29T18:00:00 2020-03-01T18:00:00 2020-03-02T18:00:00 2020-03-03T18:00:00 2020-03-04T18:00:00 ... 2020-05-17T17:00:00 2020-05-18T17:00:00 2020-05-19T17:00:00 2020-05-20T17:00:00 2020-05-21T17:00:00 2020-05-22T17:00:00 2020-05-23T17:00:00 2020-05-24T17:00:00 2020-05-25T17:00:00 2020-05-26T17:00:00
terapia_intensiva 26 35 36 56 64 105 140 166 229 295 ... 762 749 716 676 640 595 572 553 541 521

2 rows × 93 columns

Mostrare gli utimi 10 risultati

# Vogliamo le ultime 5 date o le prime 5 date
dn = data[["data", "terapia_intensiva","isolamento_domiciliare", "ricoverati_con_sintomi"]]
display(dn.tail(10)) # ultimi 10
#display(dn.iloc[-10:,:]) # ultimi 10
data terapia_intensiva isolamento_domiciliare ricoverati_con_sintomi
83 2020-05-17T17:00:00 762 57278 10311
84 2020-05-18T17:00:00 749 55597 10207
85 2020-05-19T17:00:00 716 54422 9991
86 2020-05-20T17:00:00 676 52452 9624
87 2020-05-21T17:00:00 640 51051 9269
88 2020-05-22T17:00:00 595 49770 8957
89 2020-05-23T17:00:00 572 48485 8695
90 2020-05-24T17:00:00 553 47428 8613
91 2020-05-25T17:00:00 541 46574 8185
92 2020-05-26T17:00:00 521 44504 7917

Filtrare la colonna “ricoverati_con_sintomi” tenendo solo valori > 100

# Select specific rows columns
sel = dn.loc[data["ricoverati_con_sintomi"]>100]
#sel = dn.loc[data["ricoverati_con_sintomi"]>100, "isolamento_domiciliare"]
#display(sel)

Selezionare le colonne “data” e “isolamento_domiciliare” e mostrare solo i dati relativi alla data=”2020-03-19T17:00:00”

# Select specific row columns (da a (data specifica))
#2020-03-19T17:00:00	
#2020-03-25T17:00:00
# index[0] This will return the index of the first row of the result...
dn = data[["data", "terapia_intensiva","isolamento_domiciliare", "ricoverati_con_sintomi"]]

idxstart = dn[dn["data"]=="2020-03-19T17:00:00"].index[0]
idxstop = dn[dn["data"]=="2020-03-25T17:00:00"].index[0]
#print(idxstart,idxstop)

#dn = dn.iloc[idxstart:idxstop,:]  # row da data scelta start a data scelta stop, colonne tutte
#dn = dn.iloc[idxstart:idxstop,:-1]  # -1 rimuove la colonna
#dn = dn.iloc[idxstart:idxstop,2:4]  # 4 colonne 
dn = dn.iloc[idxstart:idxstop,[0,2]]  # 4 colonne 
dn
data isolamento_domiciliare
24 2020-03-19T17:00:00 14935
25 2020-03-20T17:00:00 19185
26 2020-03-21T17:00:00 22116
27 2020-03-22T17:00:00 23783
28 2020-03-23T17:00:00 26522
29 2020-03-24T17:00:00 28697

Grafici usando pandas

dn = data[["data", "totale_casi", "deceduti","totale_positivi"]]
display(dn.head())
data totale_casi deceduti totale_positivi
0 2020-02-24T18:00:00 229 7 221
1 2020-02-25T18:00:00 322 10 311
2 2020-02-26T18:00:00 400 12 385
3 2020-02-27T18:00:00 650 17 588
4 2020-02-28T18:00:00 888 21 821
# Problema: datetime deve essere tutta una parola
#dn["data"] = pd.to_datetime(data["data"])
#display(dn.head(4))
#display(dn.dtypes)
from matplotlib import pyplot as plt
plt.style.use('seaborn') # fivethirtyeight
fig, ax = plt.subplots(1, 1, figsize=(18,8))
dn.plot(kind="bar",stacked=True,ax=ax)
<matplotlib.axes._subplots.AxesSubplot at 0x7f94c2c09ef0>
../../_images/pandas_87_1.png
fig, ax = plt.subplots(1, 1, figsize=(18,8))
dn.plot(kind="bar",stacked=False,ax=ax)
<matplotlib.axes._subplots.AxesSubplot at 0x7f94c1dbdf28>
../../_images/pandas_88_1.png
fig, ax = plt.subplots(1, 1, figsize=(18,8))
dn.plot(kind="line",stacked=False,ax=ax )
#dn.plot(kind="area", stacked=False,ax=ax )
<matplotlib.axes._subplots.AxesSubplot at 0x7f94c19ff2e8>
../../_images/pandas_89_1.png
dfin = dn.tail(1)
dfin = dfin.drop(columns="data")
dfin
totale_casi deceduti totale_positivi
92 230555 32955 52942
#list(dfin.columns)
list(dfin.iloc[0,:])
list(dfin.values[0])
[230555, 32955, 52942]
d = {
    'numero_di_contagiati': list(dfin.values[0])
    }
dpie = pd.DataFrame(d,index= list(dfin.columns))
dpie

numero_di_contagiati
totale_casi 230555
deceduti 32955
totale_positivi 52942
fig, ax = plt.subplots(1, 1, figsize=(18,8))
dpie.plot(kind="pie", y="numero_di_contagiati",ax=ax,autopct='%1.0f%%', pctdistance=1.1, labeldistance=1.2)
fig.savefig("covid19.png")    
../../_images/pandas_93_0.png
fig, ax = plt.subplots(1, 1, figsize=(18,8))
dn.plot(kind="hist",ax=ax,bins=10,rwidth=0.95)
<matplotlib.axes._subplots.AxesSubplot at 0x7f94c189b048>
../../_images/pandas_94_1.png

Grafici usando Matplotlib

from matplotlib import pyplot as plt

# Set the style globally
# Alternatives include bmh, fivethirtyeight, ggplot,dark_background
# dark_background, seaborn-deep, etc
#plt.style.use('fivethirtyeight')
plt.figure(figsize=(18,8))
#plt.plot(dn["data"], dn.iloc[:,1])
idx = np.linspace(1,len(data["data"]),len(data["data"]))
plt.plot(idx,data["totale_casi"],'ro--',label="totale_casi", linewidth=1)
plt.plot(idx,data["deceduti"],'bo--',label="deceduti", linewidth=1)
plt.plot(idx,data["totale_positivi"],'go-',label="totale_positivi", linewidth=3)

plt.legend( prop={'size': 20})
plt.ylabel("Numero di persone")
plt.xlabel("Giorni")

#plt.grid()
plt.show()
../../_images/pandas_96_0.png

Plotly dash

import plotly.graph_objects as go
# https://plotly.com/python/line-charts/
# lines,  markers, line+martkers
# https://plotly.com/python/creating-and-updating-figures/
# https://plotly.com/python/reference/#layout-title
fig = go.Figure()
fig.add_trace(go.Scatter(x=data["data"], y=data["totale_casi"],
                    mode='lines+markers',
                    name='totale_casi'))
fig.add_trace(go.Scatter(x=data["data"], y=data["deceduti"],
                    mode='lines+markers',
                    name='deceduti'))
fig.add_trace(go.Scatter(x=data["data"], y=data["totale_positivi"],
                    mode='lines+markers',
                    name='totale_positivi'))
fig.layout.hovermode = "x" #['x', 'y', 'closest', False]
fig.layout.paper_bgcolor = "rgb(0,0,0)" 
fig.layout.font.size = 20
fig.layout.title.text = "Andamento Italia COVID 19"
fig.layout.title.x = 0.5
fig.layout.titlefont.size = 40
fig.layout.title.font.color = "rgb(255,255,255)"
fig.layout.plot_bgcolor = "rgb(10,10,10)" 
fig.show()