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?
Odpowiedzi:
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.
ggplot2
jest 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 jakff
).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.pandas
jest ś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.
źródło
data.table
pakiet w R jest specjalnie przeznaczony do wydajnej pracy z dużymi zestawami danych i wpasowuje się w rozproszone przetwarzanie.data.table
; Cieszę się również, że mogę powiedzieć, żervest
jest DOSKONAŁYM narzędziem do obsługi większości zadań zgarniania i jest o wiele łatwiejszy do uruchomienia niżbeautifulsoup
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:
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
,RmySQL
dla R iMySQLdb
dla Pythona działa płynnie, niewiele do dodania). Jeśli chodzi o czytanie zewnętrznych plików .csv,data.table
pakiet dla R udostępnia funkcję,fread
któ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.table
zapewnia niepowtarzalne sposoby etykieta, zmieniać nazwy, usuwać i dostępu do danych. Standardowa składnia jest bardzo podobna do SQLdt[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ż wj
klauzuli, 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 Rapply, sapply, lapply, ifelse
wykonują 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
pandas
biblioteka. 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órychnumpy array, numpy list, numpy matrix
lub 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ą Pythonaapply
lublambda
. Osobiście nie lubię gramatykidf[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.table
ale 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
stringr
pakietu, 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
SciPy
iscikit-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,
ggplot2
przede 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ń swoichshiny app
funkcji, 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 myAnalysis
dowolnym 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.źródło
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.
źródło
scikit-learn
? scikit-learn.org/stableProgramiś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ę:
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.
źródło
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.
źródło
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.
źródło
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ą.
źródło
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.
źródło
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ź.
źródło