In che modo R e Python si completano a vicenda nella scienza dei dati?


54

In molti tutorial o manuali la narrativa sembra implicare che R e Python coesistono come componenti complementari del processo di analisi. A mio avviso non allenato, tuttavia, sembra che entrambe le lingue facciano la stessa cosa.

Quindi la mia domanda è se ci sono nicchie davvero specializzate per le due lingue o se è solo una preferenza personale se usare l'una o l'altra?


2
Questo in realtà non sembra un duplicato di quel thread. Non si tratta di come usare Python per fare statistiche, ma di come Python può integrare R (ovviamente R sarebbe usato per fare analisi statistiche).
gung - Ripristina Monica

4
R se fossi uno statistico 10 anni fa. Python se vuoi mettere il tuo codice in produzione da qualche parte o riutilizzarlo.
Djechlin,


3
A causa della popolarità di questo q., E in risposta alle richieste attraverso le bandiere, l'ho riaperto ma lo ho reso CW.
Scortchi - Ripristina Monica

1
Ciò che la maggior parte delle risposte tende a dimenticare è che stanno confrontando il linguaggio Python con l' implementazione GNU-R. R ha anche altre implementazioni (vedi Renjin , scritto in Java, Microsoft R Open , che è compilato con Intel MKL, FastR , pqR , ecc.). Questi tentano di correggere alcuni problemi con GNU-R, un'implementazione molto più conservativa. Inoltre, ricorda che R non ha una definizione formale.
Firebug,

Risposte:


45

Sono complementari. È vero che entrambi possono fare le stesse cose, ma questo si può dire della maggior parte delle lingue. Ognuno ha i suoi punti di forza e di debolezza. L'outlook comune sembra essere che Python sia il migliore per la raccolta e la preparazione dei dati, nonché per l'analisi testuale. R è considerato il migliore per l'analisi dei dati, in quanto è innanzitutto un linguaggio statistico.

R ha una vasta gamma di pacchetti per qualsiasi cosa tu possa pensare, ma la sua base è l'analisi statistica - dall'analisi chi-quadro di base all'analisi fattoriale e ai modelli di pericolo, è facile e robusta. Alcuni dei più grandi nomi nelle statistiche creano pacchetti R, e ha una vivace comunità per aiutarti con ogni tua esigenza. ggplot2è uno standard nella visualizzazione dei dati (grafici ecc.). R è un linguaggio vettorializzato e costruito per scorrere in modo efficiente i dati. Memorizza anche tutti i dati nella RAM, che è un'arma a doppio taglio - è scattante su set di dati più piccoli (anche se alcuni potrebbero discutere con me), ma non può gestire bene i big data (anche se ha pacchetti per bypassare questo , come ff).

Python è notevolmente più facile da imparare rispetto a R, specialmente per coloro che hanno precedenti esperienze di programmazione. R è solo ... strano. Python è eccezionale per il recupero dei dati ed è il linguaggio da utilizzare per il web scraping (con lo straordinario beautifulsoup). Python è noto per la sua forza nell'analisi delle stringhe e nella manipolazione del testo. pandasè un'ottima libreria per manipolazione, fusione, trasformazione, ecc. dei dati, ed è veloce (e probabilmente ispirata a R).

Python è eccezionale quando devi fare un po 'di programmazione. Ciò non sorprende in quanto è un linguaggio generico. R, tuttavia, con tutte le sue estensioni, fu costruito da statistici per statistici. Quindi, sebbene Python possa essere più facile, migliore e più veloce in molte applicazioni, R sarebbe la piattaforma ideale per l'analisi statistica.


13
Come qualcuno che conosce entrambi, sono d'accordo con questo; ci possono essere molti argomenti stilistici, ma la differenza più grande è che una volta che è il momento di eseguire modelli statistici causali Python è sottosviluppato. Il pacchetto statsmodels ti fornisce alcune nozioni di base, ma non si avvicina a R, Stata o Sas. Un'eccezione notevole è l'analisi dello stile di apprendimento automatico, per la quale lo scikitlearn di Python si abbina bene. Per tutto il resto, penso che si possano argomentare bene che Python è almeno uguale a R e spesso superiore. Imparare entrambi non è affatto un cattivo uso del tempo.
Jeff,

