17 Esercitazione 1: analisi di un dataset di vendite
17.1 Il problema
In questa esercitazione, analizzeremo i dati di vendita di un negozio utilizzando pandas per la manipolazione dei dati e Matplotlib per la visualizzazione. Impareremo a gestire i dati mancanti, filtrare e raggruppare i dati, e creare grafici significativi.
Obiettivo:
- Caricare un dataset CSV in un
DataFrame
pandas. - Gestire i dati mancanti nel dataset.
- Effettuare operazioni di filtro e raggruppamento sui dati.
- Creare grafici per visualizzare i dati analizzati.
Dataset da salvare in un file di testo esercitazione-uno-vendite.csv
:
id,prodotto,categoria,prezzo,quantità,data_vendita,venditore
1,Notebook X200,Elettronica,1200.5,2,2023-01-15,Anna
2,Smartphone Y7,Elettronica,700.0,1,2023-01-17,Marco
3,Tablet Z10,Elettronica,300.0,3,2023-01-20,Sara
4,Notebook X200,Elettronica,1200.5,1,2023-01-22,Anna
5,Smartphone Y7,Elettronica,700.0,2,2023-01-25,Marco
6,TV Ultra HD 55",Elettrodomestici,800.0,1,2023-01-30,Anna
7,Lavatrice 7kg,Elettrodomestici,500.0,1,2023-02-02,Sara
8,Frigorifero 300L,Elettrodomestici,600.0,1,2023-02-10,Marco
9,Notebook X200,Elettronica,1200.5,1,2023-02-12,Anna
10,Smartphone Y7,Elettronica,700.0,1,2023-02-15,Marco
11,Tablet Z10,Elettronica,300.0,2,2023-02-20,Sara
12,TV Ultra HD 55",Elettrodomestici,800.0,1,2023-02-25,Anna
17.2 Introduzione a pandas
Pandas è una libreria Python potente e flessibile per l’analisi e la manipolazione dei dati. Questa introduzione copre alcuni dei comandi principali che è utile conoscere, inclusa la manipolazione di file Excel.
17.2.1 Installazione
Prima di tutto, installiamo pandas (e numpy, che è una dipendenza):
17.2.2 Importazione della libreria
- 1
- Importa la libreria pandas.
- 2
- Importa la libreria numpy, spesso utilizzata insieme a pandas.
17.2.3 Il DataFrame
Un DataFrame
è una struttura dati bidimensionale con dati allineati in righe e colonne. Ogni colonna può contenere dati di tipo diverso (numeri, stringhe, ecc.).
Puoi inizializzare un DataFrame
utilizzando dizionari, liste di liste, liste di dizionari, array numpy, file CSV, file Excel, ecc.
Esempio di inizializzazione da dizionario:
import pandas as pd
data = {'Nome': ['Alice', 'Bob', 'Charlie'], 'Età': [25, 30, 35]}
1df = pd.DataFrame(data)
2print(df)
- 1
-
Creazione di un
DataFrame
da un dizionario. - 2
-
Stampa del
DataFrame
:
Nome | Età | |
---|---|---|
0 | Alice | 25 |
1 | Bob | 30 |
2 | Charlie | 35 |
Esempio di inizializzazione da CSV:
- 1
- Lettura di un file CSV.
- 2
-
Visualizza le prime 5 righe del
DataFrame
.
Esempio di inizializzazione da Excel:
- 1
- Lettura di un file Excel.
- 2
-
Visualizza le prime 5 righe del
DataFrame
.
17.2.4 Ispezione
Puoi ispezionare le righe e le colonne di un DataFrame utilizzando vari metodi come .head()
, .tail()
, .loc[]
, e .iloc[]
.
Esempio:
1print(df.head())
print(df['Nome'])
print(df.loc[0])
print(df.iloc[1])
- 1
-
Stampa delle prime righe del
DataFrame
:
Nome | Età | |
---|---|---|
0 | Alice | 25 |
1 | Bob | 30 |
2 | Charlie | 35 |
- Stampa della colonna
Nome
:
- Stampa della prima riga utilizzando l’etichetta:
- Stampa della seconda riga utilizzando l’indice:
17.2.5 Filtri, raggruppamenti, pivot
Puoi filtrare, raggruppare e pivotare i dati utilizzando metodi come .query()
, .groupby()
, e .pivot_table()
.
Esempio:
1df_filtrato = df[df['Età'] > 25]
2print(df_filtrato)
df_gruppato = df.groupby('Età').size()
print(df_gruppato)
pivot_data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one', 'one'],
'C': [1, 3, 2, 5, 4, 6]}
df_pivot = pd.DataFrame(pivot_data)
pivot_table = df_pivot.pivot_table(values='C', index='A', columns='B', aggfunc='sum')
print(pivot_table)
- 1
-
Filtro delle righe dove l’età è maggiore di
25
. - 2
-
Stampa del
DataFrame
filtrato:
Nome | Età | |
---|---|---|
1 | Bob | 30 |
2 | Charlie | 35 |
- Raggruppamento per colonna
Età
. - Stampa del
DataFrame
raggruppato:
- Creazione di un
DataFrame
di esempio per il pivot. - Creazione di una pivot table.
- Stampa della pivot table:
B | one | two |
---|---|---|
A | ||
bar | 10 | 5 |
foo | 4 | 2 |
17.2.6 Modifica
Puoi modificare i dati di un DataFrame
assegnando nuovi valori agli elementi, alle colonne o utilizzando metodi di modifica in-place.
Esempio:
- 1
- Aggiunta di una nuova colonna ‘Altezza’.
- 2
- Stampa del DataFrame modificato:
Nome | Età | Altezza | |
---|---|---|---|
0 | Alice | 25 | 165 |
1 | Bob | 30 | 180 |
2 | Charlie | 35 | 175 |
- Modifica del valore dell’età per la prima riga.
- Stampa del DataFrame modificato:
Nome | Età | Altezza | |
---|---|---|---|
0 | Alice | 26 | 165 |
1 | Bob | 30 | 180 |
2 | Charlie | 35 | 175 |
17.2.7 Salvataggio
Puoi salvare un DataFrame in vari formati di file, come CSV, Excel, JSON, ecc., utilizzando metodi come .to_csv()
, .to_excel()
, .to_json()
.
- 1
-
Salvataggio del
DataFrame
in un file CSV senza includere gli indici. - 2
-
Salvataggio del
DataFrame
in un file Excel senza includere gli indici. - 3
-
Salvataggio del
DataFrame
in un file JSON.
17.3 La soluzione
Passaggi di soluzione:
- Creiamo il file CSV fornito e carichiamolo in un
DataFrame
pandas. - Controlliamo se ci sono valori mancanti nel dataset.
- Filtriamo le vendite del prodotto
Notebook X200
e visualizziamo il risultato. - Raggruppiamo le vendite per venditore e calcoliamo la somma totale delle quantità vendute per ciascun venditore.
- Creiamo una tabella pivot per vedere le vendite per data e prodotto.
- Utilizziamo Matplotlib per creare un grafico a linee delle vendite totali per ciascun mese.
17.3.1 Passaggio 1: caricamento del dataset
Carichiamo le librerie necessarie:
- 1
- Importa la libreria Pandas per la manipolazione dei dati.
- 2
- Importa la libreria Matplotlib per la visualizzazione dei dati.
Carichiamo il dataset:
1df_vendite = pd.read_csv('esercitazione-uno-vendite.csv')
- 1
-
Carica il dataset dal file CSV
esercitazione-uno-vendite.csv
.
17.3.2 Passaggio 2: gestione dei dati mancanti
Controlliamo se ci sono valori mancanti e rimuoviamo le righe con valori mancanti:
- 1
- Stampa il conteggio dei valori mancanti per ciascuna colonna.
- 2
-
Rimuove le righe con valori mancanti dal
DataFrame
.
17.3.3 Passaggio 3: operazioni di filtro
Filtriamo le vendite del prodotto Notebook X200
:
vendite_notebook_x200 = df_vendite_ripulito[
1 df_vendite_ripulito['prodotto'] == 'Notebook X200']
2print(vendite_notebook_x200)
- 1
-
Filtra il
DataFrame
per il prodottoNotebook X200
. - 2
-
Stampa le vendite del prodotto
Notebook X200
.
17.3.4 Passaggio 4: operazioni di raggruppamento e somma
L’operazione di group by in pandas permette di raggruppare i dati in base a una o più colonne, e quindi applicare una funzione di aggregazione su ciascun gruppo. Questo è utile quando si vuole calcolare statistiche aggregate, come somme, medie, conteggi, ecc., per ciascun gruppo di dati.
Ad esempio, se si dispone di un dataset delle vendite, è possibile raggruppare i dati per venditore
e calcolare la somma delle quantità
vendute da ciascun venditore. Questo può fornire una visione chiara delle prestazioni di ciascun venditore.
Raggruppiamo per venditore e calcoliamo la somma delle quantità vendute:
1vendite_per_venditore = df_vendite_ripulito.groupby('venditore')['quantità'].sum()
2print(vendite_per_venditore)
- 1
- Raggruppa i dati per venditore e calcola la somma delle quantità vendute.
- 2
- Stampa la somma delle quantità vendute per ciascun venditore.
17.3.5 Passaggio 5: operazione di pivot
L’operazione di pivot in pandas permette di trasformare i dati rendendoli più comprensibili e facili da analizzare. Una tabella pivot ruota i dati in modo da creare una nuova tabella in cui le righe e le colonne rappresentano diverse dimensioni dei dati. In particolare, è possibile specificare quali valori devono essere visualizzati come righe, quali come colonne, e quale funzione di aggregazione applicare ai dati.
Ad esempio, in un dataset delle vendite, è possibile creare una tabella pivot che mostra le quantità
vendute per data_vendita
e prodotto
. Questo può aiutare a visualizzare come le vendite di ciascun prodotto cambiano nel tempo.
Creiamo una tabella pivot per vedere le vendite per data e prodotto:
pivot_table_data_prodotto = df_vendite_ripulito.pivot_table(
values='quantità',
index='data_vendita',
columns='prodotto',
aggfunc='sum',
1 fill_value=0)
2print(pivot_table_data_prodotto)
- 1
- Crea una tabella pivot per visualizzare le vendite per data e prodotto.
- 2
- Stampa la tabella pivot delle vendite per data e prodotto.
17.3.6 Passaggio 6: visualizzazione con grafici
Creiamo un grafico a barre delle vendite per venditore:
1vendite_per_venditore.plot(kind='bar')
2plt.title('Vendite per Venditore')
3plt.xlabel('Venditore')
4plt.ylabel('Quantità Venduta')
5plt.show()
- 1
- Crea un grafico a barre delle vendite per venditore.
- 2
- Imposta il titolo del grafico a barre.
- 3
- Imposta l’etichetta dell’asse x del grafico a barre.
- 4
- Imposta l’etichetta dell’asse y del grafico a barre.
- 5
- Mostra il grafico a barre.
Creiamo un grafico a linee delle vendite totali per ciascun mese:
1df_vendite_ripulito['data_vendita'] = pd.to_datetime(df_vendite_ripulito['data_vendita'])
2df_vendite_ripulito.set_index('data_vendita', inplace=True)
3vendite_mensili = df_vendite_ripulito.resample('M')['quantità'].sum()
4vendite_mensili.plot(kind='line')
5plt.title('Vendite Mensili Totali')
6plt.xlabel('Mese')
7plt.ylabel('Quantità Venduta')
8plt.show()
- 1
-
Converte la colonna
data_vendita
in un oggettodatetime
. - 2
-
Imposta
data_vendita
come indice delDataFrame
. - 3
- Raggruppa i dati per mese e calcola la somma delle quantità vendute.
- 4
- Crea un grafico a linee delle vendite mensili.
- 5
- Imposta il titolo del grafico a linee.
- 6
- Imposta l’etichetta dell’asse x del grafico a linee.
- 7
- Imposta l’etichetta dell’asse y del grafico a linee.
- 8
- Mostra il grafico a linee.
17.4 File
CSV vendite: scarica
File Python completo: scarica
Marino notebook completo: scarica