Perché le aziende Internet preferiscono Java / Python per il lavoro di data scientist?


53

Vedo molte volte nella descrizione del lavoro uno scienziato di dati che chiede esperienza in Python / Java e ignora R. Di seguito è un'e-mail personale che ho ricevuto dal capo scienziato di dati di una società per la quale ho fatto domanda tramite linkedin.

X, grazie per esserti connesso ed esprimere interesse. Hai buone capacità di analisi. Tuttavia, tutti i nostri data scientist devono possedere buone capacità di programmazione in Java / Python in quanto siamo un'organizzazione Internet / mobile e tutto ciò che facciamo è online.

Mentre rispetto la decisione del capo scienziato di dati, non sono in grado di avere un quadro chiaro di quali sono i compiti che Python può fare che R non può fare. Qualcuno può preoccuparsi di elaborare? In realtà, sono impaziente di imparare Python / Java, a condizione di avere un po 'più di dettagli.

Modifica: ho trovato un'interessante discussione su Quora. Perché Python è un linguaggio di scelta per i data scientist?

Edit2: Blog di Udacity su lingue e librerie per l'apprendimento automatico


8
Python è un buon compromesso: fornisce molte librerie (non standard) per la datascience (panda, scikit, ...) e molti processi industriali sono già codificati in python.
Manu H,

4
"i nostri data scientist devono avere buone capacità di programmazione in Java / Python in quanto siamo un'organizzazione Internet / mobile e tutto ciò che facciamo è online" è un enorme non-sequitur - la conclusione non segue dalla premessa. Sospetto che il CDS stia solo cercando di sbarazzarsi di te.
Spacedman

5
@ManuH Se per "non standard" intendi "non nella libreria standard", hai ragione. Ma quegli strumenti ottengono un uso piuttosto diffuso e sono sicuramente elementi base della lingua. numpy attualmente ha oltre 100.000 domande su SO, Panda ha 74.000. Penso che potresti certamente sostenere che sono standard del settore . (Almeno per quanto riguarda lo sviluppo del software. Difficilmente mi definirei un "scienziato di dati.")
jpmc26

2
"Data Scientist" non è un termine ben definito. Data Scientist è fondamentalmente qualcuno che può fare cose utili con i dati. Non devono utilizzare pacchetti di apprendimento automatico o statistici. Qualcuno potrebbe usare Java / Scala / Spark / qualunque cosa per gestire grandi quantità di dati e ottenere informazioni utili senza alcun apprendimento automatico.
Akavall,

2
@ jpmc26 Sì, intendevo dire. Ora mi rendo conto che anche le biblioteche che non hanno ancora raggiunto gli standard del settore potrebbero essere menzionate (un altro argomento per Python)
Manu H

Risposte:


67

Quindi puoi integrarti con il resto della base di codice. Sembra che la tua azienda usi un mix di Java e Python. Cosa farai se un piccolo angolo del sito necessita dell'apprendimento automatico; passare i dati con un database o una cache, passare a R e così via? Perché non fare tutto nella stessa lingua? È più veloce, più pulito e più facile da mantenere.

Conosci qualche compagnia online che gira esclusivamente su R? Neanche io...

Tutto ciò che diceva Java è l'ultima lingua in cui farei scienza dei dati.


1
Stavo per dire che un'architettura orientata ai servizi aiuta anche a collegare le tecnologie. PMML è un po 'aziendale; Non l'ho usato, ma il tuo è un negozio Java, le lingue della madre impresa, quindi non sai mai ...
Emre,

3
@Enthusiast non dimenticare che puoi eseguire R sotto Python usando RPy2 (per esempio), quindi potresti finire (come ho fatto in un precedente lavoro) eseguendo modelli scritti in R tramite Python in modo che possano essere presentati attraverso un'interfaccia web via Django.
MD-Tech,

2
Abbiamo costruito il modello in file .r in testo normale che sono stati caricati nell'interprete R per testare (e per facilitare la costruzione). Mentre questo veniva creato e testato, abbiamo creato un progetto Python Django con una sezione che faceva riferimento a RPy2 e creava oggetti RPy2. Questi oggetti sono stati quindi utilizzati per caricare i file R nello stesso modo in cui li si caricerebbe nell'interprete in modo da poter accedere alle funzioni che racchiudevano il modello. Potremmo quindi passare i dati dal database a R tramite Python. Il layer Python ci ha fornito il frontend Web con django e il controllo del database, ecc.
MD-Tech,

