Esplorazione dei dati alimentata da ChatGPT Sblocca intuizioni nascoste nel tuo dataset

Esplorazione dati con ChatGPT scopri intuizioni nascoste nel tuo dataset

 

Analizzare un dataset per comprenderlo meglio e ottenere informazioni è un passaggio importante in qualsiasi progetto di data science. E ChatGPT può aiutare a semplificare e velocizzare tale analisi.

Qui effettueremo un’analisi esplorativa dei dati su un dataset di esempio utilizzando ChatGPT. Comprenderemo le distribuzioni delle caratteristiche, come una caratteristica di interesse varia con altre caratteristiche e molto altro ancora.

Per seguire e accedere a ChatGPT, è necessario avere un account OpenAI. Se non ne hai uno, puoi registrarti per un account gratuito.

 

Caricamento del dataset e ottenimento di informazioni di base

 

La libreria seaborn ha alcuni dataset pronti all’uso che possiamo analizzare. Useremo il dataset tips.

Prompt: Parlami di più sul dataset `tips` incorporato nella libreria seaborn.

   

Sapere di cosa si tratta il dataset è un buon punto di partenza. Iniziamo facendo quanto segue:

  • Carica il dataset in un dataframe di pandas, e 
  • Ottieni informazioni di base e statistiche di riepilogo delle colonne per comprendere meglio il dataset.

Prompt: Usiamo il dataset `tips`. Scrivi il codice per leggere il dataset in un dataframe di pandas e ottenere informazioni di base e statistiche di riepilogo dei campi disponibili.

   

import seaborn as sns
import pandas as pd

# Carica il dataset 'tips' da Seaborn
tips_data = sns.load_dataset('tips')

# Crea un dataframe di Pandas dal dataset caricato
tips_df = pd.DataFrame(tips_data)

# Mostra le prime righe del dataframe
print("Prime righe del dataset 'tips':")
print(tips_df.head())

# Ottieni informazioni di base sui campi
print("\nInformazioni sul dataset 'tips':")
print(tips_df.info())

# Ottieni statistiche di riepilogo dei campi numerici
print("\nStatistiche di riepilogo dei campi numerici:")
print(tips_df.describe())

 

Vediamo che abbiamo un riepilogo abbastanza informativo del dataset:

Prime righe del dataset 'tips':
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

Informazioni sul dataset 'tips':

RangeIndex: 244 entries, 0 to 243
Data columns (total 7 columns):
 #   Column      Non-Null Count  Dtype   
---  ------      --------------  -----   
 0   total_bill  244 non-null    float64 
 1   tip         244 non-null    float64 
 2   sex         244 non-null    category
 3   smoker      244 non-null    category
 4   day         244 non-null    category
 5   time        244 non-null    category
 6   size        244 non-null    int64   
dtypes: category(4), float64(2), int64(1)
memory usage: 7.4 KB
None

Statistiche di riepilogo dei campi numerici:
       total_bill         tip        size
count  244.000000  244.000000  244.000000
mean    19.785943    2.998279    2.569672
std      8.902412    1.383638    0.951100
min      3.070000    1.000000    1.000000
25%     13.347500    2.000000    2.000000
50%     17.795000    2.900000    2.000000
75%     24.127500    3.562500    3.000000
max     50.810000   10.000000    6.000000

 

Dai dati statistici di sintesi, abbiamo un’idea delle caratteristiche numeriche nel dataset. Conosciamo i valori minimi e massimi, i valori medi e mediani e i valori percentile per le caratteristiche numeriche. Non ci sono valori mancanti, quindi possiamo procedere con i passaggi successivi.

 

Esplorazione del Dataset – Il Cosa, il Perché e il Come

 

Ora che abbiamo un’idea del dataset, andiamo avanti.

Lo scopo di questa analisi esplorativa dei dati è capire meglio il comportamento delle mance. Per fare ciò, possiamo creare visualizzazioni utili. Queste dovrebbero aiutarci a capire la relazione dell’importo della mancia con le diverse variabili categoriche nel dataset.

Dato che questo è un dataset semplice da analizzare, chiediamo a ChatGPT di fornirci una serie di passaggi per analizzare ulteriormente questo dataset.