2
Sono d'accordo con la maggior parte di questo - ma sottolineerei di più i problemi - R non è buono per grandi set di dati e non gestisce set di dati sparsi (la maggior parte delle librerie non lo supporta) molto bene (che è ciò su cui molti eseguono l'apprendimento automatico) ad esempio modelli di tipo "bag of words" in cui la cardinalità di un fattore / variabile categorica potrebbe essere nel 1000.
seanv507,

10
Non avviare un argomento in un thread di commenti, ma il data.tablepacchetto in R è specificamente progettato per lavorare in modo efficiente attorno a set di dati di grandi dimensioni e collega correttamente l'elaborazione distribuita.
stella luminosa il

3
Se pensi che Python sia migliore di R al recupero dei dati e all'analisi delle stringhe, hai sempre usato R in modo errato. Lo stesso vale per "R non va bene per set di dati di grandi dimensioni e non gestisce molto bene set di dati sparsi (la maggior parte delle librerie non lo supporta)" .
gented

3
aggiungendo alla spinta di Trevor di data.table; Sono anche felice di dire che rvestè uno strumento ECCELLENTE per gestire la maggior parte delle attività di raschiatura e molto più facile da avviare e da eseguire rispetto abeautifulsoup
MichaelChirico

21

Cercherò di formulare una risposta toccando i punti principali in cui le due lingue entrano in gioco per la scienza dei dati / statistiche / analisi dei dati e simili, come qualcuno che usa entrambi.

Il flusso di lavoro nell'analisi dei dati è generalmente costituito dai seguenti passaggi:

  1. Recupero dei dati da una sorta di sorgente (molto probabilmente un database SQL / noSQL o file .csv).
  2. Analizzare i dati in un formato decente e ragionevole (frame di dati) in modo che si possano fare operazioni e pensarci sopra.
  3. Applicazione di alcune funzioni ai dati (raggruppamento, eliminazione, fusione, ridenominazione).
  4. Applicare una sorta di modello ai dati (regressione, clustering, una rete neurale o qualsiasi altra teoria più o meno complicata).
  5. Distribuire / presentare i risultati a un pubblico tecnico più o meno.

Recuperando i dati

Il 99% delle volte, il processo di recupero dei dati si riduce alla query di una sorta di database SQL o Impala: sia Python che R hanno client o librerie specifici che fanno il lavoro in pochissimo tempo e ugualmente bene ( RImpala, RmySQLper R e MySQLdbper Python funziona senza intoppi, non molto da aggiungere). Quando si tratta di leggere file .csv esterni, il data.tablepacchetto per R fornisce la funzione freadche legge in file CSV enormi e complicati con qualsiasi opzione di analisi personalizzata in pochissimo tempo e trasforma il risultato direttamente in frame di dati con nomi di colonna e numeri di riga.

Organizzazione dei frame di dati

Vogliamo che i dati vengano archiviati in una sorta di tabella in modo da poter accedere facilmente a qualsiasi singola voce, riga o colonna.

