W jaki sposób R i Python uzupełniają się w informatyce?

54

W wielu samouczkach lub instrukcjach narracja wydaje się sugerować, że R i Python współistnieją jako uzupełniające się elementy procesu analizy. Jednak dla mojego niedoświadczonego oka wydaje się, że oba języki robią to samo.

Moje pytanie brzmi więc, czy istnieją naprawdę wyspecjalizowane nisze dla tych dwóch języków, czy może to tylko osobiste preferencje dotyczące używania jednego lub drugiego?

BioHazZzZard
źródło
2
To naprawdę nie wygląda jak duplikat tego wątku. Tu nie chodzi o to, jak używać Pythona do tworzenia statystyk, chodzi o to, jak Python może uzupełnić R (oczywiście R byłby użyty do analiz statystycznych).
gung - Przywróć Monikę
4
R, jeśli byłeś statystykiem 10 lat temu. Python, jeśli chcesz gdzieś produkować swój kod lub użyć go ponownie.
djechlin
1
Powiązane: datascience.stackexchange.com/questions/326
Juho Kokkala
3
Ze względu na popularność tego q. I w odpowiedzi na żądania wysyłane przez flagi ponownie go otworzyłem, ale zmieniłem go w CW.
Scortchi - Przywróć Monikę
1
Większość odpowiedzi zwykle zapomina, że ​​porównują język Python z implementacją GNU-R. R ma również inne implementacje (patrz Renjin , napisany w Javie, Microsoft R Open , który jest skompilowany z Intel MKL, FastR , pqR itp.). Starają się rozwiązać niektóre problemy z GNU-R, znacznie bardziej konserwatywną implementacją. Pamiętaj też, że R nie ma formalnej definicji.
Firebug

Odpowiedzi:

45

Są komplementarne. To prawda, że ​​oba mogą robić to samo, ale można to powiedzieć o większości języków. Każdy ma swoje mocne i słabe strony. Wygląda na to, że Python jest najlepszy do gromadzenia i przygotowywania danych, a także do analizy tekstowej. R jest uważany za najlepszy do analizy danych, ponieważ jest to przede wszystkim język statystyczny.

R ma bogatą ofertę pakietów na wszystko, co możesz wymyślić, ale jego podstawową cechą jest analiza statystyczna - od podstawowego chi-kwadrat do analizy czynnikowej i modeli ryzyka, jest łatwa i solidna. Niektóre z największych nazwisk w statystykach tworzą pakiety R i ma aktywną społeczność, która pomaga w każdej potrzebie. ggplot2jest standardem w wizualizacji danych (wykresy itp.). R jest wektoryzowanym językiem zbudowanym w celu efektywnego przeglądania danych. Przechowuje również wszystkie dane w pamięci RAM, która jest mieczem obosiecznym - jest zgrabny na mniejszych zestawach danych (chociaż niektórzy mogą się ze mną kłócić), ale nie radzi sobie dobrze z dużymi danymi (chociaż ma pakiety do obejścia tego , takie jak ff).

Python jest znacznie łatwiejszy do nauczenia się niż R - szczególnie dla tych, którzy mają wcześniejsze doświadczenie w programowaniu. R jest po prostu ... dziwny. Python jest świetny w wyszukiwaniu danych i jest językiem używanym do skrobania stron internetowych (z niesamowitym beautifulsoup). Python jest znany ze swojej siły w przetwarzaniu ciągów i manipulowaniu tekstem. pandasjest świetną biblioteką do manipulacji danymi, scalania, przekształcania itp. i jest szybki (i prawdopodobnie zainspirowany przez R).

Python jest świetny, gdy potrzebujesz programowania. Nie jest to zaskakujące, ponieważ jest to język ogólnego przeznaczenia. R jednak ze wszystkimi jego rozszerzeniami został zbudowany przez statystyków dla statystyków. Podczas gdy Python może być łatwiejszy, lepszy i szybszy w wielu aplikacjach, R byłby platformą do analizy statystycznej.

