Le migliori lingue per il calcolo scientifico [chiuso]


10

Sembra che la maggior parte delle lingue abbia un certo numero di librerie di informatica scientifica disponibili.

  • Python ha Scipy
  • Rust ha SciRust
  • C++ha diversi inclusi ViennaCLeArmadillo
  • Javaha Java Numericse Coltcosì come molti altri

Per non parlare di linguaggi simili Re Juliaprogettati esplicitamente per il calcolo scientifico.

Con così tante opzioni come scegliere la lingua migliore per un'attività? Inoltre quali lingue saranno le più performanti? Pythone Rsembra avere la maggiore trazione nello spazio, ma logicamente un linguaggio compilato sembra che sarebbe una scelta migliore. E qualcosa riuscirà mai a superare Fortran? Inoltre, le lingue compilate tendono ad avere un'accelerazione GPU, mentre le lingue interpretate piacciono Re Pythonnon lo fanno. Cosa devo prendere in considerazione quando scelgo una lingua e quali lingue offrono il miglior equilibrio tra utilità e prestazioni? Inoltre ci sono lingue con significative risorse scientifiche di calcolo che mi sono perso?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
Non ci sono domande qui. Se hai bisogno di fare ricerche di base sul linguaggio di programmazione, è meglio leggere Wikipedia piuttosto che aspettare che qualcuno si presenti qui per spingere il suo hobby-cavallo.
Dirk Eddelbuettel,

@DirkEddelbuettel Ottimo punto. Ho pensato che fosse meglio provare a produrre contenuti piuttosto che perfezionarli a questo punto nella Beta, ma non conosco una grande quantità di beta SE. È stata una buona mossa da parte mia o no?
indico,

1
Guarda questi numeri.
Emre,

@DirkEddelbuettel non ti sbagli, ma la mia speranza era quella di favorire una discussione sulle caratteristiche e gli strumenti utili associati a varie lingue. Il linguaggio che usi è uno strumento importante nella scienza dei dati, quindi il mio pensiero era che le persone potessero discutere gli strumenti che preferivano e che qui ci sarebbero benefici oggettivi, come risorsa per coloro che cercavano di tentare un lavoro simile.
infuriaSloth il

1
@indico Prova cran.r-project.org/web/packages/overlap/index.html che è solo il primo che mi è capitato di scegliere a caso. Ma davvero, ho conosciuto personalmente molti statistici che hanno scritto pacchetti R. Nessuno di loro ha ancora scritto un pitone. Per ampliare un po 'la conversazione, kdnuggets.com/2013/08/… è interessante.
Lembik,

Risposte:


12

Questa è una domanda piuttosto massiccia, quindi non si intende che sia una risposta completa, ma si spera che ciò possa aiutare a informare la pratica generale nel determinare lo strumento migliore per il lavoro quando si tratta di scienza dei dati. In generale, ho un elenco relativamente breve di qualifiche che cerco quando si tratta di qualsiasi strumento in questo spazio. In nessun ordine particolare sono:

  • Prestazioni : fondamentalmente si riduce alla velocità con cui il linguaggio esegue la moltiplicazione matriciale, poiché questo è più o meno il compito più importante nella scienza dei dati.
  • Scalabilità : almeno per me personalmente, ciò si riduce alla facilità di costruzione di un sistema distribuito. Questo è un posto dove lingue come Juliadavvero brillano.
  • Community : con qualsiasi lingua, stai davvero cercando una community attiva che ti possa aiutare quando rimani bloccato usando qualsiasi strumento tu stia usando. Qui è dove si pythonspinge molto più avanti della maggior parte delle altre lingue.
  • Flessibilità : niente è peggio che essere limitato dalla lingua che si utilizza. Non succede molto spesso, ma cercare di rappresentare le strutture grafiche haskellè un dolore noto, ed Juliaè pieno di molti dolori delle architetture di codice a causa dell'essere un linguaggio così giovane.
  • Facilità d'uso : se si desidera utilizzare qualcosa in un ambiente più ampio, accertarsi che l'installazione sia semplice e che possa essere automatizzata. Niente è peggio che dover impostare una build finnicky su una mezza dozzina di macchine.

Ci sono un sacco di articoli là fuori su prestazioni e scalabilità, ma in generale vedrai un differenziale di prestazioni di forse 5-10 volte tra le lingue, che può o meno avere importanza a seconda della tua specifica applicazione. Per quanto riguarda l'accelerazione GPU, cudamatè un modo davvero semplice per farlo funzionare python, e la cudalibreria in generale ha reso l'accelerazione GPU molto più accessibile di prima.

