R vs Python do analizy danych [zamknięte]


60

Programuję od około roku i bardzo interesuje mnie analiza danych i uczenie maszynowe. Biorę udział w kilku kursach online i czytam kilka książek.

Wszystko, co robię, używa albo R, albo Pythona i szukam sugestii, czy powinienem skoncentrować się na jednym języku (a jeśli tak, to na którym), czy kontynuować oba; czy się uzupełniają?

- Powinienem wspomnieć, że używam C # w szkole, ale znam Python poprzez samokształcenie.


Oto może interesujący link: coursera.org/course/compdata
Giorgio

Odpowiedzi:


39

Używam zarówno Pythona (do analizy danych kursu, w tym numpy i scipy), jak i R obok siebie. Jednak używam R wyłącznie do przeprowadzania analizy danych, a Python do bardziej ogólnych zadań programistycznych (np. Kontrola przepływu pracy modelu komputerowego).

Jeśli chodzi o podstawowe operacje, powiedzmy operacje na tablicach i sortowaniu, R i Python + numpy są bardzo porównywalne. Zaletą R jest bardzo duża biblioteka funkcji statystycznych. Ponadto matplotlib nie wydaje się tak dobry jak ggplot2, ale nie używałem go tak często. Ponadto skupiłbym się najpierw na jednym języku i stałem się dobry w jego szczegółach. Wygląda na to, że interesuje Cię przede wszystkim analiza danych, a nie inżynieria oprogramowania. Wybrałbym R i trzymałem się tego. To powiedziawszy, myślę, że wybór dla Pythona + numpy + scipy + scikit jest zdecydowanie i doskonały wybór, po prostu czuję, że R jest nieco doskonalszy.

Rozejrzałbym się również wokół ciebie, z czego korzystają twoi koledzy i inni ludzie z twojej dziedziny. Jeśli wszyscy używają, powiedzmy, Pythona, warto trzymać się tego, aby łatwiej uczyć się od nich i wymieniać kod.

Oświadczenie: Zauważ, że jestem dużym użytkownikiem R, więc moje zdanie może być stronnicze, chociaż starałem się zachować jak najbardziej obiektywną odpowiedź. Ponadto, nie używałem zbyt często Pythona + numpy, chociaż znam kolegi, którzy przeprowadzają w nim wszystkie analizy danych.

ps: Ten link może być interesujący: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps: lub ten cytat z tego postu :

Używam R i Pythona do wszystkich moich badań (w razie potrzeby z Rcpp lub Cython), ale wolałbym unikać pisania w C lub C ++, jeśli mogę tego uniknąć. R to wspaniały język, w dużej mierze ze względu na niesamowitą społeczność użytkowników. Został stworzony przez statystów, co oznacza, że ​​analiza danych leży u podstaw języka; Uważam to za główną cechę języka i duży powód, dla którego nie zostanie on zastąpiony w najbliższym czasie. Python jest ogólnie lepszym ogólnym językiem, zwłaszcza jeśli weźmie się pod uwagę połączenie programowania funkcjonalnego z orientacją obiektową. W połączeniu z Scipy / Numpy, Pandami i statsmodels, zapewnia to potężną kombinację. Ale w Pythonie wciąż brakuje poważnej społeczności statystów / matematyków.


3
Mówiąc, że R jest silniejszy niż Python, masz na myśli Python + numpy / blaze + scipy , czy zwykły Python?
9000

5
Mam na myśli Python + numpy tak, w przeciwnym razie wybór byłby jeszcze łatwiejszy. Myślę, że jeśli chodzi o podstawowe operacje, powiedzmy operacje na tablicach i sortowaniu, R i Python + numpy są bardzo porównywalne. Zaletą R jest bardzo duża biblioteka funkcji statystycznych. Ponadto matplotlib nie wydaje się tak dobry jak ggplot2, ale nie używałem go tak często.
Paul Hiemstra

To powiedziawszy, myślę, że wybór dla Pythona + numpy + scipy + scikit jest zdecydowanie i doskonały wybór, po prostu czuję, że R jest nieco doskonalszy.
Paul Hiemstra

@PaulHiemstra - W komentarzach dodajesz kilka fajnych punktów, które prawdopodobnie poprawiłyby twoją odpowiedź - jeśli pytanie zostanie ponownie otwarte i masz taką możliwość.
psr