Il pacchetto Rdata.table offre modi imbattibili per etichettare, rinominare, eliminare e accedere ai dati. La sintassi standard è molto simile a SQL come dt[i, j, fun_by], dove dovrebbe essere dt[where_condition, select_column, grouped_by (or the like)]; le funzioni personalizzate definite dall'utente possono essere inserite sia all'interno che nella jclausola, in modo da essere completamente liberi di manipolare i dati e applicare qualsiasi funzione complicata o elaborata su gruppi o sottoinsiemi (come prendere l'i-esima riga, k-esima e sommalo all'elemento (k-2) -th della riga (i-1) se e solo se la deviazione standard dell'intera colonna è quella che è, raggruppata per ultima colonna). Dai un'occhiata ai benchmark e a questa altra fantastica domanda su SO. L'ordinamento, l'eliminazione e la ridenominazione di colonne e righe fanno quello che devono fare, e i metodi R vettoriali standardizzati apply, sapply, lapply, ifelseeseguono operazioni vettorizzate su colonne e frame di dati del tutto, senza scorrere attraverso ogni elemento (ricorda che ogni volta che usi loop in R tu lo stanno facendo molto male).

L'arma contraria di Python è la pandasbiblioteca. Fornisce infine la struttura pd.DataFrame(che manca a Python standard, per qualche ragione ancora sconosciuta a me) che tratta i dati per quello che sono, vale a dire frame di dati (invece di alcuni numpy array, numpy list, numpy matrixo altro). Operazioni come il raggruppamento, la ridenominazione, l'ordinamento e simili possono essere facilmente realizzate e anche qui l'utente può applicare qualsiasi funzione personalizzata a un set di dati raggruppato o un sottoinsieme del frame usando Python applyo lambda. Personalmente non mi piace la grammatica df[df.iloc(...)]per accedere alle voci, ma è solo gusto personale e nessun problema. I parametri di riferimento per le operazioni di raggruppamento sono ancora leggermente peggiori di R, data.tablema a meno che non si desideri risparmiare 0,02 secondi per la compilazione non vi sono grandi differenze nelle prestazioni.

stringhe

Il modo R di trattare le stringhe è utilizzare il stringrpacchetto che consente di manipolare il testo, l'anagramma, l'espressione regolare, il trascinamento di spazi bianchi o simili con facilità. Può anche essere utilizzato in combinazione con le librerie JSON che decomprimono i dizionari JSON e unlist i loro elementi, in modo che uno abbia un frame di dati finale in cui i nomi delle colonne e gli elementi sono quelli che devono essere, senza alcun carattere non UTF8 o spazio bianco lì dentro.

I panda di Python .str. svolgono lo stesso compito di giocare con espressioni regolari, finali o altro come il loro concorrente, quindi anche qui nessuna grande differenza nel gusto.

Applicazione di modelli

Qui è dove, a mio avviso, sorgono differenze tra le due lingue.

Rha, ad oggi, un insieme imbattibile di librerie che consentono all'utente di fare praticamente tutto ciò che vogliono in una o due righe di codice. Le regressioni funzionali o polinomiali standard vengono eseguite in una riga e producono output i cui coefficienti sono facilmente leggibili, accompagnati dai corrispondenti intervalli di confidenza e distribuzioni dei valori p. Allo stesso modo per il clustering, allo stesso modo per i modelli di foresta casuali, allo stesso modo per i dendogrammi, l'analisi dei componenti principali, le scomposizioni di valori singolari, gli accoppiamenti logistici e molti altri. L'output per ognuna delle precedenti ha probabilmente una classe di stampa specifica che genera visualizzazioni di ciò che hai appena fatto, con colori e bolle per coefficienti e parametri. Test di ipotesi, test statistici, Shapiro,

Python sta cercando di tenere il passo con SciPye scikit-learn. Sono disponibili anche la maggior parte delle analisi e dei modelli standard, ma sono leggermente più lunghi da codificare e meno intuitivi da leggere (secondo me). Mancano macchinari più complicati, sebbene alcuni possano essere ricondotti ad alcune combinazioni delle librerie già esistenti. Una cosa che preferisco fare in Python piuttosto che in R è l'analisi del testo bag-of-word con bi-grammi, tri-grammi e ordini superiori.

Presentando i risultati

Entrambe le lingue hanno bellissimi strumenti di disegno, ggplot2soprattutto R e il corrispondente equivalente di Python. Non molto per competere, fanno il lavoro sano e salvo, anche se credo che se stai presentando i risultati potresti dover usare altri strumenti: ci sono fantastici strumenti di progettazione colorati là fuori e né Python né R sono pensati per stupire il pubblico con fantasiosi drag and drop rossi e verdi. R ha recentemente pubblicato molti miglioramenti sulle sue shiny appcaratteristiche, che sostanzialmente gli consentono di produrre output interattivi . Non ho mai voluto impararlo, ma so che è lì e la gente lo usa bene.


Nota a margine

Come nota a margine, vorrei sottolineare che la principale differenza tra i due linguaggi è che Python è una lingua di programmazione per scopi generici, realizzata da e per l'informatica, la portabilità, le distribuzioni e così via. È fantastico in ciò che fa ed è semplice da imparare; non c'è nessuno a cui non piaccia il pitone. Ma è un linguaggio di programmazione fare programmazione.

Rd'altra parte, è stato inventato da e per matematici, fisici, statistici e data scientist. Se vieni da quello sfondo, tutto ha perfettamente senso perché rispecchia perfettamente e riproduce i concetti utilizzati in statistica e matematica. Ma se invece venissi da un background informatico e vuoi simulare Java o C in R rimarrai deluso; non ha "oggetti" in senso standard (beh, lo fa, ma non ciò che si pensa in genere sono ...), non ha classi in senso standard (beh, lo fa, ma non ciò che si usa in genere pensa che siano ...), non ha "puntatori" o tutte le altre strutture informatiche - ma solo perché non ne ha bisogno. Ultimo ma non meno importante: la documentazione e i pacchetti sono facili da creare e leggere (se si utilizza Rstudio); c'è una grande e appassionata comunità là fuori, e ci vogliono letteralmente cinque secondi per Google "come fare il problema di inserimento casuale in R" la cui prima voce ti reindirizza a una soluzione al problema (fatta da qualcun altro) con codice corrispondente , in nessun tempo.

La maggior parte delle aziende industriali ha la propria infrastruttura integrata in Python (o in un ambiente compatibile con Python) che consente una facile integrazione del codice Python (praticamente import myAnalysisovunque e in pratica è fatto). Tuttavia, qualsiasi tecnologia moderna o server o piattaforma esegue facilmente il codice R di sfondo senza problemi.


8
+6, questa è un'ottima risposta: dettagliata, accurata ed equilibrata.
gung - Ripristina Monica

+1 La migliore risposta qui. È divertente, sono arrivato a R da Java (anche se non in un percorso diretto), e mi sono appassionato abbastanza. Non penso necessariamente che fare loop in R significhi che stai sbagliando. Mi sono ritrovato a grattarmi la testa cercando di eludere l'uso dei loop a volte, ma non riuscivo a trovare un modo per aggirarlo (come creare nuovi valori di variabili in un set di dati in base alle condizioni delle righe precedenti e recuperare dati da set di dati secondari).
Yuval Spiegler,

Se solo questa pletora di pacchetti R per fare qualcosa sotto il sole fosse scritta da persone che sanno come fare calcoli statistici / scrivere software matematici numerici affidabili e robusti / conoscere analisi numeriche, ecc. Alcuni dei pacchetti R sono molto buoni. Un numero molto elevato di pacchetti R, anche alcuni scritti da autori famosi, sono spazzatura totale - e molti utenti non si rendono nemmeno conto di ricevere spazzatura. Oh, è in CRAN, deve essere buono, o almeno corretto, o affidabile ... SBAGLIATO !!!!!
Mark L. Stone,

"R ha, ad oggi, un insieme imbattibile di librerie che consentono all'utente di fare praticamente tutto ciò che vogliono in una o due righe di codice." Sono d'accordo al 100%, a meno che ottenere la risposta corretta non sia una delle cose che l'utente desidera.
Mark L. Stone,

8
@ MarkL.Stone Ti dispiacerebbe presentare un esempio di pacchetti standard scritti da utenti famosi che danno risultati errati?
gented

15
  • Python è un linguaggio di programmazione generale: pertanto è utile per svolgere molte altre attività oltre all'analisi dei dati. Ad esempio, se vogliamo automatizzare l'esecuzione del nostro modello nel server di produzione, allora Python è davvero un'ottima scelta. Altri esempi includono la connessione a hardware / sensori per leggere dati, interagire con database (dati relazionali o non strutturati come JSON), analisi di dati, programmazione di rete (TCP / IP), interfaccia utente grafica, interazione con shell, ecc. (Bene, perché uno scienziato di dati vorrebbe svolgere così tanti di questi tipi di attività, che hanno poco a che fare con i modelli predittivi? Penso che le persone abbiano definizioni diverse Che cos'è uno scienziato di dati?In alcune organizzazioni, l'analisi dei dati e l'esecuzione dell'analisi descrittiva con il dashboard sono sufficienti per le aziende e i dati non sono sufficientemente maturi per la realizzazione di modelli predittivi. D'altra parte, in molte piccole aziende, le persone possono aspettarsi che i data scientist facciano molta ingegneria del software. Conoscere Python ti renderà indipendente da altri ingegneri del software.)

  • R ha molti pacchetti statistici che sono molto meglio di python o MATLAB. Usando R, si può davvero pensare a livello di modello anziché a livello di dettaglio dell'implementazione. Questo è un enorme vantaggio nello sviluppo di modelli statistici. Ad esempio, molte persone stanno implementando manualmente le reti neurali in Python; fare questo lavoro potrebbe non aiutare a capire perché funzionano le reti neurali, ma semplicemente seguire la ricetta per duplicare il lavoro degli altri per verificare se funziona. Se stiamo lavorando in R, possiamo facilmente concentrarci sulla matematica alla base del modello, anziché sui dettagli di implementazione.