Le due metriche principali che utilizzo sia per la community che per la flessibilità sono quelle di esaminare il gestore dei pacchetti della lingua e le domande relative alla lingua in un sito come SO. Se ci sono molte domande e risposte di alta qualità, è un buon segno che la comunità è attiva. Anche il numero di pacchetti e l'attività generale su tali pacchetti possono essere un buon proxy per questa metrica.

Per quanto riguarda la facilità d'uso, sono fermamente convinto che l'unico modo per sapere effettivamente è configurarlo da soli. C'è molta superstizione attorno a molti strumenti di Data Science, in particolare cose come database e architettura di calcolo distribuita, ma non c'è modo di sapere davvero se qualcosa è facile o difficile da configurare e distribuire senza semplicemente costruirlo da soli.


Per aggiungere a questa risposta: in termini di scalabilità, Scalae Govale la pena menzionare.
Marc Claesen,

Aggiungerei chiarezza e brevità (legate alla sintassi e all'architettura del linguaggio, ma non solo). Essere in grado di scrivere velocemente e leggere senza dolore fa una grande differenza (poiché il tempo dei programmatori è più costoso del tempo della macchina).
Piotr Migdal,

5

La lingua migliore dipende da cosa vuoi fare. Prima osservazione: non limitarti a una lingua. Imparare una nuova lingua è sempre una buona cosa, ma a un certo punto dovrai scegliere. Le strutture offerte dalla stessa lingua sono una cosa ovvia da tenere in considerazione, ma a mio avviso quanto segue è più importante:

  • librerie disponibili : devi implementare tutto da zero o puoi riutilizzare le cose esistenti? Nota che queste librerie non devono necessariamente essere nella lingua che stai prendendo in considerazione, a condizione che tu possa interfacciarti facilmente. Lavorare in una lingua senza accesso alla biblioteca non ti aiuterà a fare le cose.
  • numero di esperti : se desideri sviluppatori esterni o inizi a lavorare in gruppo, devi considerare quante persone conoscono effettivamente la lingua. A titolo di esempio estremo: se decidi di lavorare in Brainfuck perché ti piace, sappi che probabilmente lavorerai da solo. Esistono molti sondaggi che possono aiutare a valutare la popolarità delle lingue, incluso il numero di domande per lingua su SO.
  • toolchain : hai accesso a buoni debugger, profiler, strumenti di documentazione e (se ti interessa) IDE?

Sono consapevole che la maggior parte dei miei punti è a favore di lingue consolidate. Questo è dal punto di vista del "fare le cose".

Detto questo, personalmente credo che sia molto meglio acquisire competenze in una lingua di basso livello e in una lingua di alto livello:

  • basso livello: C ++, C, Fortran, ... con il quale è possibile implementare determinati hot spot di profilazione solo se necessario perché lo sviluppo in queste lingue è in genere più lento (sebbene questo sia oggetto di dibattito). Queste lingue rimangono il re della collina in termini di prestazioni critiche e probabilmente rimarranno in cima per molto tempo.
  • alto livello: Python, R, Clojure, ... per "incollare" elementi insieme e fare cose critiche non prestazionali (pre-elaborazione, gestione dei dati, ...). Trovo che questo sia importante semplicemente perché è molto più facile fare rapido sviluppo e prototipazione in questi linguaggi.

4

Per prima cosa devi decidere cosa vuoi fare, quindi cercare lo strumento giusto per quell'attività.

Un approccio molto generale è usare R per le prime versioni e vedere se il tuo approccio è corretto. Manca un po 'di velocità, ma ha comandi molto potenti e librerie di componenti aggiuntivi, che puoi provare praticamente qualsiasi cosa con esso: http://www.r-project.org/

La seconda idea è che se vuoi capire gli algoritmi dietro le librerie, potresti voler dare un'occhiata alle Ricette Numeriche. Sono disponibili per diverse lingue e sono gratuiti per l'apprendimento. Se si desidera utilizzarli in prodotti commerciali, è necessario acquistare una licenza: http://en.wikipedia.org/wiki/Numerical_Recipes

La maggior parte delle volte le prestazioni non saranno il problema, ma troveranno gli algoritmi e i parametri giusti per loro, quindi è importante avere un linguaggio di scripting veloce invece di un programma mostruoso che deve prima compilare 10 minuti prima di calcolare due numeri e pubblicare il risultato.

E un grande vantaggio nell'uso di R è che ha funzioni o librerie integrate per quasi ogni tipo di diagramma di cui potresti aver bisogno per visualizzare i tuoi dati.

Se hai una versione funzionante, è quasi facile portarlo in qualsiasi altra lingua che ritieni sia più performante.

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.