Con l’avvento di ChatGPT e dei suoi concorrenti, l’Intelligenza Artificiale Generativa ha aperto nuovi scenari e possibilità per i data scientist. Considerando che questi sono spesso persone con una lunga esperienza e solide conoscenze in merito a molti strumenti per l’analisi dati, un caso particolarmente fortunato sarebbe proprio quello di poter utilizzare i LLM (Large Language Model) all’interno di qualche framework di analisi dati di cui possiedono già piena padronanza, con almeno due effetti positivi:

  • permetterebbe loro di continuare ad usare un ambiente di lavoro noto sfruttando a pieno tutte le conoscenze già acquisite;
  • integrerebbe l’Intellligenza Artificiale Generativa nei loro flussi di lavoro già esistenti.

Un caso di questo tipo è PandasAI, uno strumento unisce le nuove potenzialità tecnologiche dei large language model con uno degli strumenti più utilizzati nel mondo della Data Science ovvero Pandas.

Cos’è Pandas?

Pandas è uno strumento basato sul linguaggio Python particolarmente adatto a trattare dati strutturati da inquadrare in una struttura dati, che prende il nome di DataFrame. Può quindi essere impiegato per analisi in stile SQL (filtri, raggruppamenti, tabelle pivot, etc.), per pulizia di dati, per integrazione o riduzione di dataset già esistenti e come supporto a vari settori dell’Intelligenza Artificiale come, ad esempio, il Machine Learning.

Grazie alla larga diffusione del linguaggio Python nel mondo della Data Science, molti addetti hanno adottato Pandas, tanto che il suo modus operandi è stato adottato in molti altri ambienti produttivi. Pandas ha saputo integrare in maniera comoda tante funzionalità complesse rendendone pratico l’utilizzo ed ha aperto le sue possibilità di azione a molti formati per i dati come, ad esempio, Excel di Microsoft che rappresenta uno dei tipi di dato più presenti nelle aziende e nelle amministrazioni pubbliche (trovate qui alcuni altri articoli su Pandas).

I DataFrame sono particolarmente ricchi di funzionalità ma come sarebbe il nostro lavoro se potessimo “dialogarci” in linguaggio naturale e loro fossero in grado di applicare quanto da noi richiesto?

Questo è proprio ciò che PandasAI permette di fare.

PandasAI passa dalle query ai prompt di ChatGPT

Uno degli aspetti più promossi dell’Intelligenza Artificiale Generativa consiste nell’aspetto conversazionale ovvero nella capacità di interrogare un sistema in linguaggio naturale facendo in modo che sappia risponderci accedendo a dati in possesso del modello: in fin dei conti è proprio quell’aspetto di chat che ha reso così sconvolgente ChatGPT!

D’altro canto, sistemi rivolti all’analisi dei dati come Pandas offrono interfacce di interrogazione piuttosto intuitive che ricalcano i tipici meccanismi dei database (selezione di dati, filtri, raggruppamenti eccetera) eseguibili con funzioni che ricordano le cosiddette operazioni CRUD (Create, Read, Update, Delete).

Con PandasAI possiamo caricare un dataset relazionale per interrogarlo dialogandoci in linguaggio naturale

Si tratta di due modalità di dialogo molto diverse tra loro e soprattutto la prima, quella conversazionale, è utilizzabile da chiunque mentre la seconda, di carattere imperativo, è adatta a chi ha almeno una conoscenza di base del linguaggio Python e di Pandas.

Con PandasAI abbiamo un connubio tra questi due mondi: potremo infatti caricare un dataset relazionale per interrogarlo in linguaggio naturale. In pratica, avremo Pandas arricchito di un prompt tipico della AI generativa.

Vediamo come funziona questa interessantissima proposta.

Come installare e configurare PandasAI

Per lavorare con PandasAI abbiamo bisogno di due cose:

  • dobbiamo installare la libreria Python ma ciò non sarà particolarmente complicato in quanto ricorreremo al classico comando pip install;
  • abbiamo bisogno di una key per interagire con le API di OpenAI in quanto questo sarà il motore di Intelligenza Artificiale Generativa che utilizzeremo.

Come contesto di lavoro, potremo utilizzare qualsiasi ambito fatto per lavorare in Python, ancora meglio se si tratta di un ambiente già predisposto per l’utilizzo di librerie di Data Science, anche semplicemente Google Colab, strumento on line per utilizzare il quale basta solo un browser e delle credenziali GMail.

Installiamo quindi la libreria:

pip install pandasai

