Tra Matlab e Python, quale lingua è buona per l'analisi statistica?


17

Tra Matlab e Python, quale lingua è buona per l'analisi generale dei dati statistici? Quali sono i pro e contro, oltre all'accessibilità, per ciascuno?


2
Questo dovrebbe essere wiki della comunità, IMO.
Shane

Ti andrebbe di spiegare perché non puoi guardare anche R?
Dirk Eddelbuettel

@DirK: Ho appena sentito parlare di R. Inoltre volevo imparare un linguaggio di programmazione come Python, e anche in questo caso non credo che R sia vicino a Python, IMO. Spero che risponda alla tua domanda.

2
Dai un'occhiata qui e su StackOverflow in termini di ciò che le persone raccomandano per l'analisi statistica e la programmazione . Molti di noi pensano che non ci sia vera alternativa a R. Ma proprio come la bellezza, questo è negli occhi di chi guarda, quindi buona fortuna.
Dirk Eddelbuettel,

In termini di geostatistica (in cui ho fatto il mio dottorato di ricerca), penso che R sia molto ben equipaggiato (vedi gstat, geoR ecc.). Almeno non conosco una copertura così completa delle tecniche geostatistiche in Python. E perché R "in nessun posto vicino al pitone"? Ho usato entrambi e per i geostati ritengo che R sia chiaramente superiore.
Paul Hiemstra,

Risposte:


29

Come utente irriducibile di Matlab negli ultimi 10 anni, ti consiglio di imparare Python. Una volta che sei sufficientemente esperto in una lingua, quando lavori in una lingua che stai imparando, sembrerà che non sei abbastanza produttivo e tornerai a utilizzare la tua lingua migliore predefinita. Per lo meno, ti suggerirei di provare a diventare altrettanto competente in diverse lingue (suggerirei anche R).

Cosa mi piace di Matlab:

  • Ne sono abile.
  • È la lingua franca tra gli analisti numerici.
  • lo strumento di profilazione è molto buono. Questa è l'unica ragione per cui utilizzo Matlab anziché l'ottava.
  • Esiste un clone freeware, ottava, che ha una buona conformità con l'implementazione di riferimento.

Cosa non mi piace di Matlab:

  • Non esiste un buon sistema per gestire pacchetti e script di terze parti (gratuiti o meno). Mathworks controlla lo "scambio di file centrale" e l'installazione di pacchetti aggiuntivi sembra molto goffa, niente come l'eccellente sistema di R. Inoltre, Mathworks non ha alcun incentivo a migliorare questa situazione, poiché fa soldi vendendo cassette degli attrezzi, che competono con i pacchetti freeware;
  • Le licenze per il calcolo parallelo in Matlab sono follemente costose;
  • Gran parte del codice m, incluse molte delle funzioni della toolbox e alcuni builtin, sono stati progettati per essere ovviamente corretti, a scapito dell'efficienza e / o dell'usabilità. L'esempio più lampante di ciò è la medianfunzione di Matlab , che esegue una sorta di dati, quindi assume il valore medio . Questo è stato l'algoritmo sbagliato dagli anni '70.
  • salvare grafici su file è alquanto complicato in Matlab.
  • Non ho riscontrato che la mia esperienza utente sia migliorata negli ultimi 5 anni (quando ho iniziato a utilizzare Matlab anziché ottava), anche se Mathworks continua ad aggiungere campane e fischietti. Ciò indica che non sono il loro cliente target, ma stanno cercando di espandere la quota di mercato peggiorando le cose per gli utenti esperti.
  • Ora ci sono 2 modi per eseguire la programmazione orientata agli oggetti in Matlab, il che è al massimo fonte di confusione. Il codice legacy che utilizza il vecchio stile persisterà per qualche tempo.
  • L'interfaccia utente di Matlab è scritta in Java, che ha idee spiacevoli sulla gestione della memoria.

+1, buoni punti. Su questo: "idee spiacevoli sulla gestione della memoria" .. interessante, puoi elaborare?
Ars,

1
la mia memoria sta andando da qualche parte ; la mia esperienza con Java al di fuori dell'uso di Matlab indica che è probabilmente il colpevole, e correre dentro -nojvmsembra aiutare ...
shabbychef,