Yuval Spiegler
źródło
13
Jako ktoś, kto zna jedno i drugie, zgadzam się z tym; może być wiele stylistycznych argumentów, ale największą różnicą jest to, że kiedy nadszedł czas, aby faktycznie uruchomić przyczynowe modele statystyczne, Python jest słabo rozwinięty. Statsmodels pakiet dostaje pewne podstawy, ale nie zbliżać R, Stata lub SAS. Jednym godnym uwagi wyjątkiem jest analiza stylu uczenia maszynowego, do której dobrze pasuje scikitlearn Pythona . Wydaje mi się, że w odniesieniu do wszystkiego innego można argumentować, że Python jest co najmniej równy R i często lepszy. Uczenie się obu nie jest złym wykorzystaniem czasu.
Jeff
2
Zgadzam się z większością tego - ale chciałbym bardziej podkreślić problemy - R nie jest dobre dla dużych zestawów danych i nie radzi sobie z rzadkimi zestawami danych (większość bibliotek go nie obsługuje) bardzo dobrze (na czym wiele osób wykonuje uczenie maszynowe) np. modele typu „worek słów”, w których liczność czynnika / zmiennej kategorialnej może wynosić 1000.
seanv507
10
Nie uruchamiać argumentu w wątku komentarza, ale data.tablepakiet w R jest specjalnie przeznaczony do wydajnej pracy z dużymi zestawami danych i wpasowuje się w rozproszone przetwarzanie.
jasna gwiazda
3
Jeśli uważasz, że Python jest lepszy niż R przy pobieraniu danych i analizowaniu ciągów, to przez cały czas źle używałeś R. To samo dotyczy „R nie jest dobre dla dużych zestawów danych i nie obsługuje bardzo rzadkich zestawów danych (większość bibliotek tego nie obsługuje) bardzo dobrze” .
gented
3
dodając do zwiększenia Trevora data.table; Cieszę się również, że mogę powiedzieć, że rvestjest DOSKONAŁYM narzędziem do obsługi większości zadań zgarniania i jest o wiele łatwiejszy do uruchomienia niżbeautifulsoup
MichaelChirico,
21

Postaram się sformułować odpowiedź dotykającą głównych punktów, w których oba języki wchodzą w grę w zakresie analizy danych / statystyki / analizy danych i tym podobnych, jako ktoś, kto używa obu.

Przepływ pracy w analizie danych zasadniczo składa się z następujących kroków:

  1. Pobieranie danych z jakiegoś źródła (najprawdopodobniej z bazy danych SQL / noSQL lub plików .csv).
  2. Przetwarzanie danych w przyzwoitym i rozsądnym formacie (ramka danych), aby można było wykonywać operacje i myśleć o tym.
  3. Zastosowanie niektórych funkcji do danych (grupowanie, usuwanie, scalanie, zmiana nazwy).
  4. Zastosowanie pewnego rodzaju modelu do danych (regresja, grupowanie, sieć neuronowa lub inna mniej lub bardziej skomplikowana teoria).
  5. Wdrażanie / prezentowanie wyników mniej lub bardziej technicznym odbiorcom.

Pobieranie danych

99% czasu, proces pobierania danych sprowadza się do zapytań jakiś SQL lub bazy danych Impala: zarówno Python i R mają specyficzne dla klientów lub biblioteki, które wykonują pracę w krótkim czasie i równie dobrze ( RImpala, RmySQLdla R i MySQLdbdla Pythona działa płynnie, niewiele do dodania). Jeśli chodzi o czytanie zewnętrznych plików .csv, data.tablepakiet dla R udostępnia funkcję, freadktóra odczytuje w dużych i skomplikowanych plikach .csv z dowolną niestandardową opcją parsowania, i przekształca wynik bezpośrednio w ramki danych z nazwami kolumn i numerami wierszy.

Porządkowanie ramek danych

Chcemy, aby dane były przechowywane w jakiejś tabeli, abyśmy mogli z łatwością uzyskać dostęp do dowolnego wpisu, wiersza lub kolumny.