1
@Enthusiast I risultati del modello sono stati restituiti dalla R all'interno di RPy2 e presentati nel front-end in vari modi, principalmente grafici.
MD-Tech,

2
@Enthusiast Era una rete bayesiana per la finanza ma non posso dire altro. Il modello è stato scritto in dritto R. Solo testo normale; Lo stavo modificando in Vim ogni volta che ne avevo bisogno, ed è stato "distribuito" caricando il codice R, come testo, in RPy2 usando source ("our_code.r") sugli oggetti RPy2. È stato fatto in questo modo per consentirci di modificare il modello dal vivo. Questa non è una risposta a questa domanda; è una risposta a una che non è stata chiesta;)
MD-Tech,

24

Potrebbero esserci molte ragioni come:

  1. Flessibilità della forza lavoro: un programmatore Java / Python può essere spostato facilmente verso altre attività o progetti.

  2. Disponibilità dei candidati: ci sono molti programmatori Java / Python. Non vuoi introdurre un nuovo linguaggio di programmazione per scoprire in seguito che non ci sono lavoratori qualificati o che sono semplicemente troppo costosi.

  3. Integrazione ed ETL: a volte ottenere i dati con la giusta qualità è la parte più difficile del progetto. Quindi è naturale usare la stessa lingua del resto dei sistemi.

  4. Definizione del modello di business: la maggior parte delle regole e dei modelli di business sono già scritti in queste lingue.

  5. Semplicemente mantenendo le cose semplici. È già abbastanza difficile essere aggiornati con le tecnologie. Una diversa base di linguaggio può essere caotica. R per questo, Ruby per quello, Scala, Clojure, F #, Swift, Dart ... Potrebbero aver bisogno di server diversi, percorsi diversi, un inferno da amministrare. Tutti hanno i propri IDE con strumenti e plugin (non sempre gratuiti). Guarda alcuni punti di zio Bob sulla scelta delle lingue e le nuove tecnologie

Quindi, anche se hai un vantaggio di produttività del 5% - 15% usando R per l'attività specifica, potrebbero preferire uno strumento che fa il lavoro, anche se non nel modo più efficiente.


Sebbene sia vero, nessuna delle precedenti risposte risponde alla domanda. Ottenere i dati riduce il 99% dei tempi di interrogazione di un database o di lettura di .csvfile, al quale scopo R è in realtà lo strumento più adatto sul mercato. Disponibilità dei candidati: che ci sono più programmatori Java che programmatori R non implica che devi scartare un candidato R se ne hai uno. Non importa in che modo lo scienziato esegue i propri esercizi purché dispongano di codice leggibile che può essere eseguito da alcuni server (o qualsiasi altra cosa che la società sta eseguendo).
gented

Ovviamente non dovresti scartare il candidato. La persona è molto più importante dello strumento. Il loro team può imparare R e il candidato può imparare Java / Python. Ma ci vorrà del tempo, il che significa denaro.
Borjab,

Il punto che certamente non sono d'accordo è che non gli dispiace la lingua. Quando l'unico membro del team che conosce R non è festivo e deve apportare modifiche, il capo non sarà contento. O semplicemente chiedi al team "Oh fantastico, dobbiamo imparare una nuova lingua solo perché quella nuova fa le cose in questo modo". Potrebbe essere l'amministrazione del server un altro reparto e nuovi tipi di server richiedono nuove analisi, procedure, ecc. Potrebbe essere necessario il via libera dalla sicurezza IT per utilizzare un nuovo linguaggio.
Borjab,

@GennaroTerman il codice scritto dal candidato deve essere mantenibile da altri programmatori, lavorando insieme e anche in futuro quando l'autore originale passerà. Non è sufficiente avere un candidato che conosce bene una tecnologia, è comunque importante considerare quanto sarà facile assumere un altro candidato che conosca bene la tecnologia quando ne avrai bisogno. ovviamente, se c'è una buona ragione, può essere introdotta una nuova tecnologia di nicchia, ma deve esserci una buona ragione per superare tali rischi aziendali.
Peteris,

Si potrebbe avere un miglioramento della produttività $ x utilizzando R, ma è di alcun aiuto se si hanno a spendere $ 2x di sforzo in modifiche alle loro flusso di lavoro. Perché dovrebbero farlo, soprattutto se potessero assumere qualcun altro che potrebbe non costare loro $ 2x?
user1908704

