Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Machine Learning ed esplorazione statistica

Presentiamo un esempio di esplorazione dati con funzioni statistiche con lo scopo di tracciare una sorta di percorso che può essere utile all'inizio di qualsiasi analisi
Presentiamo un esempio di esplorazione dati con funzioni statistiche con lo scopo di tracciare una sorta di percorso che può essere utile all'inizio di qualsiasi analisi
Link copiato negli appunti

Affrontiamo un esempio di esplorazione dati con funzioni statistiche tentando di tracciare una sorta di percorso che può essere utile all'inizio di qualsiasi analisi. Per l'occasione creiamo noi un dataset, piuttosto piccolo in modo da poter verificare chiaramente quanto rileviamo.

Questi i nostri dati:

import pandas as pd
dict={
    'agente': [1,1,1,1,1,1,2,2,2,3,3],
    'ordine': [100,100,101,101,102,102,201,201,202,300,300],
    'prodotto': ['blu','green','blu','blu','green','red','blu','green','red','red','red'],
    'quantita':[3,6,3,5,7,2,1,1,1,8,9]
}
df=pd.DataFrame(dict)

Rappresentano degli ordini raccolti da agenti di commercio (indicati con i numeri identificativi 1, 2 e 3) in cui sono stati acquistati prodotti denominati 'blu', 'green' e 'red'. I campi ordine e quantita rappresentano, rispettivamente, il numero dell'ordine raccolto dall'agente e la quantità in cui uno specifico prodotto è stato richiesto.

Con df.head() diamo uno sguardo alla forma del dataset:

agente 	    ordine 	prodotto    quantita
0 	1 	     100 	  blu 	       3
1 	1 	     100 	  green        6
2 	1 	     101 	  blu          3
3 	1 	     101 	  blu 	       5
4 	1 	     102 	  green        7

Organizziamo le nostre ricerche nel seguente modo:

  • verifichiamo quantità di dati a disposizione ed elementi non nulli;
  • individuiamo valori unici per conoscere gli elementi che compongono alcuni insiemi interni al dataset;
  • rileviamo misure statistiche per osservare come i dati sono distribuiti;
  • sviluppiamo raggruppamenti multipli a colpo d'occhio con tabelle pivot.

Iniziamo le nostre valutazioni.

Conteggio e valori nulli

Quello di cui abbiamo bisogno è df.info():

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11 entries, 0 to 10
Data columns (total 4 columns):
 #   Column    Non-Null Count  Dtype
---  ------    --------------  -----
 0   agente    11 non-null     int64
 1   ordine    11 non-null     int64
 2   prodotto  11 non-null     object
 3   quantita  11 non-null     int64
dtypes: int64(3), object(1)
memory usage: 480.0+ bytes

Abbiamo appena usato uno di quei tipici comandi Pandas che riesce a riassumere con un solo risultato tante informazioni importanti. Ci dice il numero di campioni complessivi, il tipo di ogni campo (colonna a destra), il numero di valori non nulli per ogni campo (risulta 11 sempre come il numero complessivo di righe quindi nessun valore nullo).

Su dataset reali, se a seguito della chiamata a questo metodo individuiamo sacche di valori nulli, sarà necessario indagare maggiormente per vedere la loro incidenza (anche in corrispondenza di ulteriori dati) e applicare tecniche - che conosceremo più avanti nella guida - per compensarli.

Valori unici

Considerando che abbiamo una serie di valori discreti, in dataset più estesi soprattutto, sarebbe utile sapere quanti valori unici esistono in questi casi. Ciò ci aiuterebbe a rispondere a domande del tipo "Quanti e chi sono gli agenti nominati nel dataset?", "Quanti e quali i prodotti presenti negli ordini?".

Con df['agente'].unique() sapremo che gli agenti coinvolti sono tre etichettati con i seguenti identificativi:

array([1, 2, 3])

mentre con df['prodotto'].unique() possiamo sapere che i prodotti complessivamente richiamati almeno una volta negli ordini sono:

array(['blu', 'green', 'red'], dtype=object)

Misurazioni statistiche

Praticamente tutta la statistica di cui abbiamo bisogno la otteniamo con df.describe():

agente 	  ordine 	quantita
count 	11.000000 	11.000000 	11.000000
mean 	1.636364 	164.545455 	4.181818
std 	0.809040 	80.615586 	2.960344
min 	1.000000 	100.000000 	1.000000
25% 	1.000000 	101.000000 	1.500000
50% 	1.000000 	102.000000 	3.000000
75% 	2.000000 	201.500000 	6.500000
max 	3.000000 	300.000000 	9.000000

Per ogni campo possiamo sapere le principali informazioni descrittive ma siamo al punto in cui non vale la pena di fermarsi solo ai puri aspetti tecnici e conviene entrare un po' nel merito della significatività di queste grandezze.

Ad esempio, non tutte queste indicazioni sono utili per ogni campo. In realtà, per "agente" e "ordine" le misurazioni sono del tutto inutili. Pandas le ha svolte in automatico trattandosi di numeri ma avere la deviazione standard degli identificativi degli agenti o dei numeri d'ordine non ha alcun senso tanto che si sarebbe potuto ridurre il comando a df['quantita'].describe() ottenendo una Series.

La colonna a destra ci informa sulle quantità di un singolo prodotto incluso in un ordine. Ci dice che, come minimo, il prodotto appare una volta in un ordine (informazione superflua, sarebbe impossibile un valore inferiore) e al massimo in 9 pezzi.

Utile ciò che la riga etichettata "50%" ci dice. Si tratta del secondo quartile, comunemente detto mediana, che indica che 3 è il valore che divide esattamente in due il range di elementi. Si trova
però decisamente più vicino a 1 (il minimo) che a 9 (il massimo) e ciò rispecchia la grande presenza di valori come 1 e 2 negli ordini: in pratica gli elementi presenti nel range da 1 a 3 sono in quantità uguale a quelli appartenenti al range, di estensione tripla, che va da 3 a 9.

Tabelle pivot

I raggruppamenti sono l'ideale per verificare valori statistici e conteggi di sottogruppi del dataset ma ciò richiederebbe di intervenire molto con vari comandi groupby. Un modo più sintetico di sviluppare tali indagini è quello di azionare tabelle pivot. Quanti pezzi di prodotto green l'agente 2 ha venduto? Qual è il prodotto che l'agente 1 ha venduto più facilmente? Qualche agente non è riuscito mai a vendere uno specifico prodotto?

Tutte queste domande trovano risposte o in diversi raggruppamenti o in un'unica tabella pivot fornita da pd.pivot_table(df,index=["agente"],columns=["prodotto"],values=['ordine'],aggfunc='count'):

ordine
    prodotto   	    blu       green        red
agente
1 	            3.0       2.0 	   1.0
2 	            1.0       1.0  	   1.0
3 	            NaN       NaN          2.0

Con il comando appena impartito, abbiamo richiesto i raggruppamenti possibili tra "prodotto" e "ordine" con count come funzione di aggregazione basata sui valori presenti in "ordine".

Così abbiamo tutte le risposte: l'agente 2 ha venduto una volta green, l'agente 1 è stato più efficace nella vendita di blu e negli ordini dell'agente 3 non ci sono tracce di green e blu.

Abbiamo svolto finora poche operazioni ma che ci hanno dato un'idea di base sui valori che stiamo trattando. Proseguiremo l'esplorazione nella prossima lezione estendendo il dataset e associando dei grafici.

Ti consigliamo anche