← Articoli

Vi presento PandasAI, l'AI per i dataframe

·4 min di lettura·AI

Ho creato PandasAI perché ero stufo di scrivere sempre lo stesso codice di groupby, filtri e grafici per domande che dovrebbero richiedere una frase.

Cos'è

PandasAI mette un modello linguistico sopra un dataframe pandas. Fai una domanda in linguaggio naturale e la libreria scrive il codice pandas, lo esegue e ti dà la risposta. Nessun prompt engineering da parte tua.

import pandas as pd
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI

df = pd.DataFrame({
    "country": ["United States", "United Kingdom", "France", "Germany", "Italy"],
    "gdp": [19294482071552, 2891615567872, 2411255037952, 3435817336832, 1745433788416],
    "happiness_index": [6.94, 7.16, 6.66, 7.07, 6.38],
})

llm = OpenAI(api_token="YOUR_API_TOKEN")
pandas_ai = PandasAI(llm)
pandas_ai.run(df, prompt="Quali sono i 5 paesi più felici?")

A seconda della domanda restituisce un dataframe, un numero o una frase. Se chiedi un grafico, ottieni un grafico matplotlib.

Come funziona

PandasAI non manda i tuoi dati al modello. Manda la domanda, i nomi delle colonne e le prime righe, quanto basta perché il modello capisca la struttura del dataframe. Il modello scrive codice Python basandosi su quella struttura, e PandasAI lo esegue in locale, sul dataframe completo, sulla tua macchina. Se anche le prime righe sono sensibili, c'è una modalità che manda solo i nomi delle colonne.

Schema: la domanda, i nomi delle colonne e le prime righe partono dalla tua macchina verso il modello linguistico. Il modello restituisce codice pandas, che viene eseguito in locale sul dataframe completo e restituisce un numero, una tabella o un grafico.
Dalla tua macchina esce solo la struttura dei dati. Il codice torna indietro e viene eseguito dove stanno le righe.

Questa scelta è nata da un vincolo pratico più che da un principio. Nessuno incollerà una tabella di clienti in un chatbot, e fa bene a non farlo. Lasciare i dati dove stanno già, e spostare solo la domanda e il codice, è la versione di questa idea che le persone possono usare al lavoro.

Di default usa i modelli di OpenAI, ma puoi sostituirli con modelli aperti di Hugging Face, come StarCoder, se preferisci non dipendere da un solo fornitore. Visto come si stanno muovendo le cose, quella lista cambierà ogni poche settimane.

Perché adesso

Due mesi fa non ci avrei nemmeno provato. GPT-4 mi ha fatto cambiare idea. I modelli precedenti scrivevano codice pandas che sembrava giusto e falliva abbastanza spesso da costringerti a controllare ogni riga. GPT-4 azzecca le domande di analisi più comuni abbastanza spesso da rendere più veloce controllare il suo lavoro che scrivere il codice da te. Per uno strumento come questo, è questa la soglia che conta.

OpenAI sta chiaramente andando nella stessa direzione con Code Interpreter per ChatGPT. Per me è una buona notizia, perché dimostra che l'idea funziona, ma significa caricare i tuoi file su OpenAI e lavorare dentro la loro finestra di chat. PandasAI va nella direzione opposta. Vive nel notebook, nello script o nella pipeline dove si trova già il tuo dataframe, ed è open source, quindi puoi leggere ogni riga di quello che fa.

Perché conta, al di là delle dieci righe che mi risparmia

Ogni team dati ha lo stesso problema. Chi ha bisogno di una risposta dai dati non sa scrivere il codice, e chi sa scrivere il codice è occupato. Così le domande si accodano, le risposte arrivano con una settimana di ritardo e la maggior parte delle domande non viene mai fatta, perché farle costa troppo.

Per decenni l'interfaccia verso i dati è stata un linguaggio di interrogazione: SQL, poi pandas, poi lo strumento di BI di turno che ci sta sopra e ti dà un insieme fisso di grafici. Ognuno ha reso i dati più accessibili, e ognuno chiedeva comunque di imparare un linguaggio prima di poter fare una domanda. I modelli linguistici eliminano questo passaggio. La domanda stessa diventa la query.

Quattro modi per chiedere i cinque paesi più felici. SQL negli anni Settanta: ORDER BY happiness_index DESC LIMIT 5. Pandas nel 2008: df.nlargest(5, 'happiness_index'). Le dashboard di BI negli anni 2010: il grafico che qualcuno ha preparato per te. Nel 2023: la domanda stessa, senza niente di nuovo da imparare.
Ogni interfaccia chiedeva un po' meno a chi aveva la domanda.

Credo che la strada sia questa. Oggi PandasAI è una scorciatoia per chi conosce già pandas, e come punto di partenza va benissimo. Il passo successivo è gestire più dataframe insieme, ricordare la conversazione così da poter fare domande di approfondimento, collegarsi direttamente a un database SQL invece che a un CSV e spiegare cosa ha fatto, così che un utente non tecnico possa fidarsi della risposta. Prima o poi chi fa la domanda non sarà affatto un analista. Sarà il product manager, il commerciale o il fondatore che finora ha dovuto aspettare in quella coda.

È la stessa scommessa che ho fatto con ChatPic, in un altro ambito: l'interfaccia dovrebbe essere quello che diresti ad alta voce.

Cosa non è

Non è magia, e non ti salverà da un dataset disordinato. A volte sbaglia, come ogni strumento basato su un LLM, e preferisco dirlo subito piuttosto che fingere il contrario. Una risposta sbagliata data con sicurezza è peggio di nessuna risposta, quindi rendere facile da controllare il codice generato è tra le prime cose della lista.

C'è anche il rischio più ovvio: PandasAI esegue codice scritto da un modello. Sto aggiungendo dei limiti su cosa quel codice può importare e chiamare, ma per ora consideralo uno strumento per esplorare i dati sulla tua macchina, non qualcosa da usare in produzione.

A che punto è

Il codice è open source: repository di PandasAI. La risposta delle ultime settimane è stata molto più grande di quanto mi aspettassi, e le issue che le persone aprono stanno già orientando la roadmap. In alcuni punti è ancora grezzo. È proprio a questo che servono i primi utenti e le segnalazioni di bug: aprine una se ti imbatti in qualcosa, o manda una PR se lo correggi da solo.