Impostare la chiave OpenAI e il dataframe con PandasAI

Fatto ciò, potremo iniziare il nostro lavoro seguendo, sommariamente, questi passaggi:

  • imposteremo e renderemo disponibile nello script una chiave OpenAI;
  • creeremo un comune DataFrame Pandas affinchè possa essere reso disponibile nello script il dataset da interrogare;
  • inizializzeremo un oggetto SmartDataframe di PandasAI che ingloberà sia il DataFrame Pandas sia il nostro LLM configurato con la chiave OpenAI
  • interrogheremo lo SmartDataframe mediante il metodo chat attendendoci delle risposte.

Vediamo subito un pò di codice.

Per prima cosa, importiamo l’oggetto SmartDataframe e la libreria Pandas e successivamente impostiamo il nostro LLM utilizzando una chiave OpenAI di nostra proprietà:

from pandasai import SmartDataframe
import pandas as pd
from pandasai.llm import OpenAI

llm = OpenAI(api_token="sk-...")

Caricare un dataset in un DataFrame Pandas

A questo punto, carichiamo il dataset in un “tradizionale” DataFrame Pandas. A titolo di esempio se ne può direttamente scrivere uno come abbiamo fatto noi in questo caso, immaginando giocatori di un qualche sport, appartenenti alle squadre Red, Green e Blue e che totalizzano punteggi.


df = pd.DataFrame({
    "player": [
        'John',
        'Sam',
        'Jason',
        'Erik',
        'Frank',
        'Edward',
        'Michael',
        'Louis',
        'Dylan'
    ],
    "team": [
        'Blue',
        'Green',
        'Red',
        'Red',
        'Red',
        'Green',
        'Green',
       'Blue',
       'Blue',
    ],
    "score": [5,6,9,3,7,8,6,9,5],
})

Passare da DataFrame a SmartDataFrame in PandasAI

Ora possiamo fondere Pandas e l’Intelligenza Artificiale Generativa creando uno SmartDataframe che inglobi quanto dichiarato sinora:

sdf = SmartDataframe(df, config={"llm": llm})
Uno SmartDataframe, tra l’altro, conserva tutte le proprietà di un DataFrame Pandas pertanto può essere utilizzato per tutte le azioni e le interrogazioni basate sulle tecniche che un Data Scientist già padroneggia perfettamente.
Ora viene il bello.
Utilizzando il metodo chat possiamo interrogare il dataset predisposto per avere delle risposte con domande in linguaggio naturale senza bisogno di utilizzare i classici metodi per le query.
Questo è il nostro dataset, lo pubblichiamo in forma tabellare in modo da poter riscontrare ad occhio i risultati che otterremo:
  player  team  score
0 John    Blue   5
1 Sam     Green  6
2 Jason   Red    9
3 Erik    Red    3
4 Frank   Red    7
5 Edward  Green  8
6 Michael Green  6
7 Louis   Blue   9
8 Dylan   Blue   5

Interrogare uno SmartDataFrame Pandas con la chat di GPT

Primo esempio: chiediamo il punteggio totale del team Green.
> sdf.chat("What's the total score of Green team")
20
Otteniamo 20. Corretto: Sam, Edward e Michael, i giocatori del Green team, hanno totalizzato rispettivamente 6, 8 e 6 punti.
Secondo esempio. Quali sono i giocatori che hanno realizzato più punti?
> sdf.chat("Get the players with highest score")
    player score
2   Jason    9
7   Louis    9
Jason e Louis con 9 punti a testa: corretto.
Ultimo esempio, un raggruppamento. Fornire i punteggi totali di ogni squadra proponendoli in ordine decrescente.
> sdf.chat("Return the sum of score by team ordered by score descendant")
    team    score
0   Green    20
1   Blue     19
2   Red      19

Conclusioni

Per chi è abituato a scrivere codice per interrogare un DataFrame, un approccio del genere può sembrare un’idea molto interessante. Probabilmente, per Data Scientist esperti esempi come quelli che abbiamo proposto non hanno chissà quale impatto considerata la sinteticità del linguaggio Python ma lo spunto, con un’adeguata evoluzione, può portare a risultati interessanti considerando che PandasAI è in grado di svolgere operazioni più avanzate come join tra DataFrame e la visualizzazione di grafici inserendo nella domanda un verbo come Plot.
Come per tante altre soluzioni di Intelligenza Artificiale Generativa non resta che rimanere a guardare, magari contribuendo al progetto in prima persona, per vedere quali interessanti sviluppi si presenteranno all’orizzonte.