← Articoli

Ecco PandasAI: fai domande ai tuoi dataframe

·4 min di lettura·AI

Ho creato PandasAI perché non ne potevo più di riscrivere ogni volta lo stesso codice di groupby, filtri e grafici per rispondere a domande che si fanno in una frase.

Che cos'è

PandasAI affianca a un dataframe pandas un modello linguistico. Tu fai la domanda in linguaggio naturale e la libreria scrive il codice pandas, lo esegue e ti restituisce la risposta, senza che tu debba fare alcun prompt engineering.

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 ottieni un dataframe, un numero o una frase. Se chiedi un grafico, ti arriva un plot di matplotlib.

Come funziona

PandasAI non manda i tuoi dati al modello. Gli manda la domanda, i nomi delle colonne e le prime righe, quel tanto che basta per fargli capire com'è fatto il dataframe. Il modello scrive il codice Python basandosi su quella struttura, e PandasAI lo esegue in locale, sul dataframe completo, sulla tua macchina. Se anche le prime righe contengono dati sensibili, c'è una modalità che invia soltanto i nomi delle colonne.

Schema: la domanda, i nomi delle colonne e le prime righe vanno dalla tua macchina al modello linguistico. Il modello risponde con codice pandas, che gira in locale sul dataframe completo e restituisce un numero, una tabella o un grafico.
Dalla tua macchina esce solo la forma dei dati. Il codice torna indietro e gira là dove stanno le righe.

Più che da un principio, questa scelta è nata da un vincolo pratico. Nessuno si sognerebbe di incollare una tabella di clienti in un chatbot, e a ragione. Lasciare i dati dove sono già e far viaggiare solo la domanda e il codice è ciò che rende uno strumento del genere usabile davvero al lavoro.

Di default usa i modelli di OpenAI, ma se preferisci non legarti a un solo fornitore puoi passare a modelli aperti di Hugging Face come StarCoder. Alla velocità con cui si muove il settore, quella lista cambierà ogni due o tre settimane.

Perché proprio adesso

Due mesi fa non ci avrei nemmeno provato. A farmi cambiare idea è stato GPT-4. I modelli precedenti scrivevano codice pandas all'apparenza corretto, che però falliva abbastanza spesso da costringerti a ricontrollare ogni riga. GPT-4 risponde bene alle domande di analisi più comuni così spesso che verificare il suo lavoro è più rapido che scrivere il codice a mano.

Anche OpenAI sta chiaramente andando in questa direzione, con Code Interpreter per ChatGPT. Per me è una buona notizia, perché conferma che l'idea funziona, ma lì devi caricare i tuoi file su OpenAI e lavorare dentro la sua finestra di chat. PandasAI fa il contrario: vive nel notebook, nello script o nella pipeline in cui si trova già il tuo dataframe, ed è open source, quindi puoi leggere riga per riga tutto quello che fa.

Perché conta, e non solo per le dieci righe che mi risparmia

Tutti i team che lavorano con i dati hanno lo stesso problema. Chi ha bisogno di una risposta non sa scrivere il codice, e chi sa scriverlo è sommerso di lavoro. Così le domande si accumulano, le risposte arrivano con una settimana di ritardo e la maggior parte delle domande non viene nemmeno posta, perché porla costa troppo.

Per decenni l'accesso ai dati è passato da un linguaggio di interrogazione: prima SQL, poi pandas, poi lo strumento di BI di turno, costruito sopra a tutto questo, con il suo repertorio fisso di grafici. Ciascuno ha reso i dati più accessibili, ma ognuno chiedeva comunque di imparare un linguaggio prima di poter fare una domanda. I modelli linguistici tolgono di mezzo questo passaggio: la domanda stessa diventa la query.

Quattro modi per chiedere quali siano i cinque paesi più felici. SQL, anni Settanta: ORDER BY happiness_index DESC LIMIT 5. Pandas, 2008: df.nlargest(5, 'happiness_index'). Dashboard di BI, anni Dieci: il grafico che qualcuno ha preparato per te. 2023: la domanda così com'è, senza niente di nuovo da imparare.
Ogni nuova interfaccia ha chiesto un po' meno a chi aveva una domanda.

Secondo me la strada è questa. Oggi PandasAI è una scorciatoia per chi conosce già pandas, e come inizio va benissimo. I prossimi passi sono gestire più dataframe insieme, ricordare la conversazione per permetterti domande di approfondimento, collegarsi direttamente a un database SQL anziché a un CSV, e spiegare che cosa ha fatto, in modo che anche un utente non tecnico possa fidarsi della risposta. Prima o poi a fare la domanda sarà il product manager, il commerciale o il founder che finora è rimasto in coda ad aspettare.

È la stessa scommessa che ho fatto con ChatPic, applicata a un altro ambito: l'interfaccia giusta è ciò che diresti ad alta voce.

Che cosa non è

Non ti salverà da un dataset disordinato. A volte sbaglia, come qualunque strumento basato su un LLM, e preferisco dirlo subito anziché fingere che non succeda. Una risposta sbagliata data con sicurezza è peggio di nessuna risposta: per questo rendere facile l'ispezione del codice generato è tra le mie priorità più alte.

Poi c'è il rischio più evidente: PandasAI esegue codice scritto da un modello. Sto aggiungendo delle protezioni che limitano ciò che quel codice può importare e richiamare, ma per ora usalo per esplorare dati sulla tua macchina e non puntarlo sui sistemi di produzione.

A che punto siamo

Il codice è open source: repository di PandasAI. L'accoglienza delle ultime settimane è andata molto oltre le mie aspettative, e le issue aperte dagli utenti stanno già orientando la roadmap. In alcuni punti è ancora acerbo, ma è proprio a questo che servono i primi utenti e le segnalazioni di bug: se trovi qualcosa che non va, apri una issue; se lo sistemi tu, manda pure una PR.