R Pakiet data.tablezapewnia niepowtarzalne sposoby etykieta, zmieniać nazwy, usuwać i dostępu do danych. Standardowa składnia jest bardzo podobna do SQL dt[i, j, fun_by], ponieważ ma to być dt[where_condition, select_column, grouped_by (or the like)]; niestandardowe funkcje zdefiniowane przez użytkownika mogą być tam umieszczone, jak również w jklauzuli, dzięki czemu masz całkowitą swobodę w manipulowaniu danymi i stosowaniu dowolnej skomplikowanej lub fantazyjnej funkcji w grupach lub podzbiorach (jak weź i-ty rząd, k-ty element i zsumuj go do (k-2) -tego elementu (i-1) -tego rzędu, jeśli i tylko wtedy, gdy odchylenie standardowe całej kolumny jest tym, czym jest, pogrupowane według ostatniej kolumny). Spójrz na testy i inne niesamowite pytanie dotyczące SO. Sortowanie, usuwanie i zmiana nazwy kolumn i wierszy robi to, co trzeba, a standardowe metody wektoryzacji R apply, sapply, lapply, ifelsewykonują wektoryzowane operacje na kolumnach i ramkach danych w całości, bez zapętlania poszczególnych elementów (pamiętaj, że ilekroć używasz pętli w R robią to bardzo źle).

Przeciwwagą Pythona jest pandasbiblioteka. Wreszcie zapewnia strukturę pd.DataFrame(której brakuje w standardowym języku Python, z jakiegoś nieznanego mi powodu), która traktuje dane takimi, jakie są, a mianowicie ramkami danych (zamiast niektórych numpy array, numpy list, numpy matrixlub czegokolwiek). Operacje takie jak grupowanie, zmiana nazwy, sortowanie i tym podobne można łatwo osiągnąć i tutaj również użytkownik może zastosować dowolną funkcję niestandardową do zgrupowanego zestawu danych lub podzbioru ramki za pomocą Pythona applylub lambda. Osobiście nie lubię gramatyki df[df.iloc(...)]dostępu do wpisów, ale to tylko osobisty gust i żaden problem. Testy porównawcze dla operacji grupowania są nadal nieco gorsze niż R, data.tableale chyba że chcesz zaoszczędzić 0,02 sekundy na kompilacji, nie ma dużej różnicy w wydajności.

Smyczki

R sposobem leczenia strun jest użycie stringrpakietu, który umożliwia dowolną manipulacji tekstu, anagram, wyrażenia regularne, ciągnąc spacji lub podobny z łatwością. Można go również używać w połączeniu z bibliotekami JSON, które rozpakowują słowniki JSON i usuwają listę ich elementów, dzięki czemu uzyskuje się ostateczną ramkę danych, w której nazwy kolumn i elementy są tym, czym powinny być, bez znaków innych niż UTF8 ani białych znaków tam.

Pandy Pythona .str. wykonują tę samą robotę, używając wyrażeń regularnych, kończących lub tak dobrych jak jego konkurent, więc nawet tutaj nie ma dużej różnicy w smaku.

Stosowanie modeli

Tutaj, moim zdaniem, powstają różnice między tymi dwoma językami.

Rma na dzień dzisiejszy niezrównany zestaw bibliotek, które pozwalają użytkownikowi zasadniczo robić wszystko, co chcą, w jednym lub dwóch wierszach kodu. Standardowe regresje funkcjonalne lub wielomianowe są wykonywane w liniach jednowierszowych i dają wyniki, których współczynniki są łatwo czytelne, wraz z odpowiadającymi im przedziałami ufności i rozkładami wartości p. Podobnie w przypadku grupowania, podobnie w przypadku losowych modeli lasu, podobnie w przypadku dendogramów, analizy głównych składników, rozkładów wartości pojedynczych, dopasowań logistycznych i wielu innych. Dane wyjściowe dla każdej z powyższych najprawdopodobniej zawierają określoną klasę wydruku, która generuje wizualizacje tego, co właśnie zrobiłeś, z kolorami i bąbelkami dla współczynników i parametrów. Testy hipotez, testy statystyczne, Shapiro,

Python stara się nadążyć za SciPyi scikit-learn. Większość standardowych analiz i modeli jest również dostępna, ale ich kodowanie jest nieco dłuższe i mniej intuicyjne w czytaniu (moim zdaniem). Brakuje bardziej skomplikowanych maszyn, chociaż niektóre z nich można prześledzić do niektórych kombinacji już istniejących bibliotek. Jedną z rzeczy, które wolę robić w Pythonie niż w R, jest analiza tekstów typu bag-of-word z bi-gramami, tri-gramami i wyższymi rzędami.

Prezentacja wyników

