Dlaczego firmy internetowe wolą Java / Python do pracy naukowca?

53

Widzę wiele razy w opisie pracy dla analityka danych proszącego o doświadczenie w Pythonie / Javie i nie zwracam uwagi na R. Poniżej znajduje się osobisty e-mail, który otrzymałem od głównego analityka danych firmy, o którą aplikowałem przez linkin.

X, dzięki za połączenie i wyrażenie zainteresowania. Masz dobre umiejętności analityczne. Jednak wszyscy nasi naukowcy danych muszą mieć dobre umiejętności programowania w języku Java / Python, ponieważ jesteśmy organizacją internetową / mobilną i wszystko, co robimy, jest online.

Chociaż szanuję decyzję głównego naukowca danych, nie jestem w stanie uzyskać jasnego obrazu tego, jakie zadania może wykonać Python, których R nie może wykonać. Czy ktoś może dbać o opracowanie? Tak naprawdę jestem chętny do nauki Python / Java, pod warunkiem, że otrzymam trochę więcej szczegółów.

Edycja: Znalazłem interesującą dyskusję na temat Quory. Dlaczego Python jest preferowanym językiem dla badaczy danych?

Edycja2: Blog Udacity na temat języków i bibliotek do uczenia maszynowego

Entuzjasta
źródło
8
Python jest dobrym kompromisem: zapewnia wiele (niestandardowych) bibliotek dla danych (pandy, scikit, ...), a wiele procesów przemysłowych jest już zakodowanych w języku python.
Manu H
4
„nasi naukowcy danych muszą mieć dobre umiejętności programowania w języku Java / Python, ponieważ jesteśmy organizacją internetową / mobilną, a wszystko, co robimy, jest online” to ogromny non-sequitur - wniosek nie wynika z założenia. Podejrzewam, że CDS próbuje się ciebie pozbyć.
Spacedman,
5
@ManuH Jeśli przez „niestandardowy” masz na myśli „nie w standardowej bibliotece”, masz rację. Ale narzędzia te są dość szeroko rozpowszechnione i na pewno są podstawowymi elementami języka. numpy ma obecnie ponad 100 tys. pytań na temat SO, pandy 74 tys. Myślę, że z pewnością można uzasadnić, że są to standardy branżowe . (Przynajmniej po stronie tworzenia oprogramowania. Nie nazwałbym siebie „naukowcem danych”)
jpmc26,
2
„Data Scientist” nie jest dobrze zdefiniowanym terminem. Data Scientist to w zasadzie ktoś, kto może robić użyteczne rzeczy z danymi. Nie muszą korzystać z uczenia maszynowego ani pakietów statystycznych. Ktoś może używać Java / Scala / Spark / cokolwiek do zarządzania dużymi ilościami danych i uzyskiwania przydatnych informacji bez żadnego uczenia maszynowego.
Akavall,
2
@ jpmc26 Tak, o to mi chodziło. Teraz zdaję sobie sprawę, że można nawet wspomnieć o bibliotekach, które nie osiągnęły jeszcze standardów branżowych (jeszcze jeden argument za pytonem)
Manu H

Odpowiedzi:

67

Możesz więc zintegrować się z resztą bazy kodu. Wygląda na to, że Twoja firma używa mieszanki Java i Pythona. Co zrobisz, jeśli mały zakątek strony wymaga uczenia maszynowego; przekazać dane z bazą danych lub pamięcią podręczną, upuścić do R i tak dalej? Dlaczego nie zrobić tego wszystkiego w tym samym języku? Jest szybszy, czystszy i łatwiejszy w utrzymaniu.

Znasz jakieś firmy internetowe, które działają wyłącznie na R? Ani ja...

Wszystko, co mówiło, że Java jest ostatnim językiem, w którym bym analizował dane.