In molti casi, le persone li usano insieme. Costruire software è facile da eseguire in Python, e costruire modelli è meglio in R. Se vogliamo consegnare un modello in produzione ma non un foglio, potremmo aver bisogno di entrambi. Se la tua azienda ha molti ingegneri del software, potresti aver bisogno di più R. E se la tua azienda ha molti ricercatori, potresti aver bisogno di più pitone.


2
Bella risposta, ma hai scritto "Jason" invece di "JSON", mi ha dato una bella risata
par

In realtà non sono membro né delle statistiche né delle comunità di "apprendimento automatico", ma penso che la disponibilità di pacchetti avanzati sia in qualche modo specifica per la comunità. Posso credere che molte tecniche statistiche nuove e all'avanguardia vengano fornite con il codice R. Ma quando vedo documenti di visione artificiale / apprendimento automatico / reti neurali che contengono codici ("di alto livello") ... sembrano essere Matlab o pitone.
GeoMatt22,

1
+1 per discutere di come le lingue influenzano il modo di pensare. Un enorme vantaggio di R è, perché è costruito dagli statistici per gli statistici, come incoraggia il pensiero in termini di modellistica. Disclosure: sono fluente in R, ma diletto solo in Python.
Ashe,

Ehm ... che dire scikit-learn? scikit-learn.org/stable
nave da guerra

