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:
- Napisz skrypty w R i uruchom je z Pythona za pomocą modułu podprocesu lub
- 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?
- 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.
- 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).