Oba języki mają piękne narzędzia do kreślenia, ggplot2przede wszystkim R i odpowiedni odpowiednik Pythona. Nie za bardzo konkurują, robią to bezpiecznie i solidnie, chociaż uważam, że jeśli prezentujesz wyniki, być może będziesz musiał użyć innych narzędzi - istnieją fantazyjne kolorowe narzędzia do projektowania i ani Python, ani R nie mają na celu zadziwić publiczność z fantazyjnymi czerwono-zielonymi przeciągnięciami i upuszczeniami. Ostatnio R opublikował wiele ulepszeń swoich shiny appfunkcji, które w zasadzie pozwalają mu wytwarzać interaktywne wyniki . Nigdy nie chciałem się tego uczyć, ale wiem, że jest i ludzie dobrze go wykorzystują.


Dygresja

Na marginesie chciałbym podkreślić, że główna różnica między tymi dwoma językami polega na tym, że Python jest językiem programowania ogólnego przeznaczenia, stworzonym przez i dla informatyki, przenośności, wdrożeń i tak dalej. Jest niesamowity w tym, co robi i jest łatwy do nauczenia; nie ma nikogo, kto nie lubi Pythona. Ale jest to język programowania do programowania.

Rz drugiej strony został wynaleziony przez matematyków, fizyków, statystyk i naukowców danych. Jeśli pochodzisz z tego tła, wszystko ma sens, ponieważ idealnie odzwierciedla i odtwarza pojęcia stosowane w statystyce i matematyce. Ale jeśli zamiast tego pochodzisz z informatyki i chcesz symulować Javę lub C w R, będziesz rozczarowany; nie ma „obiektów” w sensie standardowym (no cóż, ale nie ma tego, co zwykle myśli się, że są…), nie ma klas w sensie standardowym (no cóż, ale nie ma tego, co zwykle uważa, że ​​są ...), nie ma „wskaźników” ani innych struktur informatycznych - tylko dlatego, że ich nie potrzebuje. Ostatni, ale nie mniej ważny: dokumentacja i pakiety są łatwe do utworzenia i odczytu (jeśli używasz Rstudio); istnieje duża i pełna pasji społeczność, a Google zajmuje dosłownie pięć sekund „jak zrobić losowy problem w R”, którego pierwszy wpis przekierowuje cię do rozwiązania problemu (zrobionego przez kogoś innego) z odpowiednim kodem , w krótkim czasie.

Większość firm przemysłowych ma infrastrukturę zbudowaną w języku Python (lub środowisku przyjaznym dla języka Python), co umożliwia łatwą integrację kodu w języku Python (tylko w import myAnalysisdowolnym miejscu i po prostu gotowe). Jednak każda nowoczesna technologia, serwer lub platforma z łatwością uruchamia kod R w tle bez żadnych problemów.

