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:

  1. Caricare un dataset CSV in un DataFrame pandas.
  2. Gestire i dati mancanti nel dataset.
  3. Effettuare operazioni di filtro e raggruppamento sui dati.
  4. 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):

pip install pandas numpy openpyxl

17.2.2 Importazione della libreria

1import pandas as pd
2import numpy as np
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:

1df = pd.read_csv('data.csv')

2print(df.head())
1
Lettura di un file CSV.
2
Visualizza le prime 5 righe del DataFrame.

Esempio di inizializzazione da Excel:

1df_excel = pd.read_excel('data.xlsx')

2print(df_excel.head())
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
  1. Stampa della colonna Nome:
0      Alice
1        Bob
2    Charlie
Name: Nome, dtype: object
  1. Stampa della prima riga utilizzando l’etichetta:
Nome    Alice
Età        25
Name: 0, dtype: object
  1. Stampa della seconda riga utilizzando l’indice:
Nome    Bob
Età       30
Name: 1, dtype: object

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
  1. Raggruppamento per colonna Età.
  2. Stampa del DataFrame raggruppato:
Età
25    1
30    1
35    1
dtype: int64
  1. Creazione di un DataFrame di esempio per il pivot.
  2. Creazione di una pivot table.
  3. 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:

1df['Altezza'] = [165, 180, 175]
2print(df)

df.loc[0, 'Età'] = 26
print(df)
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
  1. Modifica del valore dell’età per la prima riga.
  2. 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().

1df.to_csv('data.csv', index=False)

2df.to_excel('data.xlsx', index=False)

3df.to_json('data.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:

  1. Creiamo il file CSV fornito e carichiamolo in un DataFrame pandas.
  2. Controlliamo se ci sono valori mancanti nel dataset.
  3. Filtriamo le vendite del prodotto Notebook X200 e visualizziamo il risultato.
  4. Raggruppiamo le vendite per venditore e calcoliamo la somma totale delle quantità vendute per ciascun venditore.
  5. Creiamo una tabella pivot per vedere le vendite per data e prodotto.
  6. 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:

1import pandas as pd
2import matplotlib.pyplot as plt
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:

1print(df_vendite.isnull().sum())

2df_vendite_ripulito = df_vendite.dropna()
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 prodotto Notebook 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 oggetto datetime.
2
Imposta data_vendita come indice del DataFrame.
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