@psr Edytowałem w moich komentarzach, najwyraźniej nie ma potrzeby, aby pytanie było otwarte, jeśli chcę je edytować (może tylko ja mogę je edytować ...).
Paul Hiemstra

36

Tło: Jestem naukowcem danych w startupie w Austin i pochodzę ze szkoły podstawowej (fizyka). Codziennie używam Pythona do analizy danych, ale trochę używam R. Używam również C # / .NET i Java (prawie codziennie), bardzo często używałem C ++ w szkole.

Myślę, że głównym problemem związanym z używaniem Pythona do liczb (ponad R) jest rozmiar społeczności użytkowników. Ponieważ język istnieje od zawsze, wiele osób robi rzeczy, które prawdopodobnie będziesz chciał zrobić. Oznacza to, że w obliczu trudnego problemu możesz po prostu pobrać pakiet i zabrać się do pracy. A R „po prostu działa”: dajesz mu zestaw danych i wie, jakie statystyki podsumowujące są przydatne. Dajesz mu pewne wyniki i wie, jakie działki chcesz. Są tam wszystkie typowe wątki, które chciałbyś zrobić, nawet te dość ezoteryczne, które będziesz musiał sprawdzić na Wikipedii. Tak miły jak scipy / numpy / pandas / statsmodels / etc. są dla Pythona, nie są na poziomie standardowej biblioteki R.

Główną przewagą Pythona nad R jest to, że jest to prawdziwy język programowania w rodzinie C. Łatwo się skaluje, więc można sobie wyobrazić, że wszystko, co masz w piaskownicy, może być użyte w produkcji. Python ma włączoną orientację obiektową, w przeciwieństwie do R, gdzie wydaje się, że jest to refleksja (ponieważ tak jest). Są też inne rzeczy, które ładnie robi Python: gwintowanie i przetwarzanie równoległe są dość łatwe i nie jestem pewien, czy tak jest w R. A nauka języka Python daje również potężne narzędzie do tworzenia skryptów. Są też naprawdę dobre (darmowe) IDE dla Pythona, o wiele lepsze, jeśli chcesz zapłacić (mniej niż 100 $), i nie jestem pewien, czy tak jest w przypadku R - jedynym R IDE, o którym wiem, jest R Studio, które jest całkiem dobre, ale z mojego doświadczenia nie jest tak dobre jak PyDev + Eclipse.

Dodam to jako trochę kickera: ponieważ nadal jesteś w szkole, powinieneś pomyśleć o pracy. Znajdziesz więcej ofert pracy dla wysoko wykwalifikowanych twórców języka Python niż dla wysoko wykwalifikowanych twórców języka Python. W Austin miejsca pracy dla deweloperów Django trochę spadają z nieba. Jeśli znasz R bardzo dobrze, istnieje kilka miejsc, w których będziesz mógł wykorzystać tę umiejętność (na przykład Revolution Analytics), ale wydaje się, że wiele sklepów używa Pythona. Nawet w dziedzinie analizy danych / analizy danych coraz więcej osób zwraca się do Pythona.

I nie lekceważ, że możesz pracować z / dla osób, które znają (powiedzmy) Javę. Ci ludzie będą w stanie dość łatwo odczytać twój kod Python. Niekoniecznie tak będzie, jeśli wykonasz całą pracę w języku R. (Wynika to z doświadczenia).

W końcu może to zabrzmieć powierzchownie, ale myślę, że dokumentacja Pythona i konwencje nazewnictwa (które są religijnie przestrzegane, jak się okazuje) są o wiele ładniejsze niż utylitarny dokument R. To będzie gorąca debata, jestem pewien, ale w Pythonie nacisk kładziony jest na czytelność. Oznacza to, że argumenty funkcji Pythona mają nazwy, które można odczytać, a to coś znaczy. W języku R nazwy argumentów są często obcinane --- w Pythonie jest to mniej prawdziwe. Może to zabrzmieć pedantycznie, ale doprowadza mnie do szaleństwa, aby pisać rzeczy takie jak „xlab”, kiedy równie łatwo można nazwać argument „x_label” (tylko jeden przykład) - ma to ogromny wpływ, gdy próbujesz nauczyć się nowy moduł / moduł API. Czytanie R doc jest jak czytanie stron podręcznika systemu Linux - jeśli to właśnie płynie twoją łodzią, to więcej mocy dla ciebie.