Gennaro Tedesco
źródło
8
+6, to bardzo dobra odpowiedź: szczegółowa, dokładna i zrównoważona.
gung - Przywróć Monikę
+1 Najlepsza odpowiedź tutaj. To zabawne, przyjechałem do R z Jawy (choć nie w bezpośredniej drodze) i bardzo mi się podobało. Niekoniecznie uważam, że robienie pętli w R oznacza, że ​​robisz to źle. Odkryłem, że drapię się po głowie, próbując czasami omijać pętle, ale nie mogę znaleźć sposobu na obejście tego (np. Tworzenie nowych wartości zmiennych w zbiorze danych na podstawie warunków poprzednich wierszy i pobieranie danych z wtórnych zestawów danych).
Yuval Spiegler
Gdyby tylko ta mnóstwo pakietów R do zrobienia czegokolwiek pod słońcem została napisana przez ludzi, którzy wiedzą, jak wykonywać obliczenia statystyczne / pisać niezawodne i niezawodne oprogramowanie matematyczne / znają analizy numeryczne itp. Niektóre pakiety R są bardzo dobre. Bardzo duża liczba pakietów R, nawet niektórych napisanych przez znanych autorów, to całkowite śmieci - a wielu użytkowników nawet nie zdaje sobie sprawy, że się śmieci. Och, jest w CRAN, musi być dobry, a przynajmniej poprawny lub niezawodny ... ŹLE !!!!!
Mark L. Stone,
„R ma na dzień dzisiejszy niezrównany zestaw bibliotek, które pozwalają użytkownikowi zasadniczo robić wszystko, co chcą, w jednym lub dwóch wierszach kodu”. Zgadzam się w 100%, chyba że uzyskanie poprawnej odpowiedzi jest jedną z rzeczy, których chce użytkownik.
Mark L. Stone,
8
@ MarkL.Stone Czy mógłbyś przedstawić przykład standardowych pakietów napisanych przez znanych użytkowników, które dają błędne wyniki?
gented 10.10.16
15
  • Python jest ogólnym językiem programowania: dlatego dobrze nadaje się do wykonywania wielu innych zadań oprócz analizy danych. Na przykład, jeśli chcemy zautomatyzować wykonywanie naszego modelu na serwerze produkcyjnym, to python jest naprawdę dobrym wyborem. Inne przykłady obejmują podłączanie do sprzętu / czujników w celu odczytu danych, interakcje z bazami danych (dane relacyjne lub nieustrukturyzowane, takie jak JSON), analizowanie danych, programowanie sieciowe (TCP / IP), graficzny interfejs użytkownika, interakcja z powłoką itp. (Cóż, dlaczego naukowiec miałby wykonywać tak wiele zadań, które niewiele mają wspólnego z modelami predykcyjnymi? Myślę, że ludzie mają różne definicje Czym jest naukowiec?W niektórych organizacjach analiza danych i analiza opisowa za pomocą pulpitu nawigacyjnego jest wystarczająca dla biznesu, a dane nie są wystarczająco dojrzałe, aby wykonywać modele predykcyjne. Z drugiej strony, w wielu małych firmach ludzie mogą oczekiwać, że naukowcy zajmujący się danymi będą robić wiele inżynierii oprogramowania. Znajomość pytona uniezależni Cię od innych inżynierów oprogramowania.)

  • R ma wiele pakietów statystycznych, które są znacznie lepsze niż Python lub MATLAB. Używając R, można naprawdę myśleć na poziomie modelu zamiast na poziomie szczegółowości implementacji. Jest to ogromna zaleta przy opracowywaniu modeli statystycznych. Na przykład wiele osób ręcznie wdraża sieci neuronowe w pythonie; wykonanie takiej pracy może nie pomóc w zrozumieniu, dlaczego działają sieci neuronowe, ale po prostu przestrzegając przepisu, aby powielić pracę innych osób, aby sprawdzić, czy działa. Jeśli pracujemy w R, możemy łatwo skupić się na matematyce modelu, zamiast na szczegółach implementacji.

W wielu przypadkach ludzie używają ich razem. Oprogramowanie do budowania jest łatwe w Pythonie, a modele do budowania są lepsze w R. Jeśli chcemy dostarczyć model w produkcji, ale nie w formie papierowej, możemy potrzebować obu. Jeśli twoja firma ma wielu inżynierów oprogramowania, możesz potrzebować więcej R. A jeśli twoja firma ma wielu naukowców, możesz potrzebować więcej pytona.

hxd1011
źródło
2
Dobra odpowiedź, ale napisałeś „Jason” zamiast „JSON”, bardzo mnie roześmiałeś
par
Tak naprawdę nie jestem członkiem ani statystyk, ani społeczności „uczących się maszynowo”, ale myślę, że dostępność zaawansowanych pakietów jest w pewnym stopniu zależna od społeczności. Wierzę, że wiele nowych i najnowocześniejszych technik statystycznych pochodzi z kodem R. Ale kiedy widzę wizję komputerową / uczenie maszynowe / dokumenty w sieci neuronowej, które zawierają kody („wysokiego poziomu”) ... wydaje się, że to Matlab lub python.
GeoMatt22,
1
+1 za omówienie wpływu języków na sposób myślenia. Ogromną zaletą R jest to, że ponieważ jest zbudowany przez statystyków dla statystyków, zachęca do myślenia w kategoriach modelowania. Ujawnienie: Biegle posługuję się językiem R, ale mówię tylko w Pythonie.
Ashe
Um ... a co z tym scikit-learn? scikit-learn.org/stable
okręt wojenny
10

