Python

Quando l’analisi deve diventare software

Python non nasce per l'analisi dei dati: nasce come linguaggio di programmazione a uso generale, e proprio per questo oggi si trova ovunque, dai siti ai sistemi di automazione ai modelli di apprendimento automatico. La parte statistica è arrivata dopo, costruita da chi quei dati li doveva usare dentro un software.

Dove è più a suo agio

Quando l'analisi è un pezzo di un sistema più grande. Un processo che gira ogni notte, un servizio che riceve richieste e risponde, un'estrazione che pesca da un gestionale e scrive da un'altra parte. Lì Python è nel suo ambiente naturale, perché è un linguaggio con cui si costruiscono applicazioni, non solo analisi.

L'ecosistema in breve

Pandas e polars per manipolare tabelle, pyarrow e duckdb per i file di grandi dimensioni, scikit-learn per i modelli predittivi, statsmodels per la parte inferenziale classica, i taccuini Jupyter per lavorare in modo interattivo. Per il trattamento del testo e per i modelli linguistici, oggi quasi tutto nasce prima qui.

Che rapporto ha con R

Non è una scelta di campo. R resta più compatto quando il lavoro è statistica, grafica e documento finale: la distanza fra l'idea e il grafico pubblicabile è più breve. Python è più solido quando il risultato deve diventare un pezzo di infrastruttura che gira da solo.

Quando il risultato è un documentoR arriva prima: dalla stessa sessione escono analisi, grafici e report.DatiAnalisiGrafici e tabelleDocumentoQuando il risultato è un sistema che giraPython è più solido: l'analisi diventa un pezzo di software.DatiModelloServizioApplicazioneNei progetti reali i due percorsi convivono: spesso si passa dall'uno all'altro nello stesso flusso.
I due percorsi tipici di un progetto di analisi, e il tratto in cui ciascun linguaggio costa meno fatica.

Il punto delicato: l'ambiente

Un'analisi rifatta fra un anno deve dare lo stesso risultato, e questo dipende dalle versioni dei pacchetti usati. La soluzione è sempre la stessa: dichiarare l'ambiente in un file che viaggia insieme al progetto, con gli ambienti virtuali e un elenco di dipendenze in Python, con renv in R. Vale per entrambi. In Python la questione si presenta prima, perché i pacchetti principali cambiano più spesso e convivono più modi di installarli, quindi conviene decidere subito quale si usa.

In azienda

È quasi sempre installabile anche dove le politiche informatiche sono restrittive, perché serve ad altri reparti e il permesso in genere esiste già. Resta da verificare quali pacchetti si possono scaricare, perché il blocco di solito è lì, sul repository, non sul linguaggio.

Un esempio: dodici mesi di movimenti in una tabella

Lo stesso archivio di movimenti contabili della scheda SQL e DuckDB, salvato in più file parquet, letto con polars. La domanda è la stessa: quanti movimenti e quale importo totale per ogni mese del 2025.

import polars as pl

monthly = (
    pl.scan_parquet("transactions/*.parquet")
      .filter(pl.col("year") == 2025)
      .group_by(pl.col("date").dt.strftime("%Y-%m").alias("month"))
      .agg(pl.len().alias("n_transactions"),
           pl.col("amount").sum().alias("total"))
      .sort("month")
      .collect()
)

scan_parquet non legge subito i file: prepara il calcolo, e solo collect() lo esegue, leggendo le colonne e le righe che servono. È lo stesso principio di DuckDB, con una sintassi a catena che chi viene da dplyr riconosce in fretta.

Gli errori che si fanno tutti

  • Gli indici che partono da zero. Il primo elemento di una lista è il numero 0, non 1. Per chi arriva da R è l'errore più frequente nelle prime settimane.
  • I tipi letti da un CSV. Codici con zeri iniziali che diventano numeri, date che restano testo. Succede anche in R: conviene dichiarare i tipi delle colonne invece di lasciarli indovinare.
  • Copie e viste in pandas. Modificare un sottoinsieme di una tabella può cambiare l'originale oppure no, e pandas lo segnala con un avviso che spesso viene ignorato. Polars evita il problema perché non modifica le tabelle sul posto.
  • I pacchetti installati nel Python di sistema. Funziona fino al giorno in cui due progetti chiedono versioni diverse dello stesso pacchetto. Un ambiente per progetto, creato con python -m venv .venv, lo evita fin dall'inizio.

Dove si prende

Python è gratuito e si scarica da python.org; i pacchetti si installano dall'archivio PyPI con pip, per esempio pip install polars. Chi usa già Visual Studio Code ha nell'estensione Python tutto ciò che serve per scrivere ed eseguire il codice.

Per imparare

Python for Data Analysis di Wes McKinney, l'autore di pandas, è consultabile gratuitamente online nella terza edizione. Per polars, la guida ufficiale. Per gli ambienti, la pagina su venv della documentazione di Python.

Quando ha senso impararlo

Se il vostro lavoro finisce in un documento, in un report o in un indicatore, R vi porta a destinazione prima. Se il vostro lavoro deve diventare qualcosa che gira senza di voi, Python è la strada.

Volete portare Python nei vostri flussi di lavoro?