Biorąc to wszystko pod uwagę, proponuję następujące (co jest również moim typowym obiegiem pracy): skoro znasz Python, użyj go jako pierwszego narzędzia. Gdy okaże się, że brakuje Pythona, naucz się wystarczająco dużo R, aby robić, co chcesz, a następnie:

  1. Napisz skrypty w R i uruchom je z Pythona za pomocą modułu podprocesu lub
  2. Zainstaluj moduł RPy.

Użyj Pythona do tego, w czym Python jest dobry, i uzupełnij luki jednym z powyższych. To jest mój normalny przepływ pracy - zwykle używam R do kreślenia rzeczy, a Pythona do ciężkiego podnoszenia.

Podsumowując: ze względu na nacisk Pythona na czytelność (wyszukaj w Google „Pythonic”), dostępność dobrych, bezpłatnych IDE, fakt, że jest w rodzinie języków C, większa szansa, że ​​będziesz w stanie wykorzystać wielkie litery zestaw umiejętności i ogólnie lepszy styl dokumentacji języka, sugerowałbym, aby uczynić Python twoim głównym celem i polegać na R tylko w razie potrzeby.


Ok, to (jak dotąd) moja najpopularniejsza odpowiedź na stronie stosu, a nawet nie jest to nr 1 :) Mam nadzieję, że pomogło to kilku osobom na ścieżce.

W każdym razie doszedłem do następującego wniosku po kilku latach w terenie:

To prawdopodobnie niewłaściwe pytanie.

Pytanie „czy powinienem nauczyć się tej konkretnej technologii” jest złym pytaniem. Dlaczego?

  1. Zmiany technologiczne. Zawsze będziesz musiał nauczyć się innej technologii. Jeśli idziesz do pracy na Twitterze, uruchamiają Scalę. Niektóre miejsca to sklepy Python. Niektórych miejsc to nie obchodzi. Nie będziesz zatrudniony, ponieważ znasz lub nie znasz jakiegoś szczególnego elementu techniki - jeśli nie możesz nauczyć się nowej technologii, możesz (i powinieneś) zostać zwolniony. To tak, jakby, jeśli wyjdzie nowy klucz do rur, a ty jesteś hydraulikiem i nie możesz zrozumieć, jak działa nowy klucz do rur, prawdopodobnie jesteś kiepskim hydraulikiem.
  2. Biorąc pod uwagę wybór „Czy uczę się tej technologii” lub „Czy spędzam więcej czasu na rozwiązywaniu prawdziwych problemów”, zawsze powinieneś wybierać tę ostatnią, bez wyjątku.

Jako naukowiec danych Twoim zadaniem jest rozwiązywanie problemów . Ta odrobina mądrości jest prawie zawsze tracona na każdej konferencji lub spotkaniu, na które się udajesz - każda rozmowa na temat „dużych zbiorów danych”, jaką kiedykolwiek widziałem, koncentrowała się na technologii, a nie na rozwiązywaniu problemów. Rzeczywiste rozwiązywanie problemów jest zwykle przenoszone na kilka slajdów na końcu:

[Talk title = „Deep learning at Cool New Startup”] ... [45 minut diagramów i techno-babel, podczas których dzielę się i sprawdzam swój telefon] ... I po wdrożeniu naszego klastra Hadoop i [Ben strefuje się jeszcze raz] możemy uruchomić naszą rutynową naukę, [obudź się: oto dlaczego przyszedłem!], których szczegóły są zastrzeżone. Pytania?

Daje to złe wrażenie, że w tej dziedzinie chodzi o technologię i to po prostu nieprawda. Jeśli jesteś naprawdę dobry w Scali, Pythonie lub R., ale naprawdę źle rozwiązujesz problemy , uczynisz kiepskiego naukowca danych .

Paco Nathan był w Austin kilka miesięcy temu na całodniowej konferencji „big data” i powiedział coś w stylu „Chemia nie dotyczy probówek”. To właściwie podsumowuje - w danych nie chodzi o Scalę, Hadoopa, Spark, czy coś, co pojawia się w innych technologiach. Na koniec dnia chcę zatrudnić osoby, które myślą, a nie osoby biegłe w używaniu przepełnienia stosu do nauki zestawów narzędzi.