Programiści wszystkich pasków nie doceniają, ile wyborów językowych ma znaczenie kulturowe . Programiści internetowi, tacy jak Node.js. Naukowcy lubią Python. Jako inżynier oprogramowania polyglot, który potrafi poradzić sobie z płynnością Javascript i sztywnością Javy, zdałem sobie sprawę, że nie ma żadnego wewnętrznego powodu, dla którego języki te źle sobie radzą - po prostu ogromna ilość pakietów, dokumentacji, społeczności, książek, otaczające ich itp.

(Ze względów wewnętrznych jeden przypadkowy język jest lepszy niż jakiś inny język, zobacz nadchodzące komentarze do tej odpowiedzi).

Moje osobiste przewidywanie jest takie, że Python jest drogą przyszłości, ponieważ może zrobić wszystko, co R może - a raczej wystarczającą ilość tego, co R mogą zrobić, aby zaangażowani programiści pracowali, aby wypełnić luki - i jest znacznie lepszym językiem inżynierii oprogramowania. Inżynieria oprogramowania to dyscyplina zajmująca się:

  • ufając, że Twój kod jest wystarczająco wiarygodny, aby wprowadzić go do produkcji (więc każdy model uczenia maszynowego, który służy użytkownikom w czasie rzeczywistym)
  • upewniając się, że Twój kod może nadal działać, gdy jest modyfikowany i ponownie wykorzystywany (np. ramy testowania jednostkowego)
  • nacisk na czytelność, z korzyścią dla innych i dla ciebie w zaledwie 6 miesięcy
  • duży nacisk na organizację kodu, dla ułatwienia wersjonowania, wycofywania się z poprzednimi wersjami roboczymi i jednoczesnego programowania przez wiele podmiotów
  • preferuję narzędzia i technologie z lepszą dokumentacją, a najlepiej z tą właściwością, że w ogóle nie będą działać, chyba że odpowiednio je wykorzystasz (to była moja największa trudność z Matlabem - pytam google i muszę czytać na ich raczej okropnych forach szukanie odpowiedzi)

Ponadto, mówiąc szczerze, łatwiej jest się nauczyć Pythona.

Naukowcy i statystycy zdadzą sobie sprawę, że są interesariuszami dobrej praktyki inżynierii oprogramowania, a nie niezależnym i niezależnym zawodem. Tylko moje zdanie, ale dokumenty potwierdzające kruchość kodu akademickiego to potwierdzą.

Ta odpowiedź to cała moja opinia - ale zadałeś bardzo opiniotwórcze pytanie, a ponieważ do tej pory zostało dobrze przyjęte, poczułem, że zasługujesz na bezpretensjonalną, właściwie poinformowaną (mam nadzieję!) Opinię w odpowiedzi. Istnieje poważny argument na rzecz Pythona ponad R na całym forum i nie powinienem próbować pisać bezstronnej odpowiedzi, gdy rzeczywistość może być stronnicza.

djechlin
źródło
Czy Julia, kiedy dorośnie, będzie lepszą alternatywą niż Python?
kjetil b halvorsen
1
@kjetilbhalvorsen „kiedy dorośnie” to raczej „jeśli”, bardzo trudno jest zastąpić ustalony język, i jest to w zasadzie osobisty wybór, czy chcesz być na pograniczu technologii, aby nie zostać mocno zaadaptowanym. IMO, Python ma teraz rozpęd. Julia nie jest mi jednak znana, więc jest to dość ogólna opinia.
djechlin
1
Z wyjątkiem pierwszej kuli, nie widzę, jak Python jest z natury lepszy w żadnym z pozostałych czterech punktów.
Firebug
4
„Python może zrobić wszystko, co R” może być fałszem. „dość tego, co R mogą zrobić, aby zaangażowani programiści pracowali, aby wypełnić luki” , to byłoby prawdą dla wszystkiego na świecie - wszystko można zrobić tak długo, jak długo ktoś nad tym pracuje.
Gented,
2
@djechlin Całkowicie nie. Przykładem niezawodności był „każdy model uczenia maszynowego, który służy użytkownikom w czasie rzeczywistym”. Python jest w tym lepszy, ponieważ obsługuje wdrażanie znacznie łatwiej niż R i tylko to. Testy jednostkowe, czytelność, organizacja i dokumentacja nie są nieodłącznymi cechami. Możesz wdrożyć własne testy, ułatwić czytanie kodu, uporządkować go, a dokumentacja R jest naprawdę łatwa do zrozumienia.
Firebug,
8