Emre
źródło
1
Już miałem powiedzieć, że architektura zorientowana na usługi pomaga również w pomoście technologii. PMML jest nieco przedsiębiorczy; Nie korzystałem z niego, ale twój sklep Java jest językiem macierzystym, więc nigdy nie wiesz ...
Emre
3
@ Entuzjaści nie zapominają, że możesz uruchomić R w Pythonie za pomocą RPy2 (na przykład), abyś mógł skończyć (tak jak to zrobiłem w poprzednim zadaniu) z uruchomionymi modelami napisanymi w R przez Pythona, aby mogły być prezentowane przez interfejs sieciowy przez django.
MD-Tech,
2
Zbudowaliśmy model w postaci plików tekstowych .r, które zostały załadowane do interpretera języka R w celu przetestowania (i ułatwienia budowania). Podczas gdy ten był budowany i testowany, zbudowaliśmy projekt django Pythona z sekcją, która odwoływała się do RPy2 i tworzyła obiekty RPy2. Obiekty te zostały następnie użyte do załadowania plików R w taki sam sposób, jak załadowałbyś je do interpretera, abyśmy mogli uzyskać dostęp do funkcji, które zawijają model. Możemy następnie przekazać dane z bazy danych do R za pośrednictwem pytona. Warstwa python dała nam interfejs WWW z django i kontrolę nad bazą danych itp.
MD-Tech
1
@ Entuzjasta Wyniki modelu zostały zwrócone przez R w RPy2 i przedstawione w interfejsie na różnych płaszczyznach, głównie na wykresach.
MD-Tech,
2
@Enthusiast To była bayesowska sieć finansów, ale nie mogę powiedzieć nic więcej. Model został napisany prostym R. Zwykły tekst; Edytowałem go w Vimie, ilekroć było to potrzebne, i został „wdrożony” przez załadowanie kodu R jako tekstu do RPy2 przy użyciu źródła („nasz_kod.r”) na obiektach RPy2. Zostało to zrobione w ten sposób, abyśmy mogli na żywo edytować model. To nie jest odpowiedź na to pytanie; to odpowiedź na pytanie, które nie zostało zadane;)
MD-Tech
24

Przyczyn może być wiele:

  1. Elastyczność siły roboczej: jednego programistę Java / Python można łatwo przenieść do innych zadań lub projektów.

  2. Dostępność kandydatów: jest wielu programistów Java / Python. Nie chcesz wprowadzać nowego języka programowania, aby później dowiedzieć się, że nie ma wykwalifikowanych pracowników lub są po prostu zbyt drogie.

  3. Integracja i ETL: Czasami uzyskanie danych o odpowiedniej jakości jest najtrudniejszą częścią projektu. Dlatego naturalne jest używanie tego samego języka, co w pozostałych systemach.

  4. Definicja modelu biznesowego: większość reguł biznesowych i modeli biznesowych jest już napisana w tych językach.

  5. Po prostu wszystko jest proste. Już teraz jest wystarczająco trudno być na bieżąco z technologiami. Zróżnicowana baza językowa może być chaotyczna. R za to, Ruby za to, Scala, Clojure, F #, Swift, Dart ... Mogą potrzebować różnych serwerów, różnych ścieżek, piekła do administrowania. Wszystkie mają własne IDE z narzędziami i wtyczkami (nie zawsze za darmo). Zobacz kilka uwag wuja Boba na temat wyboru języków i nowych technologii

Tak więc nawet jeśli masz 5–15% przewagę produktywności przy użyciu R dla konkretnego zadania, mogą preferować narzędzie, które po prostu wykonuje zadanie, nawet jeśli nie jest to najbardziej wydajne.