Podobnie, jeśli pójdziesz na rozmowę o pracę, a oni nie zatrudniają cię tylko dlatego, że nie znasz języka programowania, to ta firma jest do kitu . Nie rozumieją, co oznacza „naukowiec danych”, i prawdopodobnie lepiej dla ciebie, jeśli się nie uda.

Wreszcie, jeśli twoje umiejętności rozwiązywania problemów są marginalne (bądź uczciwy wobec siebie), lub naprawdę lubisz techniczną stronę rzeczy, lub nauka technologii jest tym, co naprawdę kochasz (znowu, bądź szczera), to naucz się dużo techniki. Zawsze będziesz w stanie znaleźć role typu „inżynier danych”, które pasują do twojego zestawu umiejętności. To nie jest złe, inżynierowie danych smarują koła i umożliwiają wykonywanie pracy naukowca. (Różnica jest podobna do architekta oprogramowania i zespołu programistów).


3
Powiem jednak, że gdybym pracował na parkiecie, a główny inwestor przyszedł do mnie z csv cen opcji i chciał, żebym dopasował je do logarytmicznego rozkładu liniowego i wycofał średnią i odchylenie standardowe, Nie rozważałbym nawet Pythona. Myślę, że to jest jak trzy linie kodu, aby to zrobić w R.
BenDundee

12

Tak więc, przede wszystkim zrobiłem analizę danych w Matlabie, ale zrobiłem trochę w Pythonie (i częściej używałem Pythona do celów ogólnych), a także zacząłem trochę R. Mam zamiar tutaj przejść do sedna i sugeruję, abyś użył Pyton. Powodem jest to, że wykonujesz analizę danych z perspektywy uczenia maszynowego, a nie statystyki (gdzie dominuje R) lub cyfrowe przetwarzanie sygnału (gdzie dominuje Matlab).

Oczywiście uczenie maszynowe i statystyki w dużym stopniu się pokrywają. Ale nakładanie się nie jest tożsamością. Machine Learning korzysta z pomysłów z CS, których ja nie chciałbym wdrożyć w R. Pewnie, możesz obliczyć minimalne drzewo rozpinające w R. Może to jednak wyglądać jak brzydki bałagan. Osoby uczące się maszynowo zakładają, że masz łatwy dostęp do tabel mieszania, drzew wyszukiwania binarnego i tak dalej. Moim zdaniem łatwiej jest w razie potrzeby zaimplementować algorytm statystyczny, niż próbować wyrównać ogólny język programowania z ogólnym językiem programowania.

Zalety uboczne Pythona do analizy danych są również znacznie wyższe. Poznasz prawdziwy język programowania w tym samym czasie, który potrafi obsługiwać skrypty, tworzyć większe aplikacje itp. R jest naprawdę niszowym językiem społeczności statystyk, nawet Matlab jest znacznie bardziej rozpowszechniony.

Wydaje mi się, że najpierw przejrzałbym niektóre z gazet i sprawdził, w jakim języku kodują. Jeśli nie ma go w R, nie używaj go.


1
Dziękuję Ci bardzo. Zdecydowanie bardziej interesuje mnie strona ML.
The_Cthulhu_Kid

1
Drobny dodatek: Jestem pewien, że R może to zrobić w pewien sposób, ale Python jest dobrze znany ze swojej zdolności do wywoływania C lub kompilowania funkcji w C przy użyciu Cython przy minimalnym nakładzie pracy. Dzięki temu zwykle można przyspieszyć przy mniejszym wysiłku, co jest głównym czynnikiem przy analizie rzeczywistych danych. Kolejna (ostatnia) egzotyczna uwaga: Java ma kilka naprawdę dobrych bibliotek do uczenia maszynowego (takich jak WEKA). Jednak fajne jest to, że możesz je również wywołać z Pythona, używając Jython :-)
Nir Friedman

7

Jako oldschoolowy (ponad 50) naukowiec, który ma i nadal używa wielu z tych narzędzi, dodam dwa centy. Współpracowałem z kolegami, którzy wciąż piszą każdy fragment kodu w Fortranie, od trywialnych jednorazowych zadań analizy danych po kod, który dominuje na niektórych światowych superkomputerach. Najnowsze dialekty Fortrana (F90, F95, F2003, F2008) to IMHO, jedne z najlepiej zaprojektowanych języków. Kilkadziesiąt lat doświadczenia w dziedzinie obliczeń o wysokiej wydajności doprowadziło do imponującego rozwoju języka.