14

È in generale vero che per esercizi puramente di scienza dei dati e statistica R offre gli data.tablestrumenti e i metodi migliori e più veloci (specialmente se si utilizza il pacchetto), che altrimenti sarebbero più pesanti da implementare in Python (suppongo che da Python intendiamo tutti Panda, sebbene ). La maggior parte dei data scientist utilizza infatti R per eseguire i propri modelli e calcoli, o semplicemente per vedere come si comportano i dati.

Una volta che l'esercizio è completo, è tempo di renderlo disponibile per il resto delle persone che devono usarlo (cioè per dispiegare); a questo scopo è spesso preferibile inviare il codice in Python per due motivi principali:

  1. La maggior parte delle architetture sono scritte in Python o sono compatibili con Python, quindi sarebbe più semplice implementare modelli scritti nativamente in quel linguaggio.
  2. La sintassi e la grammatica R sono estremamente complicate. Personalmente preferisco fortemente R diverso da qualsiasi altra cosa, ma devo comunque ammettere che la sintassi non è molto semplice e ha una curva di apprendimento molto scelta.

Quanto detto sopra, è ancora vero che si può facilmente tradurre il codice R in qualsiasi altra lingua, a condizione che siano disponibili metodi, librerie e pacchetti (in Python la maggior parte di essi è, quindi non è affatto un problema). Molte infrastrutture e database supportano il codice R sottostante, quindi la portabilità non è davvero un problema, soprattutto se si devono solo presentare i risultati dei calcoli (a tal fine, nessuno vede davvero il codice sottostante comunque).

Java non è quasi utile per la pura scienza dei dati stessa (anche se la Stanford University ha una raccolta di librerie NLP di machine learning scritte in Java, per quanto ne ricordo - ma per favore controlla). L'unico motivo per cui può essere richiesto è solo che il resto dell'azienda lo utilizza in larga misura e non vuole sostituirlo con qualcosa di nuovo.


Grazie per aver condiviso la tua prospettiva ed esperienza !! Questo è utile Dal tuo secondo ultimo paragrafo, presumo tu stia parlando di scikit-learn? o intendevi RPy? Ti interessa elaborare?
Entusiasta il

1
Intendo semplicemente che qualunque cosa tu stia facendo in R, molto probabilmente esiste un pacchetto Python simile che fa lo stesso lavoro. Panda copre la maggior parte delle cose che data.tableoffre; scikit-learn, come hai già detto, è un altro esempio, ma ce ne sono molti altri a seconda del caso.
gented

1
Esattamente quello che faccio. La ricerca in R, una volta terminata, si traduce in Python per integrarsi nella base di codice. Ma @Enthusiast se puoi fare lo stesso in quella compagnia dipende dalla sua cultura. Molte persone usano il linguaggio di programmazione usato dal loro capo. E Python non è difficile da imparare.
jf328,

1
@GennaroTerman: "Intendo semplicemente che qualunque cosa tu stia facendo in R, molto probabilmente esiste un pacchetto Python simile che fa lo stesso lavoro". In realtà non sono molto d'accordo con questa affermazione. Il più grande vantaggio con R è che il 90% degli statistici pubblica il loro ultimo e "più grande" in R, piuttosto che in Python. Se questi metodi prendono piede, possono eventualmente raggiungere Python. Ma questo è anche un vantaggio per Python; ci sono molti pacchetti di statistiche R che sono solo spazzatura, mentre penso che i pacchetti di statistiche Python abbiano più probabilità di essere i metodi provati e veri.
Cliff AB,

"La sintassi e la grammatica R sono estremamente complicate. Personalmente, io preferisco fortemente la R, ma devo ammettere che la sintassi non è molto semplice e ha una curva di apprendimento molto scelta." Entrambi sembrano opinioni, ma una è vestita come un'affermazione obiettiva e l'altra si oppone. Sono sconcertato. Sento anche che la sintassi e gli idiomi di Python sono più complicati (enfasi OOP, per uno), quindi sono doppiamente confuso da questa risposta.
stella luminosa il

7

Ho visto diverse aziende che usano il titolo Data Scientist per ruoli di tipo "Ingegnere dei dati". Soprattutto nello spazio dei big data.

Se la società sta usando Hadoop o un framework distribuito come Spark per fare le sue analisi in allora Java o Python (o probabilmente Scala) sarebbero i linguaggi che avrebbero più senso.


