Privacy Policy Python | Calcolare il Quantile di un campione con Numpy o Pandas | (Bonus: Riflessioni sul valore Mediano) | Andrea Ciufo

Python | Calcolare il Quantile di un campione con Numpy o Pandas | (Bonus: Riflessioni sul valore Mediano)

Calcolare un quantile sia con Numpy che con Pandas è un’operazione estremamente semplice in Python.

Questo post sui quantili è preliminare ad una considerazione più estesa che farò nei prossimi giorni sul Box Plot.

Una considerazione che devo fare perchè il valore descrittivo del Box Plot o “Diagrama a Scatola e Baffi” è spesso sottostimato, tendenzialmente le analisi si limitano ad osservare in un campione statistiche descrittive come la Media, Mediana e Deviazione Standard.

Cos’è il quantile?

Pensate adesso di avere un campione di dati, esteso a piacere e di ordinarlo dal più piccolo al più grande. Il quantile rappresenta una quantità q che permette di dividere la popolozione in due parti. Una parte contiene tutti gli elementi minori di q e la seconda tutti gli elementi maggiori. Il valore q dipende dalla percentuale di dati che si vuole dividere. Questo cosa significa?

Significa, ad esempio, che se su un campione di 100 automobili volete conoscere il 25% delle automobili più lente o che si rompono prima, avrete un set di dati in ordine crescente per velocità o tempo di vita. Successivamente, andrete a vedere il valore associato alla macchina che separa il 25% delle macchine più lente da quelle più veloci o che si rompono prima da quelle che durano di più.

Generalmente si parla di Quartile di una popolazione, (I,II,III, IV quartile, rispettivamente per q=0.25, 0.5, 0.75, 1) ma è anche possibile studiare o analizzare i Decili (q=0.1, q= 0.2, q=0.3 …) questo dipende essenzialmente dalle nostre esigenze.

Come calcolare un quantile con Numpy e Pandas?

Tornando a Python e i suoi due Framework per l’analisi dati.

Rispettivamente i due comandi necessari sono:

numpy.quantile(aqaxis=Noneout=Noneoverwrite_input=Falseinterpolation=’linear’keepdims=False)[source]

Dove a è l’array con i valori di cui si vuole conoscere il quantile e q quantifica il quantile oggetto di analisi.

DataFrame.quantile(q=0.5axis=0numeric_only=Trueinterpolation=’linear’)[source]

A differenza di Numpy in questo caso, con Pandas, i dati saranno forniti direttamente dal nostro DataFrame, quello che sarà importante specificare è q .

Anche in questo caso q rappresenta il quantile, inoltre possiamo decidere di calcolare il quantile sia per righe che per colonne. Di default sarà calcolato il quantile per righe quindi ogni singola colonna conterrà un campione di dati.

L’esempio che ho riportato in questo articolo si basa su due distribuzioni:

Queste due distribuzioni sono alla base di due esempi.

Nel primo sono stati creati due differenti array contenenti 1000 variabili aleatorie generate da una distribuzione uniforme e 1000 v.a generate da una distribuzione normale. Successivamente con la funzione di numpy è stato calcolato il primo e secondo quartile.

Determinazione del quartile con Python Numpy attraverso np.quantile()

Nel secondo invece gli array sono diventati i values di un oggetto dictonary, mentre le key sono state inserite manualmente. Successivamente da questo dictonary è stato creato il DataFrame e alla fine sono stati calcolati il primo e secondo quartile.

Determinazione del quartile con Python Pandas attraverso df.quantile()

Ovviamente sia utilizzando Numpy che Pandas si giunge al medesimo risultato.

Il Codice Riproducibile

Note varie

Una considerazione che va oltre Python la devo fare. Nasce dai miei studi durante il Master in Ingegneria delle Infrastrutture Viarie e Trasporti, precisamente dal corso di Teoria delle Infrastrutture Viarie.

Durante il corso effettuavamo delle analisi incidentali su determinate arterie, io ad esempio mi ero studiato tutto il tratto toscano dell’Aurelia.

Uno degli aspetti che ancora ricordo in merito agli eventi incidentali, e che la professoressa enfatizzava, è che questi esiti non sono ordinari. Anche se può apparire ovvio, in questo modo la nostra attenzione non era sul valore mediano delle variabili che stavamo investigando (Velocità, Raggi di Curvatura), ma sui valori estremi della popolazione, perchè tendenzialmente era li che si verificava l’evento incidentale.

Questa chiave di lettura mi ha fatto capire che in determinati ambienti i processi e le procedure non devono andare mediamente bene, ma quasi sempre bene ed il sistema deve essere in grado di tollerare e gestire anche eventi imprevisti legati ai quantili più estremi.

Grazie per aver letto l’articolo, se lo hai trovato utile condividilo su Twitter e Linkedin, le occasioni nascono dalle piccole cose
Se c’è qualche errore o miglioramento scrivimi pure.

Un abbraccione

Andrea

Lascia un commento