borjab
źródło
Chociaż to prawda, żadne z powyższych nie odpowiada na pytanie. Pozyskiwanie danych skraca 99% czasu do przeszukiwania bazy danych lub odczytu .csvplików - do tego celu R jest właściwie najlepszym odpowiednim narzędziem na rynku. Dostępność kandydatów: że jest więcej programistów Java niż programistów R, nie oznacza, że ​​musisz odrzucić kandydata R, jeśli go masz. Tak naprawdę nie ma znaczenia, w jaki sposób naukowiec wykonuje swoje ćwiczenia, o ile wdrażają czytelny kod, który może być uruchamiany przez niektóre serwery (lub jakąkolwiek inną rzecz, którą firma prowadzi).
gented
Oczywiście nie powinieneś odrzucać kandydata. Osoba jest znacznie ważniejsza niż narzędzie. Ich zespół może nauczyć się języka R, a kandydat może nauczyć się języka Java / Python. Ale zajmie to czas, co oznacza pieniądze.
borjab,
Z pewnością nie zgadzam się z tym, że nie ma to nic przeciwko językowi. Gdy jedyny członek zespołu, który zna R, nie ma wakacji i muszą wprowadzić zmiany, szef nie będzie szczęśliwy. Lub po prostu zapytaj zespół: „Och, świetnie, musimy nauczyć się nowego języka tylko dlatego, że nowy robi to w ten sposób”. Administracja serwera może być kolejnym działem, a nowe typy serwerów wymagają nowych analiz, procedur itp. Być może potrzebujesz zielonego światła od bezpieczeństwa IT, aby użyć nowego języka.
borjab
@GennaroTedesco kod napisany przez kandydata musi być możliwy do utrzymania przez innych programistów, jednocześnie pracując razem, a także w przyszłości, gdy oryginalny autor przejdzie dalej. Nie wystarczy mieć kandydata, który dobrze zna technologię, ważne jest, aby zastanowić się, jak łatwo będzie zatrudnić innego kandydata, który dobrze zna technologię, kiedy będziesz go potrzebować. Oczywiście, jeśli istnieje ku temu dobry powód, można wprowadzić nową technologię niszową, ale musi istnieć dobry powód, aby przeważyć takie ryzyko biznesowe.
Peteris,
Możesz uzyskać poprawę wydajności x $ za pomocą R, ale nic nie pomoże, jeśli będą musieli wydać 2x $ wysiłku na zmiany w swoim przepływie pracy. Dlaczego mieliby to zrobić, zwłaszcza gdyby mogli zatrudnić kogoś, kto nie mógłby ich kosztować 2x $ ?
user1908704,
14

Zasadniczo prawdą jest, że w przypadku czysto analiz danych i ćwiczeń statystycznych R oferuje najlepsze i najszybsze (szczególnie przy użyciu data.tablepakietu) narzędzia i metody, które w innym przypadku byłyby trudniejsze do wdrożenia w Pythonie (zakładam, że wszyscy mamy na myśli Pandy, chociaż ). Większość naukowców danych faktycznie używa R do wykonywania swoich modeli i obliczeń lub po prostu, aby zobaczyć, jak zachowują się dane.

Po zakończeniu ćwiczenia nadszedł czas, aby udostępnić je reszcie osób, które będą musiały z niego skorzystać (tj. Wdrożyć); w tym celu często zaleca się przesyłanie kodu w języku Python z dwóch głównych powodów:

  1. Większość architektur jest napisana w języku Python lub jest przyjazna dla języka Python, dlatego łatwiej byłoby zaimplementować modele napisane w tym języku.
  2. Składnia R i gramatyka są niezwykle skomplikowane. Ja sam zdecydowanie wolę R niż cokolwiek innego, ale muszę jednak przyznać, że składnia nie jest tak naprawdę prosta i ma bardzo dobraną krzywą uczenia się.

W związku z powyższym nadal prawdą jest, że można łatwo przetłumaczyć kod R na dowolny inny język, pod warunkiem, że dostępne są metody, biblioteki i pakiety (w Pythonie większość z nich jest, więc nie stanowi to żadnego problemu). Wiele infrastruktur i baz danych obsługuje podstawowy kod R, dlatego przenośność nie jest tak naprawdę problemem, zwłaszcza jeśli trzeba tylko przedstawić wyniki obliczeń (w tym zakresie nikt tak naprawdę nie widzi podstawowego kodu).