In questo caso so con certezza che il ruolo era di modellizzazione poiché richiedeva abilità di apprendimento automatico e un elenco di tecniche specificato.
Entusiasta

Potrebbero continuare a farlo all'interno di queste tecnologie anche se utilizzano librerie Java / Python, qualcosa come H20 o MLlib.
Greenpenguin,

4

Giava

Dovrei essere in disaccordo con gli altri poster sulla domanda Java. Esistono alcuni database noSQL (come hadoop) di cui è necessario scrivere lavori mapreduce in java . Ora puoi usare HIVE per ottenere più o meno lo stesso risultato.

Pitone

Il dibattito su Python / R continua. Entrambi sono linguaggi estensibili, quindi potenzialmente entrambi potrebbero avere la stessa capacità di elaborazione. Conosco solo R e la mia conoscenza di Python è piuttosto superficiale. Parlando come un piccolo imprenditore, non vuoi avere troppi strumenti nella tua attività, altrimenti ci sarà una generale mancanza di profondità e difficoltà a sostenerli. Penso che si ridurrà alla conoscenza approfondita degli strumenti nel team. Se il team si concentra su Python, assumere un altro scienziato di dati Python avrà senso in quanto possono interagire con la base di codice esistente e il codice dell'esperimento storico.


2

Almeno per il mio team attuale (~ 80 data scientist e ingegneri), non abbiamo questa preferenza. La metà dei data scientist qui usa R e un'altra metà usa Python. Molti possono codificare in entrambi. Distribuiamo codice Python e R in produzione.

Non credo che nessuno dei nostri data scientist utilizzi Java. Se hanno bisogno di gestire i big data, possono usare SparkSQL o PySpark. Il team di ingegneria dei dati utilizza un mix di Java / Scala / Python / Go.

Se sei uno dei pochi addetti ai dati in una piccola azienda, posso capire perché richiedono determinate competenze linguistiche in modo da poter fare sia scienza dei dati che ingegneria. Tuttavia, penso che la maggior parte delle piccole aziende non disporrà di dati sufficientemente grandi che Python o R non possano gestire in produzione.


Puoi approfondire il tipo di attività svolta dalla tua organizzazione? Ed è in casa lavoro ML o per clienti esterni?
Entusiasta il

1
@Enthusiast Commercio al dettaglio. 100% per ML interno.
salvadanaio

0

Il mio punto di vista come programmatore generico con una piccola esperienza in R: R è eccellente per la scienza dei dati, ma è orientato verso le persone che interpretano manualmente i dati. Se si desidera utilizzare i risultati per qualcosa di automatizzato, è necessario interfacciarsi con qualcos'altro e sarà difficile fare qualcos'altro in un linguaggio specifico del problema come R. Riesci a creare un sito Web in R? :) D'altra parte, Python ha librerie già pronte per le cose di scienza dei dati ed è un linguaggio di programmazione per scopi generici che non ti ostacola nel fare qualcos'altro. Per quanto riguarda Java, è utile per grandi progetti di programmazione con centinaia di migliaia o milioni di righe di codice. Se la parte di scienza dei dati deve interfacciarsi con quella, allora può avere senso fare tutto in Java.

Gemito casuale: perché devo accedere a ciascun sito StackExchange separatamente?


4
Il codice R può essere facilmente eseguito da quasi tutti gli strumenti disponibili sul mercato. Java non è quasi utile per la scienza dei dati.
gented

1
@GennaroTerman JAVA è utile per la codifica negli strumenti bigdata. Quindi in parte utile per l'interrogazione dei dati.
Entusiasta

-1

Gli strumenti in Python sono semplicemente migliori di R. La comunità R è piuttosto stagnante mentre la comunità Python si sta evolvendo molto rapidamente. Soprattutto negli strumenti per la scienza dei dati.
Inoltre Python funziona in modo molto più semplice con tutto ciò che lo circonda. È possibile raschiare facilmente il Web, connettersi a database e così via. Ciò rende la prototipazione molto veloce.
E se disponi di un prototipo funzionante e ti preoccupi di renderlo più veloce o di integrarlo nel flusso di lavoro aziendale, di solito viene reimplementato in Java.

R ha alcuni strumenti e visualizzazioni accurati, ma non è eccezionale creare nuove cose al suo interno.


4
Questo è completamente sbagliato in tutti i modi.
gented
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.