Jestem użytkownikiem R, ale myślę, że Python to przyszłość (nie sądzę, że to składnia)

Python to przyszłość
Zaletą Pythona jest to, że inni wspominali już o znacznie szerszym wsparciu, a dla programistów bardziej logicznej składni.
Również zdolność do przełożenia wyników analizy na system produkcyjny jest znacznie prostsza.
Być może wynika to z ogólnego przeznaczenia Pythona, a R nie jest, ale nawet podnoszę brwi, gdy widzę produkowany potok R.
Ale nie tylko to, nawet w przypadku zaawansowanych aplikacji, Python szybko nadrabia zaległości (Scikit-learn, PyBrain, Tensorflow itp.), A podczas gdy R nadal jest lingua franca w środowisku akademickim w zakresie wdrażania metod statystycznych, Python stał się ogromny w sektorze profesjonalnym ze względu na pojawienie się zaawansowanych bibliotek specjalistycznych.

Ale R nie jest zły.
Wiele osób lubi skakać na modę „R ma złą składnię”.
Chciałbym zaproponować, aby składnia R była dobra!
Funkcje przypisania, leniwa ocena, niestandardowa ocena i formuły są ogromnymi korzyściami podczas korzystania z R.
To po prostu oszczędza tyle czasu, że nie musisz się martwić o unikanie nazw zmiennych, o których mowa w podsumowaniu, ani o tym, jak skonstruować logikę tego, co jest modelowane na podstawie tego, co lub przeglądanie nazw za pomocą, names()a następnie przypisywanie nowych nazw przez dodawanie <- c("A", "B", "C").
Kiedy ludzie narzekają na dziwną składnię R. patrzą na to jako na język programowania, a nie na narzędzie do analizy danych.
Jako ktoś pochodzący z R i kochający dplyr, uważam, że składnia pand jest nieco niezdarna w porównaniu.
Tak, jest to trochę bardziej elastyczne, ale w przypadku większości zadań potrzeba dużo więcej naciśnięć klawiszy, aby wykonać proste polecenie niż w R, które są po prostu po to, aby spełnić parser Pythona, a nie wyrazić swój pomysł.

Podsumowując
Oczywiście dobrze jest wiedzieć jedno i drugie, a gdy Python dociera tam, wybory projektowe specyficzne dla domeny R po prostu ułatwiają pracę ad hoc. Ogromną wadą R jest to, że trudno jest opuścić jego domenę, co w zasadzie musisz zrobić, gdy spróbujesz wprowadzić swoje odkrycia w zrównoważony sposób.

Robin Gertenbach
źródło
4

Jeśli patrzysz na R jako na bardziej narzędzie statystyczne, a nie na język programowania, to jest naprawdę świetne. Ma znacznie większą elastyczność niż Stata lub SPSS, ale może zrobić wszystko, co w ich mocy. Nauczyłem się Staty na studiach, a R. był łatwy do spojrzenia, ponieważ miałem już perspektywę narzędzia statystycznego, a nie czystego języka programowania, który mogliby mieć inni.

Myślę, że frustracja z R pojawia się, gdy ci, którzy są programistami, próbują nauczyć się i zrozumieć R; ale jest to świetne narzędzie dla osób przybywających do R poprzez tło statystyczne.

Python jest świetny, jeśli jesteś już świetnym programistą; ale dla mnie jako początkującego programistę i statystyki tuż po studiach, R był znacznie lepszym wyborem. To naprawdę tylko preferencja, która pasuje do twojego zestawu umiejętności i bardziej interesuje.

JBeazer
źródło
3

Dodanie do niektórych wcześniejszych odpowiedzi:

Z mojego doświadczenia wynika, że ​​nie ma nic prostszego niż używanie dplyr + tidyr, ggplot i Rmarkdown R w przechodzeniu od surowych danych do prezentowalnych wyników. Python oferuje wiele i używam go coraz częściej, ale z pewnością uwielbiam sposób, w jaki pakiety Hadley łączą się ze sobą.

BStange
źródło
2

Python ma szerokie zastosowanie poza nauką, więc korzystasz z tego wszystkiego. Jak wskazuje „An Angry Guide to R”, R został opracowany przez społeczność, która musiała w pierwszej kolejności zerować twórców oprogramowania.