Java jest prawie bezużyteczna dla samej nauki o danych (chociaż Uniwersytet Stanforda posiada zbiór bibliotek NLP do uczenia maszynowego napisanych w Javie, o ile pamiętam - ale proszę sprawdzić). Jedynym powodem, dla którego może być wymagany, jest to, że reszta firmy używa go w dużym stopniu i nie chce go zastępować czymś nowym.

gented
źródło
Dziękujemy za podzielenie się swoją perspektywą i doświadczeniem !! To jest pomocne. Od ostatniego akapitu zakładam, że mówisz o scikit-learn? czy miałeś na myśli RPy? Możesz rozwinąć temat?
Entuzjasta
1
Mam na myśli, że cokolwiek robisz w R, najprawdopodobniej istnieje podobny pakiet Pythona, który wykonuje tę samą pracę. Pandy obejmują większość rzeczy, które data.tableoferuje; scikit-learn, jak wspomniałeś, jest kolejnym przykładem, ale w zależności od rozpatrywanej sprawy jest o wiele więcej.
gented
1
Dokładnie to, co robię. Po zakończeniu badań w języku R przetłumacz na język python, aby zintegrować go z bazą kodu. Ale @ Entuzjasta, czy możesz zrobić to samo w tej firmie, zależy od jej kultury. Większość ludzi używa języka programowania, którego używa ich szef. Python nie jest trudny do nauczenia się.
jf328,
1
@GennaroTedesco: „Chodzi mi po prostu o to, że cokolwiek robisz w R, najprawdopodobniej istnieje podobny pakiet Pythona, który wykonuje tę samą pracę”. Właściwie zdecydowanie nie zgadzam się z tym stwierdzeniem. Największą zaletą R jest to, że 90% statystyk publikuje swoje najnowsze i „największe” w R, a nie w Pythonie. Jeśli te metody się sprawdzą, mogą ostatecznie dotrzeć do Pythona. Ale to także plus dla Pythona; istnieje wiele pakietów statystyk R, które są po prostu śmieciami, podczas gdy myślę, że pakiety statystyk Pythona częściej są wypróbowanymi i prawdziwymi metodami.
Cliff AB
„Składnia R i gramatyka są niezwykle skomplikowane. Sam zdecydowanie wolę język R niż cokolwiek innego, ale muszę jednak przyznać, że składnia nie jest tak naprawdę prosta i ma bardzo dobraną krzywą uczenia się”. Oba wydają się być opiniami, ale jedno jest przebrane za obiektywne stwierdzenie, a drugie jest temu przeciwne. Jestem zaskoczony. Wydaje mi się również, że składnia i idiomy Pythona są bardziej skomplikowane (na przykład podkreślenie OOP), więc jestem podwójnie zdezorientowany tą odpowiedzią.
jasna gwiazda
7

Widziałem sporo firm korzystających z tytułu Data Scientist do ról typu „Data Engineer”. Szczególnie w przestrzeni dużych zbiorów danych.

Jeśli firma korzysta z Hadoop lub rozproszonego frameworka, takiego jak Spark, do analizy, Java, Python (lub prawdopodobnie Scala) byłyby językami, które byłyby najbardziej sensowne.

zielony pingwin
źródło
W tym przypadku wiem na pewno, że rola polegała na modelowaniu, ponieważ wymagała umiejętności uczenia maszynowego i określonej listy technik.
Entuzjasta,
Nadal mogliby to robić w tych technologiach, używając bibliotek Java / Python, co przypomina H20 lub MLlib.
Greenpenguin,
4

Jawa

Musiałbym się nie zgodzić z innymi plakatami na pytanie java. Istnieją pewne bazy danych noSQL (takie jak hadoop), które należy napisać w Mapva . Teraz możesz użyć programu HIVE, aby osiągnąć podobny wynik.

Pyton