Czasami używałem tylko Pythona i ponownie go odwiedzę (głównie z powodu Sage), ale używam sprawdzonego w czasie pakietu języków, który działa dobrze dla mnie. Fortran, C, Perl, R i Scheme (z tcl do skryptowania VMD). Uważam, że połączenie R, Fortran i C jest bardzo wygodne. W przeciwieństwie do innych komentarzy na temat modelu obiektowego w R, jest to dobry model obiektowy do pracy interaktywnej, oparty na koncepcji CLOS funkcji ogólnych i metody wysyłania metod. Pracując interaktywnie z nowym pakietem, często możesz polegać na ogólnych funkcjach, takich jak „print” i „plot”, aby zrobić coś produktywnego.

Interfejs API for Fortran i C jest bardzo łatwy w użyciu. Jeśli jesteś przyzwyczajony do pracy w Fortran i C do modelowania i analizy danych, to duży plus. Możliwość dynamicznego generowania kodu R i jego oceny, chociaż nie jest tak czysta jak systemy makr w Lisp i C, jest bardzo przydatna podczas pracy z dynamicznymi zestawami danych.

Niektóre ograniczenia R dla danych rzeczywistych obejmują podejście call by value. Chociaż istnieją powody CS dla wywoływania według wartości, programowanie w świecie rzeczywistym z dużymi danymi liczbowymi wymaga pewnej formy wywołania przez odniesienie (zwróć uwagę na znaczenie wspólnych bloków Fortran w starszym kodzie lub danych modułu w nowszym kodzie). Podejście przyjęte przez PDL (Perl Data Language) jest szczególnie eleganckie pod tym względem. (Pdl są w zasadzie wywoływane przez referencję, chyba że poprosisz o kopię. Odwołanie Sub-pdl do podrozdziału nadrzędnego pdl, w znacznie bardziej przejrzystej składni niż Fortran lub C).

Dobrze jest uczyć się wielu języków. Python jest niewątpliwie ważnym językiem, ale R jest również w swojej dziedzinie. Ale kiedy guma naprawdę musi znaleźć się na drodze w nauce, Fortran i C (i C ++ dla niektórych) będą trudne do wyparcia.


1

Kluczową cechą R jest to, że jest to biblioteka pakietów, tak samo jak język programowania. Każdy pisarz pakietów ma w zasadzie dostęp do zawartości każdego innego pakietu. To radykalnie zmniejsza potrzebę ponownego wymyślania, ponownego dokumentowania, ponownego uczenia się. Dotyczy to zarówno autorów pakietów, jak i użytkowników. Oczywiście ta infrastruktura ma swoją cenę. Autorzy pakietów muszą dostosować się do standardów, które z czasem stają się coraz bardziej wybredne. Niektóre z nich mogą się przełożyć na to, co napotykają użytkownicy.

Python, jak rozumiem, nie ma systemu zarządzania pakietami. Nie ma odpowiednika R's Comprehensive R Archive Network ( http://cran.r-project.org ) i nie ma bezpośredniego odpowiednika widoków zadań R ( http://cran.csiro.au/web/views/ ). Tak więc jest to, w stopniu, w jakim nie ma to miejsca w przypadku R, narzędzie dla programistów pracujących raczej samodzielnie, a nie w ramach wspólnych działań na rzecz rozwoju tego, co już jest dostępne.

W przypadku analizy danych i uczenia maszynowego zapotrzebowanie z pewnością będzie w bardzo dużym stopniu opierać się na już istniejących umiejętnościach i wykorzystywać je. W przypadku bardziej ogólnych zadań programistycznych Python może mieć zalety. Czy wykonasz ten rodzaj pracy wystarczająco, aby uzasadnić wysiłek związany z nauką języka Python?


3
Python ma system zarządzania pakietami o nazwie pip. Nie jest częścią standardowej biblioteki, ale będzie dostarczany ze standardowym Pythonem zaczynającym się od Python 3.4, który zostanie wydany w przyszłym miesiącu (marzec 2014).
Cody Piersall

2
Odpowiednikiem Python w Comprehensive R Archive Network jest PyPI: pypi.python.org/pypi
Wilfred Hughes
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.