Powiedziałbym, że dziś R ma dwie główne zalety: niektóre naprawdę dojrzałe wysoce wyspecjalizowane pakiety w niektórych obszarach oraz najnowocześniejszy, powtarzalny pakiet badawczy knitr.

Python wydaje się być bardziej odpowiedni do wszystkiego innego.

Jest to oczywiście opinia, ponieważ prawie wszystko w tym wątku. Jestem trochę zaskoczony, że ten wątek wciąż żyje.

Gena Kukartsev
źródło
2

Jak opisano w innych odpowiedziach, Python jest dobrym językiem programowania ogólnego, podczas gdy R ma poważne wady jako język programowania, ale ma bogatszy zestaw bibliotek analizy danych. W ostatnich latach Python dogania R dzięki rozwojowi dojrzałych bibliotek analizy danych, takich jak scikit-learn, podczas gdy R nigdy nie zostanie naprawiony. W praktyce używam Pythona (właściwie Hy ) do prawie wszystkiego i zwracam się do R tylko dla względnie ezoterycznych metod, takich jak regresja kwantylowa (których implementacja w statsmodelach Pythona wydaje się być zepsuta). Istnieje kilka sposobów wywoływania R z Pythona; PypeR to taki, który jest tak prosty, że udało mi się go uruchomić w tak nieprzyjaznych środowiskach, jak serwer Windows.

Edycja : Zachęcam każdego, kto chciałby się o to kłócić, aby porozmawiał z autorami powiązanego eseju, zamiast komentować tę odpowiedź.

Kodiolog
źródło
8
Ten przewodnik aRrgh jest najbardziej nieświadomą krytyką, jaką kiedykolwiek czytałem o R (i czytałem wiele).
Firebug
10
„Dokumentacja jest niesamowicie zła”, to nie ma pojęcia. Siła R to jej prostota dla osób niebędących programistami oraz obszerna dokumentacja. „Ponieważ nawet nazwisko R. jest głupie, naprawdę trudno jest znaleźć w Google przydatne rzeczy. Przepraszam. Witaj w R!”, To nie ma pojęcia. Nigdy nie spotkałem żadnego problemu, próbując znaleźć dokumentację do najbardziej niejasnych pakietów na świecie. „Zmieniasz nazwy kolumn, upiornie, przypisując imiona (ramki). Czy wiesz jak i dlaczego to działa? Proszę, ucz mnie.”, Cmmmm, nawet nie próbuje.
Firebug,
8
W jaki sposób R jest trudniejszy do znalezienia w Google niż C? Google jest inteligentny. Dowiaduje się, że interesuje Cię język programowania R. R jest głównie krytykowany przez ludzi wywodzących się z innych języków programowania. Przepraszamy, ale nie został opracowany jako alternatywa dla tych języków. Został opracowany dla i przez statystów. W rezultacie niektóre decyzje projektowe nie były optymalne, ale stwierdzenie, że istnieją poważne wady, jest nieco mocne. Każdy język programowania ma swoje mocne i słabe strony.
Roland,
5
Tworzenie pakietu jest w rzeczywistości bardzo łatwe. Komplikuje się to tylko wtedy, gdy będziesz przestrzegać zasad (właściwie) egzekwowanych przez CRAN. Możesz importować selektywnie z pakietów, jeśli utworzysz pakiet. Recykling wektorów jest naprawdę siłą. Nie ma niespójności między listą podzbiorów a wektorami. Część pozostałych można rzeczywiście uznać za wady.
Roland,
6
R wyraźnie ma brodawki, niektóre z niewybaczalnej odmiany „wat” (stringsAsFactors). Ale ma także biblioteki statystyczne, które nie mają równoległych, nawet zdalnie, w żadnym innym języku. Programowanie wymagane do stworzenia tych bibliotek jest poważniejsze niż większość z nas kiedykolwiek będzie musiała zrobić. Mówiąc ogólnie, „R nie jest poważnym językiem” znajduje się gdzieś pomiędzy niezdarnymi, beznadziejnie parafialnymi, niepiśmiennymi i kwaśnymi winogronami. Mówię to jako ktoś, kto chciałby, aby R był w zasadzie Pythonem z bibliotekami R.
Paul