Il mio esempio preferito di strani codici incorporati MATLAB è shuffle, che riordina i dati con l'ordinamento restituito ordinando un vettore casuale appena creato.

1
@mbq: shufflepotrebbe essere in una cassetta degli attrezzi, non è una matrice di scorta. difficilmente potrebbe essere peggio di builtin randpermche restituisce l'indice di ordinamento di un vettore casuale. Ancora una volta, questo è probabilmente l'algoritmo sbagliato (ho appena appreso della confusione Knuth-Fisher-Yates qui su stats.SE) ..
shabbychef,

1
@mbq: l'altro aspetto positivo randpermè che è influenzato dal seeding di randn, mentre una versione messicana di Knuth-Fisher-Yates forse non può accedere al seme randn "internamente", e probabilmente una versione pura .m di shuffle essere troppo lento.
Shabbychef,

11

Consente di suddividerlo in tre aree (dalla parte superiore della mia testa) in cui la programmazione incontra le statistiche: scricchiolio dei dati, routine numeriche (ottimizzazione e simili) e librerie statistiche (modellazione, ecc.).

Sul primo, la differenza più grande è che Python è un linguaggio di programmazione generico. Matlab è eccezionale fintanto che il tuo mondo è approssimativamente isomorfo a una matrice numerica fortran. Una volta che inizi a gestire il munging dei dati e i problemi correlati, Python supera Matlab. Ad esempio, vedi il libro di Greg Wilson: Data Crunching: Risolvi problemi quotidiani usando Java, Python e altro .

Nel secondo, Matlab brilla davvero con il lavoro numerico. Gran parte della comunità di ricerca lo utilizza e, se stai cercando, alcuni algoritmi relativi a un documento nel rilevamento compresso, è molto più probabile trovare un'implementazione in Matlab. D'altra parte, Matlab è una specie di PHP dell'informatica scientifica - si sforza di avere una funzione per tutto sotto il sole. L'estetica e l'architettura risultanti sono esasperanti se sei un fanatico del linguaggio di programmazione, ma in termini utilitaristici, fa il lavoro. Gran parte di questo è diventato meno vantaggioso con l'ascesa di Numpy / Scipy, è altrettanto probabile trovare librerie di ottimizzazione e apprendimento automatico disponibili per Python. L'interfaccia con C è altrettanto facile in entrambe le lingue.

