Laboratorio di Statistica e Analisi dei Dati Nicolò Campolongo Università degli Studi di Milano nicolo.campolongo@unimi.it November 9, 2018 Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 1 / 14
Lezione 2 1 File csv 2 DataFrame 3 Accesso ai DataFrame 4 Frequenze 5 Esercizi Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 2 / 14
File.csv Il formato csv (comma-separated value) è un formato utilizzato per rappresentare una tabella di dati e favorirne l importazione e l esportazione. Un file.csv è scritto nella seguente forma: 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 Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 3 / 14
Leggere csv La funzione read csv(..) di Pandas può essere utilizzata per leggere un file di formato csv. Tra i vari parametri che passiamo in input, uno particolarmente importante è sep, che indica il carattere utilizzato per separare le colonne (default è, ): >>> df film = pd.read csv( film.csv ) >>> df film titolo paese anno durata genere voto 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... Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 4 / 14
DataFrame In Pandas, un DataFrame è una struttura dati tabulare con assi etichettati, le cui colonne possono contenere dati eterogenei da colonna a colonna: >>> dataframe esempio Nome Cognome Eta Citta Tommaso Rossi 30.0 Milano Sergio Bianchi 34.0 Roma Pasquale Verdi 29.0 Palermo Antonio Gialli 30.0 Roma Il DataFrame può essere visto come un insieme di serie aventi lo stesso indice accostate una all altra. Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 5 / 14
Accesso colonne DataFrame - 1 Per conoscere le colonne di un DataFrame, possiamo invocare il comando df.columns, dove df è la variabile in cui abbiamo instanziato il DataFrame. Per accedere ad una colonna, dobbiamo specificarne il nome nel seguente modo: >>> df film[ genere ] titolo Il padrino Drammatico Pulp Fiction Drammatico Fight Club Thriller... Selezionando un unica colonna, in output viene restituita una Series. Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 6 / 14
Accesso colonne DataFrame - 2 Possiamo accedere allo stesso tempo a più colonne: >>> df film[[ paese, anno ]] titolo paese anno Il padrino USA 1972.0 Pulp Fiction USA 1994.0 Fight Club USA 1999.0... Selezionando più colonne, in output viene restituito un DataFrame. Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 7 / 14
Accesso righe DataFrame - 1 Per indice numerico: >>> df film[15:18] titolo paese anno durata genere voto 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 Quasi Amici FRA 2011.0 112.0 Commedia 3.5 Per valore dell indice (assumiamo che titolo sia l indice del DataFrame): >>> df film[ Il padrino : Fight Club ] titolo paese anno durata genere voto 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 Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 8 / 14
loc & iloc Così come per le Series, anche con i DataFrame possiamo usare loc ed iloc per l accesso ai dati: 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. Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 9 / 14
Accesso tramite un espressione logica >>> df film[ anno > 1998] titolo Il padrino False Pulp Fiction False Fight Club True Quasi Amici True >>> df film[df film[ anno ] > 1998] titolo paese anno durata genere voto Fight Club USA 1999.0 139.0 Thriller 4.0 Quasi Amici FRA 2011.0 112.0 Commedia 3.5 Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 10 / 14
Metodi dei DataFrame La classe DataFrame ha diversi metodi. Elenchiamo qui i più importanti: DataFrame.append(..): permette di estendere il DataFrame DataFrame.drop duplicates(..): restituisce un DataFrame senza righe duplicate DataFrame.dropna(..): Eliminare i valori Nan da un DataFrame DataFrame.sort values(..): permette di ordinare il DataFrame DataFrame.max(..), DataFrame.min(..), DataFrame.mean(..), DataFrame.median(..) Per la completa documentazione, si può utilizzare il comando help(pd.dataframe) oppure andare al seguente link: https://pandas.pydata.org/pandas-docs/stable/generated/ pandas.dataframe.html Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 11 / 14
Frequenze La frequenza assoluta indica il numero di volte che una data osservazione occorre in un campione. La frequenza relativa è un valore tra 0 e 1 che permette di valutare in maniera più efficace la frequenza di un osservazione. Si calcola dividendo la frequenza assoluta per il numero totale di casi. Per calcolare questa quantità in Pandas possiamo utilizzare la funzione value counts() che opera su una Series. In alternativa, si può utilizzare la funzione pd.crosstab che calcola queste frequenze in automatico restituendole in output in un DataFrame. Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 12 / 14
Esercizi Utilizzando il file dati-ospedali.csv dalla pagina del laboratorio: 1 Leggere il file e visualizzarlo in un DataFrame. 2 Calcolare le frequenze assolute e relative dell attributo Regione usando crosstab. 3 Ottenere la singola serie relativa all attributo Regione e calcolarne la frequenza assoluta e relativa senza usare crosstab. 4 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. 5 Visualizzare il nome degli ospedali della regione Lombardia 6 Calcolare il numero medio di ingegneri (Ingegneri SSN) presenti negli ospedali campani. Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 13 / 14
Esercizi 7 Calcolare la varianza del numero di assistenti sociali (Assistenti sociali SSN) negli ospedali con più di 400 medici. 8 Qual è l ospedale con meno medici? 9 Visualizzare in ordine alfabetico il nome dei primi 10 ospedali per numero di medici. 10 Visualizzare il numero degli ospedali che hanno dichiarato il numero di odontoiatri (per cui il valore è diverso da NaN) (Odontoiatri Universitari). 11 Visualizzare il numero degli ospedali che hanno dichiarato il numero di odontoiatri (Odontoiatri Universitari) e per cui questo numero è maggiore di 0. 12 Calcolare le frequenze assolute per l attributo Odontoiatri SSN. Trasformare questo risultato in frequenze relative. Nicolò Campolongo (UniMi) Lezione 1 November 9, 2018 14 / 14