Prompt: Lo scopo dell’analisi è ottenere alcuni spunti sul comportamento delle mance, iniziando con alcune visualizzazioni semplici. Suggerisci dei passaggi per lo stesso.

   

I passaggi di esplorazione dei dati suggeriti da ChatGPT sembrano tutti validi. Quindi utilizzeremo questi passaggi – per capire meglio un dataset – un passo alla volta. Chiederemo a ChatGPT di generare codice, proveremo ad eseguire il codice generato e lo modificheremo se necessario.

 

Esplorazione della Distribuzione delle Mance

 

Come primo passo, visualizziamo la distribuzione dell’importo della mancia.

Prompt: Scrivi il codice per tracciare la distribuzione delle mance.

   

ChatGPT ha fornito il seguente codice per generare un istogramma e un grafico della densità del kernel che ci aiutano a capire la distribuzione delle mance:

import matplotlib.pyplot as plt

# Crea un istogramma degli importi delle mance
plt.figure(figsize=(8, 6))
sns.histplot(data=tips_data, x='tip', kde=True)
plt.title("Distribuzione degli Importi delle Mance")
plt.xlabel("Importo della Manica")
plt.ylabel("Frequenza")
plt.show()

 

 

Analisi del Comportamento delle Mance Basata su Variabili Categoriche

 

Abbiamo molte variabili categoriche nel dataset. Sarà utile avere un semplice grafico a barre che mostri l’importo medio della mancia per i diversi valori di queste variabili categoriche.

Prompt: Utilizza tutte le variabili categoriche disponibili (‘sex’, ‘smoker’, ‘day’ e ‘time’). Scrivi il codice per generare grafici a barre per comprendere il comportamento delle mance. Utilizza subplots in modo da poter avere tutti e quattro i grafici a barre in una singola figura.

   

Ecco il codice. Il codice è stato eseguito senza errori; ho solo dovuto modificare la dimensione della figura:

# Definisci le variabili categoriche da analizzare
categorical_vars = ['sex', 'smoker', 'day', 'time']

# Crea subplots per ogni variabile categorica
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 5))
fig.suptitle("Comportamento delle Mance basato su Variabili Categoriche", fontsize=16)

# Genera grafici a barre per ogni variabile categorica
for ax, var in zip(axes.flatten(), categorical_vars):
    sns.barplot(data=tips_data, x=var, y='tip', ax=ax)
    ax.set_xlabel(var.capitalize())
    ax.set_ylabel("Importo Medio della Manica")

plt.tight_layout()
plt.show()

 

 

Dai grafici, vediamo che caratteristiche come il sesso e il comportamento di fumare non influenzano il comportamento delle mance (come previsto). Mentre i giorni e gli orari sembrano farlo. L’importo medio delle mance nei fine settimana e durante la cena sembra essere leggermente più alto.

 

Visualizzando la Relazione tra Totale Conto e Importo Mancia 

 

Ora, vediamo come il totale del conto influisce sull’importo della mancia pagata.

Prompt: Vorrei capire la relazione tra il totale del conto e l’importo della mancia. Per favore, dammi il codice per generare un grafico adatto a questo. Credo che un semplice scatter plot sia utile.

   

Ecco il codice per generare lo scatter plot richiesto:

# Crea uno scatter plot di totale conto vs. importo mancia
plt.figure(figsize=(6, 4))
sns.scatterplot(data=tips_data, x='total_bill', y='tip')
plt.title("Totale Conto vs. Importo Mancia")
plt.xlabel("Totale Conto")
plt.ylabel("Importo Mancia")
plt.show()

 

 

Vediamo che c’è una certa correlazione positiva tra il totale del conto e gli importi delle mance.

 

Visualizzando la Relazione tra Dimensione del Gruppo e Importo Mancia 

 

Come prossimo passo, proviamo a visualizzare la relazione tra la dimensione del gruppo e l’importo della mancia. 

Prompt: Ora, vorrei capire come l’importo della mancia varia con il numero di persone che mangiano (dimensione del gruppo). Qual è una scelta migliore: un bar plot o un violin plot?

   

Poiché vogliamo anche capire la distribuzione degli importi delle mance, procediamo con la creazione di un violin plot.

