Background: sono uno scienziato di dati in una startup ad Austin e vengo dalla scuola di specializzazione (fisica). Uso Python quotidianamente per l'analisi dei dati, ma uso R un po '. Uso anche C # /. NET e Java (quasi ogni giorno), ho usato molto C ++ nelle scuole superiori.
Penso che il problema principale con l'utilizzo di Python per i numeri (sopra R) sia la dimensione della comunità di utenti. Dal momento che la lingua è in circolazione da sempre, molte persone hanno fatto cose che probabilmente vorrai fare. Ciò significa che, di fronte a un problema difficile, puoi semplicemente scaricare il pacchetto e metterti al lavoro. E R "funziona": gli dai un set di dati e sa quali statistiche di riepilogo sono utili. Gli dai dei risultati e sa quali trame vuoi. Tutte le trame comuni che vorresti fare sono lì, anche alcune piuttosto esoteriche che dovrai cercare su Wikipedia. Bello come scipy / numpy / panda / statsmodels / ecc. sono per Python, non sono a livello della libreria R standard.
Il vantaggio principale di Python su R è che è un vero linguaggio di programmazione nella famiglia C. Si ridimensiona facilmente, quindi è concepibile che qualsiasi cosa tu abbia nella tua sandbox possa essere utilizzata in produzione. Python ha l'orientamento agli oggetti integrato, al contrario di R dove sembra una specie di ripensamento (perché lo è). Ci sono anche altre cose che Python fa bene: il threading e l'elaborazione parallela sono abbastanza facili, e non sono sicuro che sia così in R. E anche imparare Python ti dà un potente strumento di scripting. Ci sono anche IDE (gratuiti) davvero buoni per Python, molto migliori se sei disposto a pagare (meno di $ 100), e non sono sicuro che sia così per R - l'unico R IDE che conosco è R Studio, che è abbastanza buono, ma non è buono come PyDev + Eclipse, nella mia esperienza.
Aggiungerò questo un po 'come un kicker: poiché sei ancora a scuola, dovresti pensare ai lavori. Troverai più offerte di lavoro per sviluppatori Python altamente qualificati di quanto non lo troverai per sviluppatori R altamente qualificati. Ad Austin, i lavori per gli sviluppatori di Django stanno cadendo dal cielo. Se conosci R davvero bene, ci sono alcuni posti in cui sarai in grado di capitalizzare quell'abilità (Revolution Analytics, per esempio), ma molti negozi sembrano usare Python. Anche nel campo dell'analisi dei dati / della scienza dei dati, più persone sembrano rivolgersi a Python.
E non sottovalutare il fatto che potresti lavorare con / per le persone che conoscono (diciamo) solo Java. Quelle persone saranno in grado di leggere il tuo codice Python abbastanza facilmente. Questo non sarà necessariamente il caso se fai tutto il tuo lavoro in R. (Questo proviene dall'esperienza.)
Alla fine, questo può sembrare superficiale, ma penso che la documentazione di Python e le convenzioni di denominazione (che sono rispettate religiosamente, si scopre) sia molto più bella dell'utilitaria R doc. Questo sarà discusso caldamente, ne sono certo, ma l'enfasi in Python è la leggibilità. Ciò significa che gli argomenti delle funzioni di Python hanno nomi che puoi leggere e che significano qualcosa. In R, i nomi degli argomenti sono spesso troncati --- L'ho trovato meno vero in Python. Questo può sembrare pedante, ma mi fa impazzire scrivere cose come 'xlab' quando potresti facilmente nominare un argomento 'x_label' (solo un esempio) --- questo ha un effetto enorme quando stai cercando di imparare un nuova API modulo / pacchetto. Leggere R doc è come leggere le pagine man di Linux --- se questo è ciò che fa galleggiare la tua barca, allora più potenza per te.
Detto questo, suggerirei quanto segue (che è anche il mio flusso di lavoro tipico): poiché conosci Python, utilizzalo come primo strumento. Quando trovi Python carente, impara abbastanza R per fare quello che vuoi, e poi:
- Scrivi gli script in R ed eseguili da Python usando il modulo subprocess, oppure
- Installa il modulo RPy.
Usa Python per ciò che è bravo in Python e colma le lacune con uno dei precedenti. Questo è il mio normale flusso di lavoro --- Di solito uso R per tracciare le cose e Python per il sollevamento di carichi pesanti.
Per riassumere: a causa dell'enfasi di Python sulla leggibilità (cerca su Google "Pythonic"), la disponibilità di buoni IDE gratuiti, il fatto che sia nella famiglia di lingue C, la maggiore possibilità che sarai in grado di capitalizzare lo skillset e il migliore stile di documentazione del linguaggio, suggerirei di rendere Python il tuo punto di riferimento e di fare affidamento su R solo quando necessario.
Ok, questa è (di gran lunga) la mia risposta più popolare in assoluto su un sito stack, e non è nemmeno il n. 1 :) Spero che questo abbia aiutato alcune persone lungo il percorso.
Ad ogni modo, sono giunto alla seguente conclusione dopo diversi anni nel settore:
Questa è probabilmente la domanda sbagliata da porre.
Chiedere "dovrei imparare questa particolare tecnologia" è una cattiva domanda. Perché?
- Cambiamenti tecnologici. Dovrai sempre imparare un'altra tecnologia. Se vai a lavorare su Twitter, eseguono Scala. Alcuni posti sono negozi Python. Ad alcuni posti non importa. Non verrai assunto perché conosci o non conosci un particolare pezzo di tecnologia - se non puoi imparare una nuova tecnologia, puoi (e dovresti) essere licenziato. È come se uscisse una nuova chiave a tubo, e tu sei un idraulico, e non riesci a capire come funziona la nuova chiave a tubo, probabilmente sei un idraulico piuttosto schifoso.
- Data la scelta di "Imparo questa tecnologia" o "Trascorro più tempo a risolvere problemi reali", dovresti sempre scegliere quest'ultima, senza eccezioni.
Come data scientist, il tuo compito è risolvere i problemi . Quel po 'di saggezza è praticamente sempre perso in ogni conferenza o incontro a cui vai - ogni discorso sui "big data" che abbia mai visto si è concentrato sulla tecnologia, non sulla risoluzione dei problemi. L'effettiva risoluzione dei problemi viene generalmente retrocessa in alcune diapositive alla fine:
[Talk title = "Deep learning at Cool New Startup"] ... [45 minuti di diagrammi e tecno-babele durante i quali esco e controllo il mio telefono] ... E, dopo aver implementato il nostro cluster Hadoop e [Ben zone fuori di nuovo] possiamo eseguire la nostra routine di apprendimento profondo, [svegliati: ecco perché sono venuto!] i cui dettagli sono proprietari. Domande?
Questo dà una brutta impressione che il campo riguardi la tecnologia, e non è vero. Se sei davvero bravo a Scala, o Python o R, ma sei davvero cattivo nel risolvere i problemi , diventerai un pessimo scienziato di dati .
Paco Nathan era ad Austin alcuni mesi fa in una lunga conferenza "big data" e ha detto qualcosa del tipo "La chimica non riguarda le provette". Questo in sostanza lo riassume: la scienza dei dati non riguarda Scala, o Hadoop o Spark, o qualsiasi altra tecnologia del du-pop. Alla fine, voglio assumere persone che pensano, non persone che sono abili nell'usare Stack Overflow per apprendere i toolkit.
Allo stesso modo, se vai a un colloquio di lavoro e non ti assumono solo perché non conosci un linguaggio di programmazione, allora quella società fa schifo . Non capiscono cosa significhi "data scientist", ed è probabilmente meglio per te se non ha funzionato.
Infine, se le tue capacità di problem solving sono marginali (sii onesto con te stesso) o ti piace davvero il lato tecnologico delle cose o l'apprendimento della tecnologia è ciò che ami davvero (di nuovo, sii onesto) allora impara un sacco di tecnologia. Sarai sempre in grado di trovare ruoli di tipo "ingegnere dei dati" adatti al tuo set di abilità. Non è una brutta cosa, i data engineer ingrassano le ruote e ti permettono di fare il tuo lavoro come data scientist. (La differenza è simile all'architetto del software rispetto al team di sviluppo.)