Laboratorio Statistica e Analisi Dati Lezione 1...

111
Laboratorio Statistica e Analisi Dati Lezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018

Transcript of Laboratorio Statistica e Analisi Dati Lezione 1...

Page 1: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Laboratorio Statistica e Analisi Dati Lezione 1 - Introduzione e Strutture Per Analisi Dati

Luca Cermenati

2017/2018

Page 2: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Programma

1. Introduzione, Script in Python, Tipi Predefiniti, Serie 2. Data Frame 3. Strutture di controllo del flusso, funzioni 4. Grafici 5. Variabili Aleatorie 6. Esercizi di riepilogo 7. Calcolo di probabilità 8. Calcolo di probabilità 9. Risoluzione di un tema di esame 10.Simulazione di un tema di esame

Page 3: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Installare PythonMac OS X 10.2 e succesivi includono una versione pre-installata di Python. Nei sistemi Linux spesso Python è già presente nel setup di base.

Per verificare se Python è già installato è sufficiente aprire una finestra del terminale e digitare il comando python

Altrimenti è necessario installare Python scaricando dal sito https://www.python.it la versione adatta. La versione che verrà utilizzata nel corso è la 2.7

MacBook-Pro-di-Luca:~ lucacermenati$ python Python 2.7.10 (default, Feb 7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>

Page 4: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Interprete interattivo

Il comando python apre l’interprete interattivo. L’interprete valuta le istruzioni python inserite a riga di comando e fornisce una risposta.

Python 2.7.10 (default, Feb 7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> >>> print('Hello World') Hello World >>>

Page 5: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

La funzione exit( ) è digitata per uscire dall’ambiente interprete

>>> print('Hello World') Hello World >>> >>> >>> exit() MacBook-Pro-di-Luca:~ lucacermenati$

Page 6: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Non è obbligatorio usare l’interprete interattivo (Anzi). É possibile lanciare un file di testo contenente un programma python (file.py), dalla cartella in cui si trova il file.py che si vuole eseguire col comando python <nomefile.py>

Script

MacBook-Pro-di-Luca:~ lucacermenati$ MacBook-Pro-di-Luca:~ lucacermenati$ python prova.py Sto eseguendo uno script MacBook-Pro-di-Luca:~ lucacermenati$

Page 7: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Variabili in Python

Python è dinamicamente tipato e fortemente tipatoUna variabile inizia ad esistere nel momento in cui le viene assegnato un valore, che ne determina il tipo.

>>> a=10000 >>> type(a) <type ‘int’>

>>> len(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len() >>>

Page 8: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Riferirsi ad una variabile inesistente (a cui non è ancora stato assegnato un valore) genera un errore.

>>> b Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'b' is not defined >>>

Page 9: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Dall’interno dell’ambiente interattivo è possibile aprire la documentazione a riguardo di un particolare oggetto, metodo o attributo semplicemente passando alla funzione help(<nome>) il nome dell’oggetto, … che stiamo cercando.

Funzione Help

Si esce dal manuale interattivo premendo q

>>> help(str)

Help on class str in module __builtin__:

class str(basestring) | str(object='') -> string | | Return a nice string representation of the object. | If the argument is a string, the return value is the same object. | | Method resolution order: | str | basestring

Page 10: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Tipi Predefiniti in Python

1. Stringhe ‘questa è una stringa’ “questa pure”

2. Dizionari { ‘chiave’: valore } {1: ‘valore’}

3. Tuple (1,2,3,’ciao’, (‘a’,’b’,’c’))

4. Liste [ ]

Page 11: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

ArrayIl modulo numpy mette a disposizione una struttura dati creata appositamente per il calcolo scientifico. Un Array è un contenitore di dati omogenei, cioè dello stesso tipo. Se si tenta di costruire un array con dati di tipo diverso, questi vengono “trasformati” nel più piccolo tipo adatto a contenerli tutti.

>>> numpy.array( [1,4,6.8,10] ) array([ 1. , 4. , 6.8, 10. ])

Page 12: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Creazione di Arraynumpy.arange(x): restituisce un array contenente gli interi da 0 a X-1 >>> numpy.arange(5) [0,1,2,3,4]

numpy.arange(start, stop, step): permette di scegliere gli estremi della sequenza contenuta nell’array e il passo tra un numero ed il successivo. >>> numpy.arange(2,6,2) [2,4] >>> numpy.arange(2,-3,-1) [2,1,0,-1,-2]

numpy.linspace(start, stop, n): permette di scegliere gli estremi e quanti numeri devono comparire all’interno della sequenza >>> numpy.linspace(0,1,4) [0, 0.3333333, 0.66666667, 1]

Page 13: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Creazione di Array

numpy.ones(tupla contenente dim): restuituisce un array di 1, date le dimensioni. >>> numpy.ones( (1,5) ) [1. , 1. , 1. , 1. , 1.]

numpy.zeros(tupla contenente dim): restuituisce un array di 1, date le dimensioni. >>> numpy.zeros( (2,5) ) [[0. , 0. , 0. , 0. , 0.] , [0. , 0. , 0. , 0. , 0.]]

Page 14: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Creazione random di Array

numpy.random.randint(low, high, n): restituisce un array di n elementi interi scelti casualmente tra i valori low e high

numpy.random.random(n): restituisce un array di n elementi float scelti casualmente nell’intervallo tra 0.0 e 1.0

https://docs.scipy.org/doc/numpy/reference/routines.random.html

Page 15: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Operazioni con Array

Applicando un operazione logica ad un array si ottiene come risposta un array di tipo booleano contenente nella posizione i-esima il risultato dell’espressione logica valutata per l’elemento i-esimo dell’array.

>>> numpy.arange(5) > 3 array([False, False, False, False, True], dtype=bool)

Le operazioni + - * / % ,…. Tra due array vengono eseguite elemento per elemento. Gli array devono avere le stesse dimensioni.

numpy.arange(5) + numpy.linspace(0,2,5) >>> array([ 0. , 1.5, 3. , 4.5, 6. ])

>>> numpy.arange(5) * 2 array([0, 2, 4, 6, 8])

Page 16: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Selezioni di un sottoinsieme di elementiAd un array è possibile accedere in tutti i modi con cui è possibile accedere ad una lista, inoltre

Ottenere una tupla di elementi >>> a[2], a[-1], a[3:6] (2, 9, array([3, 4, 5]))

Slicing tipo [start:stop:step] >>> a[2:9:3] array([2, 5, 8])

>>> a[::2] array([0, 2, 4, 6, 8])

Page 17: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Accesso con maschere booleane (filtri)Specificando tra [ ] un array di tipo booleano, selezioniamo dall’array gli elementi la cui posizione corrisponde ad un True nell’array di tipo booleano. Che prende il nome di maschera. >>> a = numpy.arange(10) >>> mask = a%2 == 0 >>> mask array([ True, False, True, False, True, False, True, False, True, False], dtype=bool) >>> >>> a[mask] array([0, 2, 4, 6, 8])

in maniera più compatta >>> a[a%2 == 0] array([0, 2, 4, 6, 8])

Page 18: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

SerieUna Serie è un array monodimensionale ed etichettato. Rappresenta una serie di osservazioni di un certo carattere, fatto su un insieme di individui. É una struttura dati appartenente al modulo python Pandas.

a 0.0 b 1.0 c 2.0 d 3.0 e 4.0 f 5.0 g 6.0 h 7.0

Name: serie_di_esempio, dtype: float64 >>>

Page 19: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

pandas.Series ( data, index, dtype, name, … )data: array-like, dizionario, contiene i dati che si vuole inserire nella serie. index: array-like, della stessa lunghezza di data, contiene le etichette. dtype: permette di specificare il tipo che i dati devono assumere name: permette di dare un nome alla Serie

É possibile specificare altri parametri, ma anche ometterne alcuni. E ottenere Serie da altre strutture dati. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html

>>> import pandas >>> import numpy >>> oss=numpy.arange(8) >>> etic=['a','b','c','d','e','f','g','h'] >>> pandas.Series(data=oss, index=etic, name='serie_di_esempio', dtype=float) a 0.0 b 1.0 c 2.0 d 3.0 e 4.0 f 5.0 g 6.0 h 7.0 Name: serie_di_esempio, dtype: float64

Page 20: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Accesso ai dati di una SerieSpecificando un valore per l’etichetta, o una lista di valori Specificando un valore posizionale, o una lista di valori

Stile list slicing

>>> s['d'] 3.0 >>> s.loc[['h','a']] h 7.0 a 0.0 Name: serie_di_esempio

>>> s[[5,6]] f 5.0 g 6.0 Name: serie_di_esempio >>> s.iloc[0] 0.0

>>> s[3:6] d 3.0 e 4.0 f 5.0 Name: serie_di_esempio, dtype: float64 >>> >>> s[-3:] f 5.0 g 6.0 h 7.0 Name: serie_di_esempio, dtype: float64

Page 21: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Accesso ai dati di una SerieCome per gli array, applicando un espressione logica ad una Serie si ottiene una serie di Booleani, che può essere utilizzata come maschera per accedere ai soli dati che corrispondo al valore True.

>>> s % 2 == 0 a True b False c True d False e True f False g True h False Name: serie_di_esempio, dtype: bool

>>> s[s % 2 == 0] a 0.0 c 2.0 e 4.0 g 6.0

Page 22: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Metodi della classe Series

Series.min(), Series.max() restituiscono rispettivamente il massimo ed il minimo tra i valori osservati

Series.sum(): restituisce la somma dei valori osservati

Series.sort_values(): restituisce una copia della serie ordinata per valore

Series.sort_index(): restituisce una copia della serie ordinata per etichette

Series.sample(n): restituisce una serie di n elementi scelti uniformemente a caso all’interno di quelli della serie

Series.append([s1,s2,…]): concatena una o più serie a quella di partenza

Series.count(): restituisce il numero dei valori osservati che non siano il valore NaN

Ulteriori metodi, attributi e raffinamenti https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html

Page 23: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Il valore nullo Nan (None)Il valore Nan rappresenta, in una serie, un dato di cui non è stato possibile fare un’osservazione. Un dato mancante. É un vero e proprio oggetto del modulo numpy. Somme, differenze, moltiplicazioni, … con un valore Nan hanno come risultato il valore Nan.

>>> oss = range(5) >>> oss.append(None) >>> pandas.Series(oss) 0 0.0 1 1.0 2 2.0 3 3.0 4 4.0 5 NaN

sum(pandas.Series(oss)) nan >>> pandas.Series(oss).sum() 10.0 >>>

Page 24: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi

0. Lanciare uno script che stampi il vostro nome e cognome.

1. Creare un array i cui elementi siano gli interi che compongono il vostro numero di matricola. Sia X la lunghezza dell’array del punto 1.

2. Creare un array di X elementi equispaziati l’uno dall’altro di 1.5 3. Creare un array di X elementi equispaziati nell’intervallo tra 1 e 3 4. Ottenere gli array dati dalla somma tra l’array del punto 1 e quello del punto 2, e quello

dato dalla moltiplicazione tra punto 2 e punto 3. 5. Ottenere per ciascuno dei due array del punto 4, un array maschera che in corrispondenza

dei numeri divisibile per 3 abbia True, False altrimenti. 6. Ottenere le Serie corrispondenti ai 3 array di partenza. 7. Concatenare le tre Serie e visualizzare il risultato.

Page 25: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi

Creare la Serie gol in modo che le etichette siano numeri dall’1 al 23. I dati raccolti siano numeri interi tra 0 e 30 scelti casualmente. La Serie rappresenta i gol segnati da ciascun giocatore di una società calcistica nella stagione appena passata. L’etichetta corrisponde al numero di maglia del giocatore.

Ottenere: I gol segnati dal capocannoniere I primi 5 cannonieri, e gli ultimi 5 Chi non ha mai fatto gol durante l’anno La statistica per i soli titolari, numeri dall’1 all’11, e per le sole riserve La statistica per i soli attaccanti (numeri dal’9 all’11) I gol segnati dai giocatori coi numeri di maglia 5,9,10,14 (somma) Chi ha segnato più di 10 gol e chi ha segnato esattamente 10 gol Riordinare la serie in ordine di gol effettuati Riordinare la serie in ordine inverso di numero di maglia

Page 26: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Laboratorio Statistica e Analisi Dati Lezione 2 - Dataframe

Luca Cermenati

2017/2018

Page 27: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Argomenti

• Dataframe • File csv • Creare un Dataframe partendo da un file cdv • Fattori • Accesso a un Dataframe • Sottodataframe

Page 28: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

DataframeStruttura dati tabellare con assi etichettati, le cui colonne possono contenere dati eterogenei da colonna da colonna.

>>> dataframe_esempio

Cognome Eta Citta Nome Mario Rossi 30.0 Milano Sergio Bianchi 34.0 Roma Pasquale Verdi 29.0 Palermo Antonio Gialli 30.0 Roma Francesco Neri 27.0 Milano Luca Arancioni 15.0 Trento Marco Azzurri NaN Palermo Mattia Blu 27.0 Torino Alessio Violi 31.0 Genova Alessia NaN 24.0 Roma Antonia Verde 30.0 Genova Carla Bianco 31.0 MIlano Rosa Rosi 24.0 Aosta Alessia Azzurro 33.0 NaN

Page 29: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Il Dataframe può essere visto come un insieme di serie aventi lo stesso indice accostate una all’altra. Rappresenta quindi l’osservazione di diversi caratteri su una certa popolazione di individui.

>>> dataframe_film paese anno durata genere voto titolo Guerre Stellari USA 1977.0 121.0 Fantascienza 4.0 L’impero colpisce ancora USA 1980.0 124.0 Fantascienza 4.0 Il ritorno dello Jedi USA 1983.0 NaN Fantascienza 3.5 Profondo Rosso ITA 1975.0 NaN Horror 3.5 Le ali della liberta USA 1994.0 142.0 Drammatico 5.0 Il cavaliere oscuro USA 2008.0 152.0 Azione 4.0 City Of God BRA 2002.0 130.0 Drammatico 3.5 Il padrino USA 1972.0 175.0 Drammatico 4.5 Pulp Fiction USA 1994.0 154.0 Drammatico 4.0 Fight Club USA 1999.0 139.0 Thriller 4.0 Forrest Gump USA 1994.0 142.0 Commedia 4.0 Il pianista FRA 2002.0 150.0 Drammatico 3.0 Matrix USA 1999.0 NaN Azione 3.0 La vita e bella ITA 1997.0 120.0 Drammatico 4.5 Lawrence D’Arabia UK 1962.0 219.0 Avventura 3.0

Page 30: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

File .csvUn file csv (comma-separated value) è un file di testo utilizzato per rappresentare una tabella di dati e favorirne l’importazione e l’esportazione. Un file .csv è scritto nella forma:

Attraverso il modulo csv è possibile utilizzare dati contenuti in un file .csv all’interno di un programma python.

titolo,paese,anno,durata,genere,voto

Guerre Stellari,USA,1977,121,Fantascienza,4 L’impero colpisce ancora,USA,1980,124,Fantascienza,4 Il ritorno dello Jedi,USA,1983,,Fantascienza,3.5 Profondo Rosso,ITA,1975,,Horror,3.5 Le ali della liberta,USA,1994,142,Drammatico,5 Il cavaliere oscuro,USA,2008,152,Azione,4 City Of God,BRA,2002,130,Drammatico,3.5 Il padrino,USA,1972,175,Drammatico,4.5 Pulp Fiction,USA,1994,154,Drammatico,4 Fight Club,USA,1999,139,Thriller,4 Forrest Gump,USA,1994,142,Commedia,4 Il pianista,FRA,2002,150,Drammatico,3

Page 31: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

pandas.DataFrame.from_csv( ‘file.cvs’, … )Restituisce un dataframe creato leggendo i dati dal file cvs passato come parametro

>>> dataframe_film = pd.DataFrame.from_csv('film.csv') >>> dataframe_film paese anno durata genere voto titolo Guerre Stellari USA 1977.0 121.0 Fantascienza 4.0 L’impero colpisce ancora USA 1980.0 124.0 Fantascienza 4.0 Il ritorno dello Jedi USA 1983.0 NaN Fantascienza 3.5 Profondo Rosso ITA 1975.0 NaN Horror 3.5 Le ali della liberta USA 1994.0 142.0 Drammatico 5.0 Il cavaliere oscuro USA 2008.0 152.0 Azione 4.0 City Of God BRA 2002.0 130.0 Drammatico 3.5 Il padrino USA 1972.0 175.0 Drammatico 4.5 Pulp Fiction USA 1994.0 154.0 Drammatico 4.0 Fight Club USA 1999.0 139.0 Thriller 4.0 Forrest Gump USA 1994.0 142.0 Commedia 4.0 Il pianista FRA 2002.0 150.0 Drammatico 3.0 Matrix USA 1999.0 NaN Azione 3.0 La vita e bella ITA 1997.0 120.0 Drammatico 4.5

Page 32: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Accesso per colonne ai dati di un Dataframe>>> df_film['genere'] titolo Guerre Stellari Fantascienza L’impero colpisce ancora Fantascienza Il ritorno dello Jedi Fantascienza Profondo Rosso Horror Le ali della liberta Drammatico Il cavaliere oscuro Azione City Of God Drammatico Il padrino Drammatico Pulp Fiction Drammatico

>>> df_film[[‘genere','anno']] genere anno titolo Guerre Stellari Fantascienza 1977.0 L’impero colpisce ancora Fantascienza 1980.0 Il ritorno dello Jedi Fantascienza 1983.0 Profondo Rosso Horror 1975.0 Le ali della liberta Drammatico 1994.0 Il cavaliere oscuro Azione 2008.0 City Of God Drammatico 2002.0 Il padrino Drammatico 1972.0 Pulp Fiction Drammatico 1994.0

Page 33: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Tipo del risultato>>> type(df_film[['genere','anno']]) <class 'pandas.core.frame.DataFrame'> >>>

>>> type(df_film['genere']) <class 'pandas.core.series.Series'> >>>

Page 34: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Accesso per righe ai dati di un Dataframe

>>> df_film[15:20] paese anno durata genere voto titolo La citta incantata GIA 2001.0 125.0 Animazione 3.0 Interstellar USA 2014.0 169.0 Fantascienza 3.0 Nel nome del padre UK 1993.0 NaN Drammatico NaN Quasi Amici FRA 2011.0 112.0 Commedia 3.5 La finestra sul cortile NaN 1954.0 112.0 Thriller 4.0 >>>

>>> df_film['Interstellar':'Amici Miei'] paese anno durata genere voto titolo Interstellar USA 2014.0 169.0 Fantascienza 3.0 Nel nome del padre UK 1993.0 NaN Drammatico NaN Quasi Amici FRA 2011.0 112.0 Commedia 3.5 La finestra sul cortile NaN 1954.0 112.0 Thriller 4.0 Il Gladiatore UK 2000.0 170.0 Avventura 4.5 Amici Miei ITA 1975.0 NaN Commedia 3.0

Page 35: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

pandas.DataFrame.loc[ ] & pandas.DataFrame.iloc[ ] loc[‘nome_indice’] permette l’accesso ad una riga o più righe, tramite nome dell’indice. iloc[‘posizione’] permette l’accesso ad una o più righe, tramite la loro posizione.

>>> df_film.loc[['Amici Miei','Interstellar'],['durata','genere']] durata genere titolo Amici Miei NaN Commedia Interstellar 169.0 Fantascienza >>>

>>> df_film.iloc[[1,4,6],[2,3]] durata genere titolo L’impero colpisce ancora 124.0 Fantascienza Le ali della liberta 142.0 Drammatico City Of God 130.0 Drammatico >>>

Page 36: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

pandas.DataFrame.sort_values( by, ascending, na_position, …)

by: Stringa (o lista di stringhe) che si riferisce ad una colonna ascending: booleano (lista di), indica se l’ordine deve essere crescente True o decrescente False. Di default vale True. na_position: {‘first’, ‘last’} posizione dei valori mancanti. Default ‘last’

>>> df_film.sort_values(by='anno', ascending=False)[:5] paese anno durata genere voto titolo La la land USA 2016.0 128.0 Musical 4.0 Interstellar USA 2014.0 169.0 Fantascienza 3.0 Quasi Amici FRA 2011.0 112.0 Commedia 3.5 Basta che funzioni USA 2009.0 92.0 Commedia 3.0 Gran Torino USA 2008.0 116.0 Drammatico 4.0

Page 37: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Accesso diretto ad un valoreat[indice X indice] restituisce il valore di una singola cella, accedendo per indice iat[posizione X posizione] restituisce il valore di una singola cella, accedendo per posizione.

>>> df_film.at['Interstellar', 'anno'] 2014.0 >>>

>>> df_film.iat[10,0] 'USA' >>>

Page 38: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Accesso tramite un’espressione logica>>> df_film['anno'] > 1999 titolo Guerre Stellari False L’impero colpisce ancora False Il ritorno dello Jedi False Profondo Rosso False Le ali della liberta False Il cavaliere oscuro True City Of God True

. . .

>>> df_film[df_film['anno']>1999] paese anno durata genere voto titolo Il cavaliere oscuro USA 2008.0 152.0 Azione 4.0 City Of God BRA 2002.0 130.0 Drammatico 3.5 Il pianista FRA 2002.0 150.0 Drammatico 3.0 La citta incantata GIA 2001.0 125.0 Animazione 3.0 Interstellar USA 2014.0 169.0 Fantascienza 3.0 Quasi Amici FRA 2011.0 112.0 Commedia 3.5 Il Gladiatore UK 2000.0 170.0 Avventura 4.5 A beautiful mind USA 2001.0 130.0 Biografico 3.5 La mala educacion SPA 2004.0 164.0 Drammatico 3.0 La la land USA 2016.0 128.0 Musical 4.0 >>>

Page 39: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Dati quantitativi e qualitativiDati quantitativi: Se l’esito della misurazione è una quantità numericaDati qualitativi: L’esito della misurazione è un’etichetta, scelta all’interno di un determinato insieme

Nell’esempio precedente del DataFrame Film,Durata è un dato quantitativo.Paese è un dato qualitativo.

Page 40: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Metodi della classe DataframeDataFrame.append( ): permette di estendere il dataframe

DataFrame.drop_duplicates( ): restituisce un dataframe senza righe duplicate

DataFrame.dropna( ): Eliminare i valori Nan da un dataframe. Ha vari parametri che permettono di settare come eliminare i valori Nan

DataFrame.max( ), DataFrame.min( )

DataFrame.mean( ), DataFrame.median( )

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html

Pandas.crosstab( … ) : Per il calcolo delle frequenze.

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.crosstab.html

Page 41: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

EserciziScaricare il file dati-ospedali.csv dalla pagina del laboratorio. Attenzione i nomi degli attributi potrebbero risultare leggermente diversi da quelli specificati nel testo dell’esercizio. Esiste un metodo della classe DataFrame per estrarre il nome degli attributi, in quel modo avrete sicuramente quello corretto.

1. Visualizzare il dataframe. 2. Calcolare le frequenze assolute e relative dell’attributo Regione. 3. Estrarre un sottodataframe contenente le colonne Nome ( attributo Denominazione Str.

Pubblica New) e Numero di medici (attributo Medici.SSN) degli ospedali aventi meno di 200 medici.

4. Visualizzare il nome degli ospedali della regione Lombardia 5. Ottenere la singola serie relativa all’attributo Regione e calcolarne la frequenza assoluta

e relativa senza usare il metodo crosstab. 6. Calcolare il numero medio di ingegneri (Ingegneri.SSN) presenti negli ospedali campani. 7. Calcolare la varianza del numero di assistenti sociali (Assistenti.sociali.SSN) negli

ospedali con più di 400 medici. 8. Qual è la regione con più ospedali? E l’ospedale con meno medici? 9. Visualizzare in ordine alfabetico il nome dei primi 10 ospedali per numero di medici. 10. Visualizzare la riga relativa all’ospedale con il maggior numero di ingegneri 11. Visualizzare il numero di quegli ospedali che hanno dichiarato il numero di odontoiatri

(Odontoiatri.SSN). 12. Calcolare le frequenze assolute per l’attributo Odontoiatri.SSN. Trasformare questo

risultato in frequenze relative.

Page 42: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi da Tema d’esame

Scaricare il file dati-ospedali.csv dalla pagina del laboratorio

1. Quanti sono gli ospedali presenti nel dataset? 2. Quanti sono in tutto gli attributi del dataset che descrivono un ospedale? 3. Calcolare media, varianza e coefficiente di variazione degli attributi Medici.SSN

e Farmacisti.SSN 4. Notate una relazione tra il numero di medici e il numero di farmacisti presenti

in un ospedale? In caso affermativo, di quale tipo di relazione si tratta? Supportate la vostra risposta con il valore di un indice numerico.

5. Calcolare le frequenze assolute congiunte degli attributi Avvocati.SSN e grande.struttura. Utilizzate i valori della tabella per calcolare la tabella delle frequenze assolute marginali del numero di avvocati e quella della tipologia di ospedale.

6. Alla conferenza stampa ho rilasciato la seguente dichiarazione: «Abbiamo a disposizione un campione di ospedali italiani sulla base del quale abbiamo stimato che il numero medio di ingegneri che lavorano in un ospedale sul territorio italiano è circa ..... , con una deviazione standard di ..... ingegneri.» Completare gli spazi.

Page 43: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Laboratorio Statistica e Analisi Dati Lezione 3 - Strutture di controllo e funzioni

Luca Cermenati

2017/2018

Page 44: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Argomenti

• Istruzione if • Ciclo while • Ciclo for • List comprehension • Funzioni • Funzioni lambda

Page 45: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

IF If <espressione logica 1> istruzione1

elif <espressione logica 2> istruzione 2

… … else:

istruzione n

>>> if x<0 : ... print('numero negativo') ... elif x==0: ... print('zero') ... else: ... print('numero positivo') ...

Page 46: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

IFif(True): print('ramo if') print('ramo if') print('istruzione successiva’)

>>> ramo if ramo if istruzione successiva

I rami elif ed else non sono obbligatori. Per ogni istruzione che controlla il flusso del programma è obbligatorio utilizzare l’indentazione nella maniere corretta. É l’indentazione che definisce la struttura del programma.

if(False): print('ramo if') print('ramo if') print('istruzione successiva’)

>>> istruzione successiva

Page 47: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Ciclo whilewhile <espressione logica> :

istruzione

<espressione logica> che se vera fa ripetere il ciclo

>>> a=0 >>> while a<5: ... print a ... a=a+1 ... 0 1 2 3 4 >>>

Page 48: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Ciclo forl’ istruzione for, in python, itera sugli elementi di una sequenza (ad esempio una lista, o un array) e non su una successione aritmetica.

>>> for x in numpy.arange(5): ... x % 2 == 0 ... True False True False True

for <var> in <sequenza> :f ( <var> )

Page 49: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

List comprehensionsMappare una lista in un’altra lista applicando una funzione ad ognuno degli elementi della lista.

Trasformare una lista in un’altra lista seguendo una certa regola.

[ f(x) for x in li ]

Si scrive all’interno delle parentesi quadre la regola con cui eseguire il mapping (trasformazione)

li è la lista che voglio mappare. f(x) è la regola x è il nome della variabile di supporto.

Python esegue un ciclo su li, assegnando alla variabile x, ad ogni passo, temporaneamente, il valore dell’elemento corrente all’interno della lista. Ad ogni passo inoltre, applica la funzione f(x) alla variabile x (al valore che contiene al momento) ed esegue append di f(x) sulla lista risultato. Al termine del ciclo esegue return della lista risultato. La lista originale non viene modificata.

Page 50: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

>>> lista_partenza = range(10) >>> lista_arrivo = [ el*el for el in lista_partenza ] >>> >>> lista_arrivo [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Page 51: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

>>> [ x if x%2 == 0 else None for x in range(10)] [0, None, 2, None, 4, None, 6, None, 8, None]

>>> [ x for x in range(10) if x%2 == 0] [0, 2, 4, 6, 8]

List comprehensions + filtro

Page 52: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Tempo impiegato

>>> lista_partenza = range(10) >>> lista_arrivo = [ el*el for el in lista_partenza ] >>> >>> lista_arrivo [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> a=numpy.arange(10) >>> b=a*a >>> b array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])

Ciclo for + if > list comprehension > operazione con array

Page 53: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Definire una funzionedef nome_della_funzione ( param, … , param) :

Se la funzione specifica l’istruzione return allora la funzione ritornerà il valore specificato, altrimenti verrà restituito il valore nullo None. Ogni funzione restituisce un valore. Non va specificato il tipo del valore di ritorno.

>>> def f(a,b): ... return a+b ... >>> f(1,4) 5 >>>

Page 54: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Funzioni lambdaDefinire ed usare funzioni al volo. Non hanno nome, vengono chiamate tramite la variabile a cui sono assegnate o utilizzate al momento.

Comode per compattare il codice, quando ho bisogno della funzione al volo e devo servirmene una volta sola. Posso utilizzarle come parametro per un metodo.

>>> f = lambda x:x*2 >>> f(3) 6 >>> >>> (lambda x: x%2==0)(5) False >>>

Page 55: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

List.sort ( key=lambda x:… )

l è una lista di liste. Voglio riordinare a in base al solo elemento di posizione 1

>>> l=[[1,2,3],[4,1,3],[2,4,7]] >>> l.sort(key=lambda x:x[1]) >>> l [[4, 1, 3], [1, 2, 3], [2, 4, 7]]

>>> l2=range(10) >>> l2.sort(key=lambda x:x%3) >>> l2 [0, 3, 6, 9, 1, 4, 7, 2, 5, 8]

Page 56: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

apply(f,….)Il metodo apply permette di specificare quale funzione applicare ad ogni valore presente in un dataframe o una serie.

>>> film = d >>> film.apply(lambda x:x*2) paese anno durata titolo Guerre Stellari USAUSA 3954.0 242.0 L’impero colpisce ancora USAUSA 3960.0 248.0 Il ritorno dello Jedi USAUSA 3966.0 NaN Profondo Rosso ITAITA 3950.0 NaN Le ali della liberta USAUSA 3988.0 284.0 Il cavaliere oscuro USAUSA 4016.0 304.0

Page 57: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

apply(f,….)Il metodo apply permette di specificare quale funzione applicare ad ogni valore presente in un dataframe o una serie.

>>> film['voto'] = film['voto'].apply(lambda x:x*2) >>> film paese anno durata genere voto titolo Guerre Stellari USA 1977.0 121.0 Fantascienza 8.0 L’impero colpisce ancora USA 1980.0 124.0 Fantascienza 8.0 Il ritorno dello Jedi USA 1983.0 NaN Fantascienza 7.0 Profondo Rosso ITA 1975.0 NaN Horror 7.0 Le ali della liberta USA 1994.0 142.0 Drammatico 10.0 Il cavaliere oscuro USA 2008.0 152.0 Azione 8.0 City Of God BRA 2002.0 130.0 Drammatico 7.0 Il padrino USA 1972.0 175.0 Drammatico 9.0

Page 58: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi

Scrivere una funzione che:

1. Data una lista di interi, fornisce in output un “istogramma” di * basato su questi numeri. Ad esempio se la lista in ingresso è [ 2 , 4, 10 ] l’output deve essere ** **** ********** 2. Calcoli la lunghezza di una stringa passata come parametro. (non usare len) 3. Data una stringa, la restituisca al contrario. “Ciao” —> “oiaC” Se la stringa è un palindromo lo deve comunicare, oltre che restituirla. Ragionare sul tipo di ritorno. 4. Data una lista di stringhe, restituisca una lista di interi per cui l’elemento i-esimo rappresenti la lunghezza della stringa in posizione i passata in ingresso. 5. Restituisca il massimo di una lista di numeri 6. Data una stringa in ingresso restituisca la frequenza di ogni lettera. (Non usare Serie o Dataframe) 7. Dato un intero in ingresso restituisca la lista dei suoi divisori.

Page 59: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

EserciziImplementare una nostra versione delle funzioni che calcolano:

1.Media aritmetica 2.Moda 3.Varianza 4.Covarianza 5.Coefficiente di correlazione 6.Frequenza Assoluta 7.Frequenza Relativa ( utilizzarla per costruire un ulteriore versione del calcolo della media ) 8.Frequenze cumulate 9.Indice di Gini e indice di Gini normalizzato 10.Indice di entropia ed entropia normalizzata 11.Quantile 12. Coefficiente di variazione

Alle funzioni deve essere passato un DataFrame e le altre informazioni necessarie. (ad esempio per la media aritmetica servirà il nome della colonna sulla quale calcolare la media. E poi controllare che su quella colonna si possa applicare la media aritmetica.) Anche il tipo di ritorno deve essere scelto in base al compito della funzione.

Page 60: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Laboratorio Statistica e Analisi Dati Lezione 4 - Disegnare Grafici

Luca Cermenati

2017/2018

Page 61: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Argomenti

• Grafico di dispersione • Diagramma a barre • Istogrammi • Plot della cumulativa empirica • Outlier e range interquartile • Boxplot • qqplot

• Barplot congiunto • Pareto • Affiancare grafici

Page 62: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

MatplotlibMatplotlib è una libreria python per la generazione di grafici 2D. La collezione di funzioni pyplot permette di generare semplicemente istogrammi, grafici a barre, grafici a torta, … in modo da poter valutare i dati a colpo d’occhio.

import matplotlib.pyplot as plt plt.plot(…) plt.show()

plot è la più semplice funzione per creare un grafico.

Page 63: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

plot(x,y)Con x ed y array della stessa dimensione, restituisce un grafico collegando i punti individuati dalle coppie (x,y)

import matplotlib.pyplot as plt import numpy x=numpy.arange(10) y=x*x plt.plot(x,y) plt.show()

Page 64: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

x=numpy.arange(10) y=x*x x1=numpy.linspace(0,1,10) plt.plot(x,y,'r--',x1,y,'g^') plt.xlabel('Asse X') plt.ylabel('Asse Y') plt.show()

Page 65: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

bar(x, height)x: sequenza di coordinate lungo l’asse x height: sequenza di altezze. La corrispondenza coordinata—altezza della barra è posizionale

plt.bar(Altezze.index,Altezze.get_values()) plt.show()

print(Altezze) Nome Altezza in cm Alessio 181 Ciccio 172 Giorgio 198

Page 66: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Diagramma a barre da una serie

df_ospedali = pandas.DataFrame.from_csv('dati-ospedali.csv', sep=';') freq_regione = df_ospedali[‘Regione'].value_counts()

freq_regione.plot.bar() plt.show()

Ad esempio per visualizzare delle frequenze.

Page 67: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Istogramma da una serie

In generale è possibile da una Serie generare un qualsiasi tipo di diagramma. La documentazione vi va in aiuto. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.plot.html#pandas.Series.plot

Quando devo approssimare una funzione continua di cui conosco solo alcuni punti.

QI=p.Series(data=valore_QI, index=id_individuo ) QI.plot.hist() plt.show()

Page 68: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Frequenza cumulativa empiricaLa funzione distribuiton.ECDF del modulo statmodels.api accetta in ingresso un insieme di osservazioni e restituisce la funzione cumulativa empirica corrispondente.

QI=p.Series(data=valore_QI, index=id_individuo) x=numpy.arange(60,100) ecdf = statmodels.api.distributions.ECDF(QI) plt.step(x,ecdf(x)) plt.show()

Page 69: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Frequenze Congiunte e marginaliLa funzione pandas.crosstab di default calcola la frequenza, passando invece i valori per i parametri riga (index) e per i parametri colonna (columns) restituisce la tabella delle frequenze congiunte.

mask=['<100' if z <100 else '>=100' for z in QI] QI_100=p.Series(data=mask, index=id_individuo) p.crosstab(index=QI_100, columns=QI[‘genere’])

M F

< 100 31 27

>= 100 19 23

Page 70: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Frequenze Congiunte e marginali

QI_genere=p.crosstab(index=QI_100, columns=QI[‘genere’]) QI_genere.plot.bar() plt.show()

Page 71: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

BoxplotMetodo per rappresentare una distribuzione statistica, mettendo in evidenza quartili, mediana ed eventuali outlier.

Mediana (Q0.5)

Min

Max

Q 0.25

Q 0.75

Outlier

Gli outlier sono quei punti al di fuori dell’intervallo [Q1- k(Q3-Q1), Q3 + k(Q3 -Q1)] (verificare che sia intervallo corretto.)

Page 72: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Boxplotprova=range(0,80,1) prova.append(121) s=p.Series(prova) s.plot.box() plt.show()

Page 73: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

qqplotPermette di confrontare a colpo d’occhio se due Serie di dati hanno la stessa distribuzione.Permette anche di confermare se una Serie di dati ha una distribuzione nota.

import statsmodels.api as sm import numpy as np import pandas as pd import matplotlib.pyplot as plt

df_QI = pd.DataFrame.from_csv('QI.csv') m=df_QI[df_QI['sesso']=='M']['QI'] f=df_QI[df_QI[‘sesso']=='F']['QI']

sm.qqplot_2samples(m,f) plt.show()

Page 74: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

qqplot

Page 75: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Diagramma di ParetoInserisce nello stesso grafico un diagramma a barre delle frequenze relative ordinate in maniera decrescente ed un grafico a “linea spezzata” delle frequenze cumulate.

Dal diagramma di Pareto in esempio si vede facilmente come i primi due fattori corrispondano, da soli, all’80% della popolazione

Page 76: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Diagramma di Pareto#in d1 avrò 50 elementi estratti a caso secondo una distribuzione normale di media #25 e deviazione standard 1 d1=n.random.normal(25,1,50) nr25 = pd.Series(d1).apply(lambda x: int(x)) freq_ass = nr25.value_counts() freq_rel = freq_ass/freq_ass.sum()

from paretochart import pareto

pareto(freq_rel, freq_rel.index) plt.show()

Page 77: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

import matplotlib.pyplot as plt import numpy

x=numpy.linspace(0,5,100) y0= x**2 y1= 5*x

fig, axs = plt.subplots(1, 2, sharey=True) fig.subplots_adjust(wspace=0.2)

axs[0].plot(x,y0) axs[0].set_xlim(0,4) axs[1].plot(x,y1) axs[1].set_xlim(0,5)

plt.show()

Affiancare graficiCon suplots(n_righe, n_col, sharex=True/False, sharey=True/False)

wspace

https://matplotlib.org/devdocs/api/axes_api.html

Page 78: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi

Scaricare e importare il dataframe capelli.csv

1.Calcolare coefficiente di correlazione tra lunghezza capelli e le altre misure. 2.Stampare i relativi grafici di dispersione. Confermano il risultato numerico? 3.Stampare affiancati boxplot istogramma della colonna spesaShampoMensile. Cosa li Accomuna?

Page 79: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi da tema d’esame

Scaricare e importare in un dataframe il file ospedali.csv

1. Visualizzate la funzione cumulativa empirica e un barplot dell’attributo Medici.SSN

2. NMedici e NFarmacisti sono distribuiti secondo la stessa distribuzione?

3. Visualizzare il diagramma di Pareto della serie contenente i dati che rappresentano il NMedici per Regione.

4. Visualizzare il grafico a barre delle frequenze assolute congiunte di Avvocati.SSN e grande struttura

Page 80: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi

Scaricare e importare il dataset DatiRoc.csv

1. Scrivere due funzioni (sens e spec) con parametro soglia, che restituiscano rispettivamente sensibility e specificity di una Serie ad una data soglia.

2. Generare il grafico della curva ROC dei dati presenti in DatiRoc.csv 3. Quale valore di soglia utilizzeresti?

Page 81: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Laboratorio Statistica e Analisi Dati Lezione 5 - Variabili Aleatorie e Distribuzioni

Luca Cermenati

2017/2018

Page 82: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Argomenti

• Variabili aleatorie, funzione di ripartizione e densità • Scipy • Esempio con variabile aleatoria discreta • Esempio con variabile aleatoria continua

Page 83: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Variabili AleatorieUna Variabile Aleatoria è una variabile che può assumere valori differenti in funzione ad un evento non deterministico.

Evento: Viene lanciata tre volte una moneta. Variabile Aleatoria: Numero di volte in cui è uscito testa.

Page 84: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Funzione di ripartizioneSia X una variabile aleatoria. Si chiama funzione di ripartizione di X la funzione F che associa ad ogni numero reale x la probabilità che X sia minore o uguale ad x [P(X<=x)]

Per l’esempio precedente della moneta lanciata tre volte, la funzione di ripartizione Fx(x) vale:

0 if x<0 1/8 if 0 <= x < 1 1/2 if 1 <= x <= 2 7/8 if 2 <= x < 3

1 if x > 3

Page 85: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Funzione di densità o di massaSia X una variabile aleatoria. Si chiama funzione di densità di X la funzione F che associa ad ogni numero reale x la probabilità che X sia uguale ad x [P(X=x)]

Per l’esempio precedente della moneta lanciata tre volte, la funzione di densità px(x) vale

1/8 if x in (0,3) 3/8 if x in (1,2)

0 if x not in (0,1,2,3,4)

0

0,1

0,2

0,3

0,4

0 1 2 3

Page 86: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Scipy.statsIl modulo scipy mette a disposizione delle funzioni in grado di:

- Generare numeri casuali. - Restituire il valore della funzione di ripartizione valutata in un punto. - Restituire il valore della densità valutata in un punto. - Restituire il quantile di probabilità.

Per tutte le distribuzioni notevoli, sia di tipo uniforme che di tipo continuo.

https://docs.scipy.org/doc/scipy/reference/stats.html

Page 87: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

In generale avremo

Scipy.stats.<nome_distribuzione>.rvs ( size=z, … ): restituisce un array di dimensione z con valori scelti casualmente secondo la distribuzione scelta.

Scipy.stats.<nome_distribuzione>.pdf (x, …): restituisce il valore della probability density function (pdf) valutata in x. (.pmf per le discrete)

Scipy.stats.<nome_distribuzione>.cdf (x, …): restituisce il valore della cumulative distribuition function (cdf) valutata in x.

Scipy.stats.<nome_distribuzione>.ppf (q, …): restituisce il valore del quantile relativo al valore q.

Page 88: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Uniforme discretaNel modulo scipy la funzione uniforme è solamente continua. Questo significa che nella generazione di numeri casuali otterrò dati di tipo float. Occorre estrarre la parte intera per ottenere un risultato uniforme discreto.

import numpy from scipy.stats import uniform

x=uniform.rvs(loc = 2, scale=12, size=30) x=numpy.array([int(y) for y in x])

type(x[1]) >>>numpy.int64

x >>>array([ 4, 8, 8, 3, 11, 9, 13, 9, 3, 3, 2, 4, 2, 11, 5, 3, 7,…])

Page 89: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Uniforme discreta - lancio di un dado

#Probabilità di ottenere 0 dal lancio di un dado uniform.pdf(0,loc=1,scale=6) >>> 0.0

#Probabilità di ottenere 6 dal lancio di un dado uniform.pdf(6,loc=1,scale=6) >>> 0.16666666666666666

Page 90: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Uniforme discreta - lancio di un dado

#Probabilità di ottenere un numero <5 uniform.cdf(5, loc=1, scale=6) >>> 0.6666666666666666

#Probabilità di ottenere un numero >=5 1 - uniform.cdf(5, loc=1, scale=6) >>> 0.3333333333333333

#Probabilità di ottenere un numero compreso tra 3 e 5 uniform.cdf(6, loc=1, scale=6) - uniform.cdf(3, loc=1, scale=6) >>> 0.5

Page 91: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Uniforme discreta - lancio di un dado

#Quale valore corrisponde al primo quartile? uniform.ppf(0.25, loc=1, scale=6) >>> 2.5

#Quale valore corrisponde al terzo quartile? uniform.ppf(0.75, loc=1, scale=6) >>> 5.5

Page 92: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Gaussiana o NormaleI valori del QI contenuti nella Serie qi sono sono distribuiti normalmente?

from scipy.stats import norm import statsmodels.api as sm import matplotlib.pyplot as plt

sm.qqplot_2samples(qi, norm.rvs(loc=0, scale=1, size=qi.count())) plt.show()

Page 93: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

AttenzioneNella normale i valori loc e scale, che servono appunto per scalare la distribuzione, rappresentano loc=media e scale=varianza (Non è così per la uniforme). Per ogni distribuzione è quindi importante conoscere e capire a cosa si riferiscono i due parametri.

Page 94: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizi1. Il comando boxplot considera di default outlier tutti i valori al di fuori dell’intervallo

[Q1 −1.5·(Q3 −Q1),Q3 +1.5·(Q3 −Q1)],

dove Q1 e Q3 sono il primo ed il terzo quartile rispettivamente. Scrivere una funzione che prenda come input un vettore di numeri, generi un boxplot dei valori passati e restituisca la tabella delle frequenze assolute degli outlier.

2. Implementare le quattro funzioni rvs , pdf, cdf e ppf della distribuzione uniforme discreta in modo analogo a quanto visto per le altre distribuzioni.

Page 95: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

3. Un’urna contiene 10 palline di cui 4 bianche e 6 nere. Si eseguono 5 estrazioni con reimmissione

. 3.1  Tracciare grafico della funzione massa di probabilità della variabile casuale X = "numero di palline bianche estratte"

. 3.2  Calcolare la probabilità di estrarre 2 palline bianche

. 3.3  Calcolare la probabilità di estrarre al più 2 palline bianche

. 3.4  Calcolare la probabilità di estrarre almeno 2 palline bianche

. 3.5  Qual è il numero minimo x tale che la probabilità di estrarre al più x palline bianche sia almeno 0.8?

Page 96: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

4. Si eseguono 10 estrazioni senza reimmissione da un’urna

4.1 Tracciare il grafico della funzione massa di probabilità della variabile casuale X = "numero di palline bianche estratte" nei seguenti casi:

4.1.1 l’urna contenente 100 palline di cui 20 bianche e le restanti nere 4.1.2 l’urna contiene 100 palline di cui 2 bianche e le restanti nere

4.2 Tracciare il grafico della funzione massa di probabilità della variabile casuale X nel caso dell’urna 1 se si eseguono 25 estrazioni

4.3 Consideriamo l’urna 1 e n = 10 estrazioni. Si aumenti il numero totale M di palline nell’urna mantenendo uguale a 0.2 la frazione di palline bianche. Per ciascun valore di M confrontare graficamente la distribuzione di probabilità del numero di palline bianche estratte nel caso di estrazioni con e senza reimmissione. Provare con 20, 40 e 200 palline bianche

5. Calcolare la probabilità di ottenere più teste che croci lanciando 7 volte una moneta truccata con probabilità di avere croce pari a 0.45

6. Calcolare la probabilità di avere almeno 3 sei lanciando 5 dadi a 12 facce

7. Calcolare la probabilità di estrarre 20 euro da un sacco contenente 47 monete da 1 centesimo e 53 da 2 euro estraendo (uniformemente) a caso 10 monete senza reinserirle

Page 97: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

8.Un grammo di uranio emette mediamente 2152 particelle α ogni millisecondo. Qual è con buona approssimazione la probabilità che un grammo di uranio emetta al più 2000 particelle α in un millisecondo?

9. Si generi un campione di 10000 valori estratti da una distribuzione geometrica di parametro p = 0.5

9.1 Si confrontino attraverso un qqplot la distribuzione empirica dei dati appena ottenuta e quella teorica

10. Un uomo si risveglia in mutande nel deserto. Dopo ogni minuto ha una probabilità del 3% di perdere conoscenza per via delle condizioni estreme. Calcolare la probabilità che l’uomo sopravviva alle prime due ore e la probabilità che l’uomo muoia dopo esattamente un quarto d’ora

Page 98: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Laboratorio Statistica e Analisi Dati Lezione 6 - Esercizi di Riepilogo

Luca Cermenati

2017/2018

Page 99: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

pandas.read_csv()L’uso del metodo from_csv della classe DataFrame costringe ad utilizzare come indice una delle colonne. È possibile ovviare a questo problema utilizzando il metodo read_csv() del modulo pandas che restituisce anch’esso un dataframe costruito da un file.csv. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

import pandas >>> pandas.read_csv('regolarita-mensile-tgv.csv',sep=';') Data Direttrice Partenza \ 0 2012-12 Sud-Est LE CREUSOT MONTCEAU MONTCHANIN 1 2012-12 Sud-Est PARIS LYON 2 2012-12 Sud-Est MARSEILLE ST CHARLES 3 2012-12 Atlantique PARIS MONTPARNASSE

pandas.DataFrame.from_csv('regolarita-mensile-tgv.csv',sep=';') Direttrice Partenza \ Data 2012-12-01 Sud-Est LE CREUSOT MONTCEAU MONTCHANIN 2012-12-01 Sud-Est PARIS LYON 2012-12-01 Sud-Est MARSEILLE ST CHARLES

Page 100: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizio 0

1. Sia X una variabile aleatoria bernulliana con parametro p=0.1. Tracciare il grafico della funzione massa di probabilità.

Page 101: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizio 1

Scaricare dalla pagina del corso il file regolarita-mensile-tgv.csv.

1. Importare i dati e dire quanti casi sono presenti nel dataset. 2. Consideriamo il carattere direttrice che indica la zona lungo la quale circolano

i treni 1. Quante sono le direttrici di circolazione? 2. Calcolare la tabella delle frequenze relative dei treni lungo le diverse

direttrici. 3. Mostrare un grafico adeguato per riassumere la distribuzione delle

zone di circolazione. 3. Consideriamo il carattere NumeroTreniAnnullati

1. Calcolare la tabella delle frequenze assolute del numero di treni annullati 2. In totale, quanti sono stati i treni annullati? 3. Mostrare un grafico adeguato per riassumere la distribuzione del

numero di treni annullati. 4. L’informazione NumeroTreniAnnullati è presente per tutte le tratte? 5. In media quanti sono i treni annullati per tratta? 6. Calcolare la deviazione standard del numero di treni annullati.

Page 102: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizio 1

4. In questa sezione vogliamo studiare una possibile relazione tra numero di treni annullati e numero di treni programmati.

1. Visualizzare il diagramma di dispersione per gli attributi NumeroTreniAnnullati e NumeroTreniProgrammati.

2. Calcolare il coefficiente di correlazione tra i due attributi. Commentare. 3. Notate una relazione tra i due attributi? Giustificare la risposta.

5. Prendiamo in considerazione l’indice Regolarità. 1. Visualizzare l’istogramma. 2. Determinare la mediana. 3. Determinare il decimo percentile. 4. Tracciare il diagramma di dispersione per le seguenti coppie di caratteri

1. IndiceRegolarità, PercentualeTreniCircolanti 2. IndiceRegolarità, PercentualeTreniAnnullati 3. IndiceRegolarità, PercentualeTreniInRitardo

5. É facile dedurre che IndiceRegolarità è derivato da un altro carattere presente nel dataset. Quale? E con quale relazione?

6. Per ciascuna delle 4 direttrici stampare boxplot e istogrammi relativi al carattere IndiceRegolarità.

Page 103: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizio 2

In questo esercizio considereremo solamente il sottoinsieme del dataset relativo alle tratte presenti nelle zone di circolazione Nord e SudEst (per "tratta" intendiamo la linea che collega una stazione di Partenza con una di Arrivo).

1. Quante sono in tutto le tratte presenti su queste direttrici?

2. Calcolare i valori minimo (nmin) e massimo (nmax) di treni circolanti sulle tratte appartenenti alle due direttrici.

Page 104: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizio 3La carta dei servizi delle ferrovie garantisce agli utenti pendolari che viaggiano tra una città A e una città B (quindi sulle tratte da A verso B e da B verso A) un rimborso di parte dell’abbonamento. Tale rimborso viene effettuato se dal dataset utilizzato nei punti precedenti emerge che l’IndiceRegolarita è risultato inferiore a 0.85 almeno nel 10% dei casi sulle due tratte considerate. Per facilitare i calcoli che devono essere fatti dall’ufficio rimborsi, il programmatore della società ha pensato di inserire nel dataset una nuova colonna, denominata RisarcUtenti. Ha poi calcolato il valore di RisarcUtenti nel seguente modo:

IF IndiceRegolarita <0.85 THEN RisarcUtenti =1 ELSE RisarcUtenti=0.Si pensi alla riga precedente come ad un algoritmo e non come ad un comando in un particolare linguaggio di programmazione.

1. Calcolare la media del carattere RisarcUtente

Indichiamo con SN il collegamento STRASBOURG NANTES, in entrambe le direzioni

2. Quante volte l’indice di regolarità sull’asse SN ha assunto un valore minore di 0.85?

3. Calcolare la media del carattere RisarcUtente estesa al solo collegamento SN

4. Io viaggio regolarmente sull’asse SN, ho diritto al rimborso?

Page 105: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Esercizio 3

5. L’algorirmo usato dal programmatore per calcolare il carattere RisarcUtenti come si comporta nel caso sia mancante il valore IndiceDiRegolarità?

6. Ho ragione nel lamentarmi che utilizzare il contenuto del carattere RisarcUtenti per decidere se rimborsare potrebbe non essere onesto nel confronto degli utenti? Si giustifichi la risposta.

Page 106: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

Laboratorio Statistica e Analisi Dati Lezione 7 - Esercizi di Calcolo delle Probabilità

Luca Cermenati

2017/2018

Page 107: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

1. Si consideri l’esperimento casuale “Una moneta viene lanciata tre volte”. Qual è lo spazio degli esiti di questo esperimento casuale? Si scriva esplicitamente l’evento “Si ottengono più teste che croci”.

2. Si consideri il seguente esperimento casuale: “Un sistema è composto da 4 componenti, ciascuno dei quali funziona oppure è guasto. Si osserva lo stato dei componenti ottenendo il vettore (x1,x2,x3,x4) dove xi = 1 oppure 0 a seconda che il componente i-esimo funzioni oppure no.

1. Da quanti eventi è costituito lo spazio degli esiti? 2. Il sistema nel suo complesso funziona fintantoché entrambi i componenti 1 e 2

funzionano oppure fintantoché entrambi i componenti 3 e 4 funzionano.Specifica tutti gli esiti dell’evento “Il sistema funziona.”

3. Sia E l’evento “i componenti 1 e 3 sono guasti” quanti esiti contiene?

3. Si consideri il seguente esperimento casuale Si tirano due dadi. Si considerino gli eventi:E= La somma dei punteggi è dispariF=Il primo dado realizza 1G=La somma dei punteggi è 5

Si descrivano gli eventi E∩F, E∪F, F∩G, E∩Fc e E∩F∩G

4. Si dimostri che per uno spazio degli esiti S dotato di una probabilità P, per ogni evento E ed F appartenenti a S vale la disuguaglianza seguente: P(E∩F) >= P(E) + P(F) -1

Page 108: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

5. Un gruppo di 5 bambini e 10 bambine si trova in fila in ordine causale, cioè le 15! Permutazioni di bambini sono equiprobabili.

1. Qual è la probabilità che il quarto della fila sia un bambino? 2. E il dodicesimo? 3. Qual è la probabilità che un determinato bambino occupi la 1a posizione

6. In un comune ci sono 5 alberghi. Se 3 persone devono decidere in quale albergo pernottare, qual è la probabilità che capitino in 3 alberghi differenti? Che cosa stiamo assumendo non esplicitamente?

7. In una certa regione ci sono due produttori di microonde. Quelli della fabbrica A sono difettosi con probabilità 0.05, mentre quelli della fabbrica B con probabilità 0.01.Supponi di aver acquistato due apparecchi dalla stessa ditta che può essere la A o la B con probabilità del 50%. Se il primo microonde è difettoso, qual è la probabilità che sia difettoso anche il secondo?

8. Hai chiesto ad un vicino di annaffiare una pianta mentre ti trovi in vacanza. Senza acqua la pianta ha una probabilità di 0.8 di morire, mentre se annaffiata la probabilità si riduce a 0.15. La tua fiducia che il vicino si ricordi di annaffiarla è del 90%.

1. Qual è la probabilità che la pianta sia ancora viva al tuo ritorno? 2. Se fosse morta quale sarebbe la probabilità che il vicino si sia scordato di

annaffiarla?

Page 109: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

9. Una compagnia assicuratrice classifica i suoi clienti in tre fasce: basso, medio ed alto rischio. Le sue statistiche indicano che la probabilità per un cliente di una certa fascia di avere un incidente entro un anno sono rispettivamente 0.05, 0.15, 0.3. Se il 20% dei clienti sono a basso rischio, il 50% a medio rischio e i restanti ad alto rischio, che percentuale di clienti avrà mediamente incidenti in un lasso di un anno? Se un cliente non ha avuto incidenti nell’ultimo anno con che probabilità apparterrà alle tre fasce.

10. La media campionaria del salario annuale di un gruppo di 100 lavoratori impiegati nell’amministrazione di una grande azienda è di 130.000 dollari con una deviazione standard campionaria di 20.000 dollari. Se si prende una persona a caso da questo gruppo, cosa si può dire della probabilità che:

1. Il suo salario sia tra i 90.000 e i 170.000 dollari. 2. Il suo salario sia superiore ai 150.000 dollari.

11. Dimostrare che se X1 e X2 hanno la stessa distribuzione, allora Cov(X1+X2,X1-X2)=0.

12. Consideriamo una variabile aleatoria X che può assumere i valori 1,2, o 3.Sappiamo che p(1)=1/3 e p(2)=3/7.

1. Quanto vale p(3)? 2. Disegnare (a mano) il grafico di questa funzione di massa. 3. Disegnare (a mano) il grafico della relativa funzione di ripartizione.

Page 110: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

13. La funzione di ripartizione F(X) di X è definita come segue: Se ne tracci il grafico Quanto vale p(x>1/2)Quanto vale p(2 <= x <= 4) Quanto vale p(x <= 3)Quanto vale p(x==1)

Page 111: Laboratorio Statistica e Analisi Dati Lezione 1 ...cesari.di.unimi.it/teaching/SADcermenati.pdfLezione 1 - Introduzione e Strutture Per Analisi Dati Luca Cermenati 2017/2018. Programma

14. Dei prodotti vengono classificati in base ai loro difetti e alla fabbrica che li ha prodotti. Sia X1 il numero della fabbrica (esistono solo due fabbriche, la 1 e la 2) e sia X2 il numero di difetti per pezzo (che possono essere un massimo di 3). X1 e X2 si riferiscono ad un prodotto scelto a caso tra la totalità di quelli esistenti. La tabella seguente riporta la massa di probabilità congiunta delle due variabili X1 e X2.

1. Trovare le distribuzioni marginali di X1 e X2 2. Calcolare media e varianza di X2

x2x1 0 1 2 3

1 1/8 1/16 3/16 1/8

2 1/16 1/16 1/8 1/4