[Python] Test statistici

Pietro Battiston ml a pietrobattiston.it
Gio 16 Ott 2014 14:13:34 CEST


Il giorno mer, 15/10/2014 alle 23.07 +0100, enrico franchi ha scritto:
> 
> 
> 2014-10-13 16:29 GMT+01:00 Mauro Alberti <alberti.m65 a gmail.com>:
>         
>         
>         2014-10-13 15:16 GMT+02:00 enrico franchi
>         <enrico.franchi a gmail.com>:
>                 
>                 2014-10-12 22:17 GMT+01:00 Mauro Alberti
>                 <alberti.m65 a gmail.com>:
>                         
>                         
>                         hai preso in considerazione R, che è il
>                         linguaggio statistico open-source più completo
>                         ed usato in accademia, e che volendo è anche
>                         interfacciabile con Python tramite rpy2? Per
>                         analisi statistiche è ottimo e fornisce tutte
>                         le possibili tecniche statistiche, credo ben
>                         più di Python..
>                 
>                 
>                 "Ben piu'" mi sembra eccessivo. Per inciso, sto
>                 vedendo un chiaro trend di Python che soppianta R per
>                 molte delle tradizionali roccaforti di R. Perche' e'
>                 semplicemente piu' facile lavorarci e piu' general
>                 purpose.
>                  
>         
>         
>         Rimanendo ai numeri, per quel che son riuscito a ricuperare
>         velocemente e facendo quindi la tara sia ai numeri sia alla
>         loro interpretazione:
>         - il repository ufficiale dei moduli R, CRAN - Packages
>         (http://cran.r-project.org/web/packages/ ) riporta il numero
>         di 5936 packages
>         - in un repository Python non ufficiale, ma abbastanza
>         completo di moduli (generici) Python, l'Unofficial Windows
>         Binaries for Python Extension Packages
>         (http://www.lfd.uci.edu/~gohlke/pythonlibs/) ho contato circa
>         320 packages. Se i packages Python non considerati in questa
>         collezione fossero un ordine di grandezza superiore a questo
>         numero, il numero totale di moduli Python generali
>         risulterebbe ancora inferiore a quello dei moduli R. 
> 
> 
> Non mi pare che questa cosa dica troppo. Potrei spendere parecchio
> tempo a spiegare il motivo per cui questo confronto numerico non abbia
> particolare senso, ma, sinceramente, non ne ho voglia perche' davvero,
> non credo di essere in grado di convincertene. Per inciso, il senso
> del mio discorso e' che vedo una grossissima crescita di Python
> nell'ambito da paper pubblicati (hey, ma io non seguo molti journal di
> statistica e matematica applicata, magari saro' biased... parecchia
> roba piu' o meno relativa al calderone buzzwordaro del BigData pero'
> si) e quello che vedo in startup e simili. Ovviamente dovrei trovare
> il modo di trovare hard data a sostanziare (il che e' complicato...
> sia perche' molti dati non sono pubblicamente disponibili, sia perche'
> molti altri sono particolarmente difficili da aggregare -- chesso',
> scoprire che nelle resources dei paper ci sono script in Python e/o
> che nel paper si menziona Python, *ma* in un contesto che fa intendere
> che appunto ci stanno facendo sopra statistica). Per cui teniamolo
> come gut feeling che non posso sostanziare... 
> 
> 
> Diciamo brevemente che stai comparando mele con pere e che quello che
> ci interessa e' una ricetta per fare la carbonara.
> 
> 
> In altre parole, il fatto che Python venga sempre piu' adottato per
> fare cose che prima si sarebbero fatte con R non necessariamente ha
> raffronto con l'intero numero di pacchetti prefabbricati che esistono
> per R (in cui stiamo contando, verosimilmente, anche pacchetti per
> fare richieste http (o qualunque altra cosa)) o con il numero di
> pacchetti utili per fare statistica in Python secondo l'autore della
> lista che riporti. 
> 
> 
>         R è meno semplice di Python, è vero, ed anche più lento, p.e.
>         nei plot. Però ha tuttora vari vantaggi, come una buona
>         espressività statistica, una ottima e ricca documentazione dei
>         moduli fatta dagli statistici che creano i packages, e poi un
>         ambiente di plot integrato, il che semplifica parecchio la
>         creazione di plot anche molto sofisticati. Per avere il
>         corrispondente di quest'ultimo in Python ci si deve rivolgere
>         ad IPython.
> 
> 
> E anche qui... niente da dire. Se ti trovi bene con R fai benissimo ad
> usare R e passare a Python o qualunque altra cosa ti sembra piu'
> opportuna. Per il resto, immagino che buona parte di chi voglia fare
> statistica in Python usi appunto tutto lo stack che c'e' a
> disposizione e di conseguenza non vedo problemi nel doversi rivolgere
> ad IPython; specie perche' ci sono almeno 3 distribuzioni di Python
> per fare questo tipo di cose che includono tutto il necessario (di cui
> almeno una interamente free).
>  


Concordo moltissimo (da persona che ha cominciato a fare analisi
statistiche con vari altri linguaggi ma che sta convergendo a Python
anche per quello) sul fatto che il vantaggio enorme di Python sia che è
multipurpose. Anzi, aggiungerò una cosa che forse in questa lista di
informatici open minded suona male, ma il vantaggio di Python non è solo
che il progetto di ricerca completo, dalla lettura dei sensori ai
grafici per il paper,* sarà qualcosa di organico, ma anche semplicemente
che io non devo conoscere più di un linguaggio, cosa che per chi non
programma di professione non è indifferente (capito, Julia?).

Detto fuori dai denti, statsmodels pur facendo passi da gigante resta un
po' più scomodo, come sintassi, delle alternative. Ad esempio ciò che in
STATA è

ols y x

ed in R è

fit <- lm(y ~ x)

in statsmodels è

res = smf.ols(formula='y ~ x', data=df, missing="drop").fit()

... ma questa scomodità è più che compensata dalla versatilità ed
introspezione, secondo me appena ci si muove nell'ordine anche solo
delle decine di righe di codice.

Comunque, che R e STATA implementino ben più metodi statistici di
statsmodels al momento credo sia ancora indiscutibile (infatti mi
succede ancora, ahimé, di dovere utilizzare rpy2). Ed entrambi hanno
dietro una grossa comunità che continua a sfornare funzionalità. Ma
statsmodels cresce ad un ritmo notevole, e se è assurdo confrontare il
numero di pacchetti di R con quelli di Python non è solo perché come fai
notare si confronta pere e mele, ma anche perché la _forza_ di
statsmodels come progetto è proprio che è un tutt'uno organico. Se una
funzionalità c'è, bene, anche perché di norma sarà corredata di
regression test - se non c'è, non c'è. Non si presume che tu recuperi il
pacchetto R semisconosciuto e scarsamente utilizzato, incompatibile con
chissà quali altri pacchetti e con cui quando poi ti scappa fuori il bug
non sai che pesci prendere (esperienza personale). E mi pare che
statsmodels non abbia nulla da invidiare alle alternative in quanto ad
efficienza.

Ultima nota: no, non serve ipython per sparare grafici "molto
sofisticati", serve matplotlib, o al massimo seaborn. Poi certo, da
quando ho scoperto gli ipython notebook non tornerei mai indietro. Ma se
parliamo di componenti indispensabili per la statistica in python, sono
semplicemente scipy, pandas, statsmodels e matplotlib.

ciao

Pietro

* ... e prima o poi, spero, alla stesura del paper stesso - o almeno
così promette ipython!




Maggiori informazioni sulla lista Python