Prompt: Fantastico! Per favore, scrivi il codice per generare un violin plot per questa visualizzazione.

Ecco il codice:

# Crea un violin plot per l'importo della mancia in base alla dimensione del gruppo
plt.figure(figsize=(6, 4))
sns.violinplot(data=tips_data, x='size', y='tip')
plt.title("Importo Mancia per Dimensione del Gruppo")
plt.xlabel("Dimensione del Gruppo")
plt.ylabel("Importo Mancia")
plt.show()

 

 

Comprensione del Comportamento delle Mance basato sia sull’Orario che sul Giorno

 

In seguito, cerchiamo di capire come l’orario e il giorno influenzano il comportamento delle mance.

Prompt: Voglio capire come varia il comportamento delle mance a seconda dell’orario e del giorno. Qual è una buona visualizzazione? Inoltre, scrivi il codice per generare la visualizzazione richiesta.

   

Questo frammento di codice mostra come fare un pivot utilizzando il giorno come indice e aggregare il valore medio degli importi delle mance per pranzo e cena (l’orario del giorno):

# Crea una tabella pivot di importo medio della mancia per orario e giorno
pivot_table = tips_data.pivot_table(values='tip', index='day', columns='time', aggfunc='mean')

# Crea una heatmap del comportamento delle mance in base all'orario e al giorno
plt.figure(figsize=(8, 6))
sns.heatmap(pivot_table, cmap='YlGnBu', annot=True, fmt=".2f", cbar=True)
plt.title("Comportamento delle Mance basato sull'Orario e sul Giorno")
plt.xlabel("Orario")
plt.ylabel("Giorno")
plt.show()

 

 

Dalla mappa termica, vediamo che le quantità medie di mancia sono leggermente più alte per la cena della domenica rispetto agli altri giorni e orari. In generale, per un dato giorno, in media le quantità di mancia per la cena sembrano essere più alte rispetto a quelle per il pranzo.

Vediamo anche che non ci sono dati sufficienti per il pranzo il sabato e la domenica. Poiché abbiamo solo un totale di 244 registrazioni, potremmo non avere alcun record per i pranzi nei fine settimana. Procediamo e verifichiamo questo.

Prompt: Voglio ottenere il numero di tavolate che hanno ordinato il pranzo nei fine settimana. Scrivi il codice per filtrare il dataframe `tips_data` e ottenere questo conteggio.

   

Ecco il codice per filtrare il dataframe e ottenere un sottoinsieme contenente i record per i pranzi nei fine settimana:

# Filtra i dati per il pranzo nei fine settimana
weekend_lunch_data = tips_data[(tips_data['time'] == 'Pranzo') & (tips_data['day'].isin(['Sab', 'Dom']))]

# Ottieni il conteggio delle tavolate che hanno ordinato il pranzo nei fine settimana
conteggio = weekend_lunch_data['size'].count()
print("Numero di tavolate che hanno ordinato il pranzo nei fine settimana:", conteggio)

 

E vediamo che non abbiamo alcun record per lo stesso, quindi la nostra analisi è corretta finora:

Numero di tavolate che hanno ordinato il pranzo nei fine settimana: 0

 

E questo è tutto! Abbiamo esplorato il dataset `tips` e generato alcune visualizzazioni utili sollecitando ChatGPT. 

 

Conclusione

 

In questo articolo, abbiamo imparato come sfruttare ChatGPT per l’esplorazione dei dati. Se sei interessato a integrare ChatGPT nel tuo flusso di lavoro di data science, dai un’occhiata a questa guida. Illustra un progetto di esempio, insieme a consigli e best practice, per utilizzare in modo efficace ChatGPT per gli esperimenti di data science.     Bala Priya C è una sviluppatrice e scrittrice tecnica dell’India. Le piace lavorare all’incrocio tra matematica, programmazione, data science e creazione di contenuti. Le sue aree di interesse e competenza includono DevOps, data science e elaborazione del linguaggio naturale. Ama leggere, scrivere, programmare e bere caffè! Attualmente sta lavorando per imparare e condividere le sue conoscenze con la comunità degli sviluppatori scrivendo tutorial, guide pratiche, articoli di opinione e altro ancora.