Debata Python / R trwa. Oba są rozszerzalnymi językami, więc potencjalnie oba mogą mieć taką samą zdolność przetwarzania. Znam tylko R, a moja znajomość języka Python jest dość powierzchowna. Mówiąc jako właściciel małej firmy, nie chcesz mieć zbyt wielu narzędzi w swojej firmie, w przeciwnym razie wystąpi ogólny brak głębi i trudności z ich obsługą. Myślę, że sprowadzi się to do dogłębnej znajomości narzędzi w zespole. Jeśli zespół skupia się na pythonie, sensowne będzie zatrudnienie innego naukowca zajmującego się danymi w Pythonie, ponieważ może on zaangażować się w istniejącą bazę kodu i kod eksperymentu historycznego.

Marcus D.
źródło
2

Przynajmniej dla mojego obecnego zespołu (ok. 80 naukowców i inżynierów danych) nie mamy takiej preferencji. Połowa badaczy danych używa R, a druga połowa używa Pythona. Wielu może kodować oba. Wdrażamy kod Python i R.

Nie sądzę, aby którykolwiek z naszych naukowców korzystał z języka Java. Jeśli muszą poradzić sobie z dużymi zbiorami danych, mogą użyć SparkSQL lub PySpark. Zespół inżynierii danych używa mieszanki Java / Scala / Python / Go.

Jeśli jesteś jedną z niewielu osób zajmujących się danymi w małej firmie, rozumiem, dlaczego wymagają pewnych umiejętności językowych, abyś mógł wykonywać zarówno analizy danych, jak i inżynierię. Ale myślę, że większość małych firm nie ma danych wystarczająco dużych, aby Python lub R nie poradziły sobie z produkcją.

skarbonka
źródło
Czy możesz wyjaśnić, jaki rodzaj działalności prowadzi Twoja organizacja? I czy to praca w domu ML czy dla klientów zewnętrznych?
Entuzjasta
1
@Enthusiast Handel detaliczny. 100% na wewnętrzny ML.
skarbonka
0

Mój punkt widzenia jako programista ogólnego zastosowania z odrobiną doświadczenia w języku R: R jest doskonały do ​​nauki danych, ale jest skierowany do osób ręcznie interpretujących dane. Jeśli chcesz użyć wyników do czegoś zautomatyzowanego, musisz połączyć się z czymś innym, a tego innego trudno będzie zrobić w języku specyficznym dla problemu, takim jak R. Czy możesz zrobić stronę internetową w języku R? :) Z drugiej strony, Python ma gotowe biblioteki do nauki danych i jest językiem programowania ogólnego przeznaczenia, który nie przeszkadza w pracy z nim. Jeśli chodzi o Javę, nadaje się do dużych projektów programistycznych z setkami tysięcy do milionów wierszy kodu. Jeśli część nauki danych musi się z tym połączyć, sensowne może być zrobienie wszystkiego w Javie.

Losowe skomlenie: Dlaczego muszę logować się do każdej witryny StackExchange osobno?

Torp
źródło
4
Kod R można łatwo uruchomić za pomocą prawie wszystkich narzędzi dostępnych na rynku. Java jest prawie bezużyteczna dla nauki danych.
gented
1
@GennaroTedesco JAVA jest jednak przydatne do kodowania w narzędziach bigdata. Jest to częściowo przydatne do wyszukiwania danych.
Entuzjasta,
-1

Narzędzia w Pythonie są po prostu lepsze niż społeczność R. Ther R. jest w stagnacji, podczas gdy społeczność Pythona rozwija się bardzo szybko. Zwłaszcza w narzędziach do nauki danych.
Również Python działa znacznie łatwiej ze wszystkim wokół. Możesz łatwo zeskrobać sieć, połączyć się z bazami danych i tak dalej. Dzięki temu prototypowanie jest naprawdę szybkie.
A jeśli masz działający prototyp i zależy Ci na jego przyspieszeniu lub integracji z przepływem pracy w firmie, zwykle jest on ponownie wdrażany w Javie.

R ma kilka fajnych narzędzi i wizualizacji, ale nie jest tak wspaniale budować w nim nowe rzeczy.

sebastian
źródło
4
To jest całkowicie niewłaściwe pod każdym względem.
gented