Sulla disponibilità di librerie statistiche per la modellistica e simili, entrambe sono in qualche modo carenti rispetto a qualcosa come R. (Anche se sospetto che entrambi soddisferanno i bisogni dell'80% delle persone che fanno lavoro statistico.) Per il lato Python, vedi questa domanda : Python come workbench statistico . Per quanto riguarda Matlab, so che esiste una cassetta degli attrezzi per le statistiche, ma permetterò a qualcuno più esperto di riempire gli spazi vuoti (la mia esperienza con Matlab è limitata al lavoro numerico non correlato alle statistiche).


Le cassette degli strumenti di statistica in Matlab sono abbastanza divertenti. C'è qualcosa di simile per R, dove ad esempio puoi provare rapidamente un sacco di adattamenti di funzioni diverse (regressioni)?
Alex R.,

6

Sono anche un appassionato utente di Matlab da oltre 10 anni. Per molti di quegli anni non avevo motivo di lavorare oltre la cassetta degli attrezzi che avevo creato per il mio lavoro. Sebbene siano state create molte funzioni per una cassetta degli attrezzi, spesso avevo bisogno di creare algoritmi per una rapida analisi di inversione di tendenza. Poiché questi algoritmi utilizzano spesso la matematica matriciale, Matlab era il candidato ideale per il mio lavoro. Oltre al mio toolbox Matlab di codice, altri nel mio gruppo hanno lavorato ampiamente in Java poiché c'era una chiara interoperabilità tra le lingue. Per anni sono stato completamente contento di Matlab, ma circa 3 anni fa ho deciso di iniziare la lenta transizione da Matlab e felice di dire che non l'ho aperto da circa un anno. Ecco il motivo della mia mossa:

  • Lavoro con sistemi informatici online e offline, il sistema di licenze è sempre stato un mal di testa. Sembrava sempre che quando avessimo maggiormente bisogno di Matlab, la licenza sarebbe scaduta o improvvisamente avessero problemi. Questo è sempre stato un mal di testa. Inoltre, se mai avessimo bisogno di condividere il codice e l'altra parte non avesse le licenze per le stesse cassette degli strumenti, questo ha creato un mal di testa. Non è gratuito
  • Ho spesso bisogno di creare presentazioni. Anche se Matlab offre numerosi strumenti per la creazione di figure, il che lo rende molto potente per la progettazione di algoritmi, ma salvare la figura in modo tale che possa essere inserito in una presentazione e avere un bell'aspetto non è un compito semplice. Spesso dovevo inserire un file EPS in Adobe Illustrator per rimuovere tutta la spazzatura, correggere i caratteri e ripulire le linee. Ci sono alcuni strumenti che possono essere d'aiuto nello scambio di file (export_fig.m).
  • Ricevo spesso codice Matlab da altri. Quando ciò accade, lo riscrivo quasi sempre perché: la loro API non è compatibile con i miei dati, il loro codice non ha senso, è lento, non produce ciò di cui ho bisogno ... Fondamentalmente le persone che sviluppano in Matlab sono non gli ingegneri del software e Matlab non incoraggiano alcun tipo di principio di progettazione.
  • Sono un utente esperto. Mi piacciono i terminali. Odio la GUI - lo odio. E quando hanno aggiunto il nastro stile "windows", l'ho odiato ancora un po '. Fondamentalmente le loro modifiche alla GUI e la terribile gestione della memoria hanno spinto il mio ultimo pulsante e ho deciso di andarmene. L'uso -nodesktopdell'opzione è buono per la maggior parte del tempo, ma presenta dei problemi.
  • Molte possibilità per progettare funzioni (usando OO o design funzionale), ma nessuna sembra giusta, la maggior parte si sente ad hoc. Non ottengo soddisfazione nel progettare buone funzioni in Matlab
  • La community è grande, ma non è facile condividere e trovare un buon codice. Lo scambio di file non è eccezionale.

Queste sono solo alcune delle mie molte lamentele con Matlab. È un attributo brillante: è facile, davvero facile scrivere codice rapidamente (se non brutto). L'ho lasciato però, e la mia ricerca mi ha guidato attraverso Clojure-> JavaScript-> Python <-> Julia; si, sono stato dappertutto.

  • Clojure: bellissimo linguaggio funzionale. La mia ragione per usare Clojure era la sua capacità di scrivere script su Java. Gran parte della nostra "grande" base di codice è in Java, quindi questo ha molto senso. All'epoca molta elaborazione scientifica non era prontamente disponibile, e neanche molto con la visualizzazione. Ma penso che questo stia cambiando.
  • Javascript: dopo aver visto i benchmark su http://julialang.org/ e da quando ero decisamente interessato alla capacità di visualizzazione di D3 , ho deciso di provare JavaScript. JavaScript è sorprendentemente molto veloce. Ma se vuoi davvero odiare te stesso, impara JavaScript.
  • Python: Python ha una community straordinaria e ha molti grandi progetti in corso. Il notebook IPython è sorprendente per molte ragioni (uno dei quali è semplice copia / passato di figure in powerpoint). Progetti come NumPy / SciPy / Scikit-Learn / Pandas hanno reso Python davvero divertente e facile da usare. È così facile da usare su più core o cluster. Sono stato davvero felice per il passaggio.
  • Julia: Julia è fantastica. Soprattutto per gli utenti Matlab. È nella sua infanzia, quindi molti cambiamenti in corso. Uno dei principali svantaggi di Python è che non ha tutte le funzionalità integrate di Matlab. Sicuramente NumPy / SciPy offrono questa funzionalità, ma non è integrato e devi prendere decisioni sull'opportunità di essere oggetti Python puri o oggetti intorpiditi. Julia ha praticamente tutto ciò che desideri che Python provenga da Matlab. Aspetterei, ma questa è l'opzione migliore per gli utenti Matlab in futuro.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.