10

I programmatori di ogni genere sottovalutano il numero di scelte linguistiche che sono culturali . Gli sviluppatori Web come Node.js. Agli scienziati piace Python. Come ingegnere informatico poliglotta in grado di gestire allo stesso tempo la fluidità di Javascript e la rigidità di Java, mi sono reso conto che non vi è alcuna ragione intrinseca per cui questi linguaggi siano dannosi per il lavoro reciproco: solo l'enorme quantità di pacchetti, documentazione, comunità, libri, ecc. che li circonda.

(Per ragioni intrinseche una lingua casuale è migliore di un'altra lingua, vedere i prossimi commenti a questa risposta.)

La mia previsione personale è che Python è la via del futuro perché può fare tutto ciò che R può fare - o meglio, abbastanza di ciò che R può fare a quei programmatori dedicati per colmare le lacune - ed è un linguaggio di ingegneria del software molto migliore. L'ingegneria del software è una disciplina che si occupa di:

  • fidarsi abbastanza dell'affidabilità del codice per metterlo in produzione (quindi qualsiasi modello di apprendimento automatico che serve gli utenti in tempo reale)
  • assicurarsi che il codice possa continuare a funzionare mentre viene sottoposto a modifiche e riutilizzo (ad esempio framework di unit test)
  • un focus sulla leggibilità, a beneficio degli altri e di te stesso in appena 6 mesi
  • una profonda enfasi sull'organizzazione del codice, per facilitare il controllo delle versioni, i backup delle versioni precedenti e lo sviluppo simultaneo di più parti
  • preferendo strumenti e tecnologie con una migliore documentazione e idealmente con la proprietà che non funzioneranno affatto a meno che tu non li usi nel modo giusto (questa è stata la mia più grande lamentela con Matlab - ho una domanda su Google e devo leggere i loro forum piuttosto terribili cercare una risposta)

Inoltre francamente Python è più facile da imparare.

Scienziati e statistici si renderanno conto di essere parti interessate a una buona pratica di ingegneria del software, non a una professione indipendente e senza problemi. Solo la mia opinione, ma documenti che dimostrano la fragilità del codice accademico sosterranno questo.

Questa risposta è tutta la mia opinione, ma tu hai fatto una domanda molto supponente, e dato che è stata ben accolta finora ho sentito che meriti un'opinione senza pretese, ragionevolmente informata (spero!) In risposta. C'è un serio argomento per Python su R su tutta la linea e sarei negligente di provare a postare una risposta non partigiana quando la realtà stessa può essere partigiana.


Julia, da grande, non sarebbe un'alternativa migliore di Python?
kjetil b halvorsen,

1
@kjetilbhalvorsen "quando cresce" è più un "se", è molto difficile soppiantare un linguaggio consolidato, ed è fondamentalmente una scelta personale se si desidera essere sulla tecnologia di frontiera a rischio che non venga mai adottato fermamente. IMO, Python ha lo slancio ora. Non ho molta familiarità con Julia, quindi questa è un'opinione piuttosto generica.
djechlin,

1
Ad eccezione del primo proiettile, non riesco a vedere come Python sia intrinsecamente superiore in nessuno degli altri quattro punti.
Firebug

4
"Python può fare tutto ciò che R può" è falso. "Abbastanza di ciò che R può che programmatori dedicati stanno lavorando per colmare le lacune" , questo sarebbe vero per qualsiasi cosa nel mondo - tutto può essere fatto per fare qualsiasi cosa fintanto che qualcuno ci lavora.
gented

2
@djechlin Assolutamente no. Il tuo esempio di affidabilità è stato "quindi qualsiasi modello di apprendimento automatico che serve gli utenti in tempo reale". Python è migliore in questo perché supporta la distribuzione molto più facilmente di R, e solo quello. Test unitari, leggibilità, organizzazione e documentazione non sono qualità intrinseche. Puoi implementare i tuoi test, rendere il tuo codice più facile da leggere, organizzarlo e la documentazione R è davvero facile da capire.
Firebug

8

Sono un utente R ma penso che Python sia il futuro (non credo sia la sintassi)

Python è il futuro
Il vantaggio di Python è che altre persone hanno già menzionato il supporto molto più ampio e, per i programmatori, una sintassi più logica.
Inoltre, la capacità di tradurre i risultati delle analisi in un sistema di produzione è molto più semplice.
Forse è perché Python è uno scopo generale e R non lo è, ma anche io alzo le sopracciglia quando vedo una pipeline R prodotta.
Ma non solo, anche per le applicazioni avanzate Python sta rapidamente recuperando terreno (Scikit-learn, PyBrain, Tensorflow ecc.) E mentre R è ancora la lingua franca negli accademici su come implementare metodi statistici Python è diventato enorme nel settore professionale grazie a l'avvento di biblioteche specializzate avanzate.

Ma R non è male A
molte persone sembra piacere saltare sul carrozzone "R ha cattiva sintassi".
Vorrei proporre la sintassi di R per essere una buona cosa!
Le funzioni di assegnazione, la valutazione lenta, la valutazione non standard e le formule sono enormi vantaggi quando si utilizza R.
Fa solo risparmiare così tanto tempo da non doversi preoccupare di sfuggire ai nomi delle variabili a cui si fa riferimento nel riepilogo o come costruire la logica di ciò che è modellato rispetto a cosa o guardando i nomi con names()e quindi assegnando nuovi nomi aggiungendo <- c("A", "B", "C").
Quando le persone si lamentano della strana sintassi di R, la considerano un linguaggio di programmazione, non uno strumento di data science.
Come qualcuno che viene da R e ama Dplyr trovo la sintassi dei panda un po 'goffa in confronto.
Sì, è un po 'più flessibile, ma per la maggior parte delle attività si eseguono molte più sequenze di tasti per eseguire un comando semplice rispetto a R che sono semplicemente lì per soddisfare il parser di Python, non per esprimere la tua idea.

In sintesi
Ovviamente è saggio conoscerli entrambi e mentre Python sta arrivando lì le scelte di progettazione specifiche del dominio R lo rendono più semplice per il lavoro ad hoc. L'enorme svantaggio di R è che è difficile abbandonare il suo dominio, cosa che in pratica devi fare una volta che cerchi di implementare le tue scoperte in modo sostenibile.


4

Se consideri R come uno strumento statistico e non come un linguaggio di programmazione, è davvero fantastico. Ha molta più flessibilità rispetto a Stata o SPSS, ma può fare tutto il possibile. Ho imparato Stata durante il college e R è stato abbastanza facile da guardare perché avevo già la prospettiva dello strumento statistico e non una pura esperienza del linguaggio di programmazione che altri avrebbero potuto avere.

Penso che la frustrazione con R entri in gioco quando coloro che sono programmatori cercano di imparare e capire R; ma è un ottimo strumento per coloro che arrivano a R attraverso uno sfondo statistico.

Python è fantastico se sei già un grande programmatore; ma per me come un principiante di programmazione e statistica appena uscito dal college, R è stata una scelta molto migliore. È davvero solo la preferenza di quale si adatta meglio al tuo skillset e ai tuoi interessi.


3

Aggiungendo ad alcune delle risposte precedenti:

Nella mia esperienza, non c'è niente di più facile che usare Dplyr + tidyr, ggplot e Rmarkdown di R nel passare da dati grezzi a risultati presentabili. Python offre molto, e lo sto usando sempre di più, ma adoro il modo in cui i pacchetti di Hadley si legano insieme.


2

Python ha un'ampia adozione al di fuori della scienza, quindi beneficiate di tutto ciò. Come sottolinea "An Angry Guide to R", R è stato sviluppato da una community, che aveva al primo ordine zero sviluppatori di software.

Direi che oggi R ha due punti di forza: alcuni pacchetti altamente specializzati davvero maturi in alcune aree e un pacchetto di ricerca riproducibile all'avanguardia knitr.

Python sembra essere più adatto a tutto il resto.

Questa è un'opinione ovviamente, come quasi tutto in questo thread. Sono un po 'stupito che questo thread sia ancora vivo.


2

Come descritto in altre risposte, Python è un buon linguaggio di programmazione per scopi generali, mentre R ha gravi difetti come linguaggio di programmazione ma ha un set più ricco di librerie di analisi dei dati. Negli ultimi anni, Python ha raggiunto R con lo sviluppo di librerie di analisi dei dati mature come scikit-learn, mentre R non verrà mai risolto. In pratica, uso Python (in realtà, Hy ) per quasi tutto e mi rivolgo a R solo per metodi relativamente esoterici come la regressione quantile (la cui implementazione negli statsmodel di Python sembra essere rotta). Esistono diversi modi per chiamare R da Python; PypeR è uno che è abbastanza semplice da farlo funzionare in ambienti ostili come un server Windows.

Modifica : incoraggio tutti coloro che vorrebbero discuterne ulteriormente a parlare con gli autori del saggio collegato invece di commentare questa risposta.


8
Quella guida di Argh è la critica più all'oscuro che io abbia mai letto su R (e ne ho letti molti).
Firebug,

10
"La documentazione è incredibilmente male", non è chiaro. La forza di R è la sua semplicità per i non programmatori e la sua vasta documentazione. "Perché anche il nome di R è stupido, è davvero difficile google cose di R in modo utile. Mi dispiace. Benvenuti in R!", Non ho idea. Non ho mai riscontrato problemi nel tentativo di trovare la documentazione per i pacchetti più oscuri in circolazione. "Rinomina le colonne in modo spettrale, assegnandole a nomi (frame). Sai come e perché funziona? Per favore, educami.", Ecco, non ci sta nemmeno provando.
Firebug,

8
In che modo R è più difficile su Google di C? Google è intelligente. Viene a sapere che sei interessato al linguaggio di programmazione R. R è per lo più criticato da persone con un background di altri linguaggi di programmazione. Siamo spiacenti, ma non è stato sviluppato come alternativa a queste lingue. È stato sviluppato per e dagli statistici. Di conseguenza, alcune decisioni di progettazione non sono state ottimali, ma dire che ci sono gravi difetti è un po 'forte. Ogni linguaggio di programmazione ha i suoi punti di forza e di debolezza.
Roland,

5
La creazione di un pacchetto è in realtà molto semplice. Diventa complicato solo se aderisci alle regole (giustamente) imposte da CRAN. È possibile importare selettivamente dai pacchetti se si crea un pacchetto. Il riciclaggio dei vettori è in realtà un punto di forza. Non vi sono incoerenze tra l'elenco delle sottosezioni e i vettori. Alcuni degli altri possono infatti essere considerati difetti.
Roland,

6
R ha chiaramente delle verruche, alcune dell'inesplicabile varietà "wat" (stringheAsFactors). Ma ha anche librerie statistiche che non hanno paralleli, nemmeno a distanza, in nessun'altra lingua. La programmazione richiesta per creare queste librerie è più seria di quanto la stragrande maggioranza di noi dovrà mai fare. Come un'affermazione generale, "R non è un linguaggio serio" è a metà strada tra uva incapace, disperatamente parrocchiale, analfabeta e acida. E lo dico come qualcuno che desidera che R sia sostanzialmente Python con le librerie di R.
Paul,
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.