Почему интернет-компании предпочитают Java / Python для работы с данными?

53

Я часто вижу в описании работы для специалиста по данным, спрашивающего опыт работы с Python / Java, и не обращаю внимания на R. Ниже приведено личное письмо, которое я получил от главного специалиста по данным компании, в которую я обратился через linkedin.

X, спасибо за подключение и проявление интереса. У вас есть хорошие навыки аналитики. Тем не менее, все наши специалисты по данным должны обладать хорошими навыками программирования на Java / Python, так как мы являемся интернет / мобильной организацией, и все, что мы делаем, - это онлайн.

Хотя я уважаю решение главного исследователя данных, я не могу получить четкое представление о том, какие задачи может выполнять Python, а R - нет. Кто-нибудь может разработать? Я действительно заинтересован в изучении Python / Java, если получу немного больше подробностей.

Изменить: я нашел интересную дискуссию по Quora. Почему Python является языком выбора для ученых данных?

Edit2: блог от Udacity по языкам и библиотекам для машинного обучения

энтузиаст
источник
8
Python является хорошим компромиссом: он предоставляет множество (нестандартных) библиотек для обработки данных (pandas, scikit, ...), и многие промышленные процессы уже написаны на python.
Ману Х
4
«Наши специалисты в области данных должны обладать хорошими навыками программирования на Java / Python, так как мы являемся интернет- / мобильной организацией, и все, что мы делаем, это онлайн», - это серьезный несвязный вопрос - вывод не следует из предпосылки. Я подозреваю, что CDS просто пытается избавиться от вас.
Spacedman
5
@ManuH Если под «нестандартным» вы подразумеваете «не в стандартной библиотеке», вы правы. Но эти инструменты широко используются, и они, безусловно, являются основными языками. Numpy в настоящее время имеет более 100 000 вопросов по SO, у Pandas - 74 000. Я думаю, вы наверняка могли бы доказать, что это отраслевые стандарты . (По крайней мере, в области разработки программного обеспечения. Я бы вряд ли назвал себя «ученым данных».)
jpmc26
2
«Data Scientist» не является четко определенным термином. Data Scientist - это тот, кто может делать полезные вещи с данными. Они не должны использовать машинное обучение или статистические пакеты. Кто-то может использовать Java / Scala / Spark / что угодно для управления большими объемами данных и получения полезных знаний без какого-либо машинного обучения.
Akavall
2
@ jpmc26 Да, это я и имел ввиду. Теперь я понимаю, что можно упомянуть даже библиотеки, которые еще не достигли отраслевых стандартов (еще один аргумент для python)
Manu H

Ответы:

67

Таким образом, вы можете интегрировать с остальной частью кода базы. Кажется, ваша компания использует смесь Java и Python. Что вы будете делать, если маленький уголок сайта нуждается в машинном обучении; передать данные с помощью базы данных или кэша, перейти к R и т. д.? Почему бы просто не сделать все это на одном языке? Это быстрее, чище и проще в обслуживании.

Знаете какие-нибудь онлайн-компании, которые работают исключительно на R? И я нет...

Все, что говорит, что Java - последний язык, на котором я делаю науку о данных.

Эмре
источник
1
Я собирался сказать, что сервис-ориентированная архитектура также помогает соединять технологии. PMML немного предприимчивый; Я не использовал его, но у вас есть магазин Java, материнские языки предприятия, так что вы никогда не знаете ...
Эмре
3
@Enthusiast не забывайте, что вы можете запустить R под python, используя RPy2 (например), так что вы можете (как я делал в предыдущем задании) запустить модели, написанные на R через python, чтобы они могли быть представлены через веб-интерфейс через джанго.
MD-Tech
2
Мы построили модель в виде простых текстовых файлов .r, которые были загружены в интерпретатор R для тестирования (и для облегчения построения). Пока он создавался и тестировался, мы создали проект Python django с разделом, который ссылается на RPy2 и создает объекты RPy2. Эти объекты затем использовались для загрузки файлов R так же, как вы загружали их в интерпретатор, чтобы мы могли получить доступ к функциям, которые обернули модель. Затем мы можем передать данные из базы данных в R через Python. Слой python предоставил нам веб-интерфейс с django и контролем над базой данных и т. Д.
MD-Tech
1
@Enthusiast Результаты модели были возвращены R в RPy2 и представлены во внешнем интерфейсе в различных формах, в основном в виде графиков.
MD-Tech
2
@Enthusiast Это была байесовская сеть для финансов, но я не могу сказать больше, чем это. Модель была написана на прямой R. Просто текст; Я редактировал его в Vim всякий раз, когда мне было нужно, и он был «развернут» путем загрузки кода R в виде текста в RPy2 с использованием source («our_code.r») на объектах RPy2. Это было сделано так, чтобы мы могли редактировать модель в реальном времени. Это не ответ на этот вопрос; это ответ на вопрос, который не был задан;)
MD-Tech
24

Там может быть много причин, таких как:

  1. Гибкость рабочей силы: программисты на Java / Python могут быть легко перемещены к другим задачам или проектам.

  2. Доступность кандидатов: есть много программистов на Java / Python. Вы не хотите вводить новый язык программирования, чтобы потом выяснить, что нет квалифицированных рабочих или они просто слишком дороги.

  3. Интеграция и ETL. Иногда получение данных с надлежащим качеством является самой сложной частью проекта. Поэтому естественно использовать тот же язык, что и остальные системы.

  4. Определение бизнес-модели: большинство бизнес-правил и бизнес-моделей уже написаны на этих языках.

  5. Просто все упростить. Уже достаточно сложно быть в курсе технологий. Разнообразная база языка может быть хаотичной. R для этого, Ruby для этого, Scala, Clojure, F #, Swift, Dart ... Им могут понадобиться разные серверы, разные пути, ад для администрирования. У всех есть свои IDE с инструментами и плагинами (не всегда бесплатно). Посмотрите некоторые замечания дяди Боба о выборе языков и новых технологиях

Поэтому, даже если у вас есть преимущество в производительности на 5–15% при использовании R для конкретной задачи, они могут предпочесть инструмент, который просто выполняет свою работу, даже если не самым эффективным способом.

borjab
источник
Хотя это правда, ни один из вышеперечисленных на самом деле не отвечает на вопрос. Получение данных сокращает в 99% случаев запросы к базе данных или чтение .csvфайлов, и для этой цели R является фактически наиболее подходящим инструментом на рынке. Доступность кандидатов: то, что Java-программистов больше, чем R-программистов, не означает, что вы должны отказаться от R-кандидата, если он у вас есть. На самом деле не имеет значения, как ученый выполняет свои упражнения, если они развертывают читаемый код, который может запускаться некоторыми серверами (или любой другой вещью, которую выполняет компания).
gented
Конечно, вы не должны отказываться от кандидата. Человек намного важнее инструмента. Их команда может изучать R, а кандидат может изучать Java / Python. Но это займет время, что означает деньги.
Борхаб
В чем я не согласен, так это в том, что это не против языка. Когда у единственного члена команды, который знает R, нет выходных, и им нужно внести изменения, босс не будет счастлив. Или просто спросите команду: «О, здорово, нам нужно выучить новый язык только потому, что новый так делает». Может быть, администрирование сервера - это другой отдел, а новым типам серверов требуется новый анализ, процедуры и т. Д. Может быть, вам нужен зеленый свет от информационной безопасности, чтобы использовать новый язык.
Борхаб
@ GennaroTedesco код, написанный кандидатом, должен обслуживаться другими программистами при совместной работе, а также в будущем, когда первоначальный автор будет двигаться дальше. Недостаточно иметь кандидата, который хорошо знает технологию, но все равно важно подумать, насколько легко будет нанять другого кандидата, который хорошо знает технологию, когда он вам понадобится. Конечно, если есть веская причина, можно внедрить новую нишевую технологию, но должна быть веская причина, чтобы перевесить такие бизнес-риски.
Петерис
При использовании R вы можете повысить производительность на $ x, но это не поможет, если им придется потратить $ 2x на изменение своего рабочего процесса. Зачем им это делать, особенно если они могут нанять кого-то другого, кто может не обойтись им в 2 раза?
user1908704
14

В целом верно, что для чисто научных данных и статистических упражнений R предлагает лучшие и самые быстрые (особенно при использовании data.tableпакета) инструменты и методы, которые в противном случае было бы тяжелее реализовать в Python (я предполагаю, что под Python мы все имеем в виду Pandas, хотя ). Большинство исследователей данных действительно используют R для выполнения своих моделей и расчетов или просто для того, чтобы посмотреть, как ведут себя данные.

Как только упражнение завершено, настало время сделать его доступным для остальных людей, которые должны его использовать (т.е. развернуть); для этой цели часто предпочтительнее представить код на Python по двум основным причинам:

  1. Большинство архитектур написаны на Python или дружественны к Python, поэтому было бы проще реализовать модели, изначально написанные на этом языке.
  2. Синтаксис и грамматика R чрезвычайно сложны. Я сам сильно предпочитаю R, а не все остальное, но должен признать, что синтаксис не очень прост и имеет очень выбранную кривую обучения.

Выше сказанное, все еще верно, что можно легко перевести R-код на любой другой язык, при условии, что методы, библиотеки и пакеты доступны (в Python большинство из них есть, так что это не проблема). Множество инфраструктур и баз данных поддерживают лежащий в основе R-код, поэтому переносимость на самом деле не является проблемой, особенно если нужно просто представить результаты вычислений (в этом смысле никто не видит базовый код в любом случае).

Ява практически не пригодна для самой науки о чистых данных (хотя, насколько я помню, в Стэнфордском университете есть коллекция библиотек NLP машинного обучения, написанных на Java, но, пожалуйста, проверьте). Единственная причина, по которой это может потребоваться, заключается в том, что остальная часть компании использует его в больших масштабах, и они не хотят заменять его чем-то новым.

gented
источник
Спасибо, что поделились своей точкой зрения и опытом! Это полезно Из вашего второго последнего абзаца, я полагаю, вы говорите о scikit-learn? или ты имел ввиду RPy? Хотите разработать?
Энтузиаст
1
Я просто имею в виду, что что бы вы ни делали в R, скорее всего, есть аналогичный пакет Python, который выполняет ту же работу. Панды покрывают большинство вещей, которые data.tableпредлагает; scikit-learn, как вы упомянули, является еще одним примером, но в зависимости от конкретного случая есть еще много.
gented
1
Именно то, что я делаю. Исследования в R, как только это будет завершено, переведут на python для интеграции в кодовую базу. Но @Enthusiast, можете ли вы сделать то же самое в этой компании, зависит от ее культуры. Большинство людей используют язык программирования, который использует их босс. И Python не сложно выучить.
jf328
1
@GennaroTedesco: «Я просто имею в виду, что, что бы вы ни делали в R, скорее всего, есть подобный пакет Python, который выполняет ту же работу». Я на самом деле категорически не согласен с этим утверждением. Наибольшим преимуществом R является то, что 90% статистиков публикуют свои последние и "самые лучшие" версии R, а не Python. Если эти методы завоевывают популярность, они могут в конечном итоге добраться до Python. Но это также плюс для Python; Есть много пакетов R stats, которые являются просто мусором, в то время как я думаю, что пакеты Python stats, скорее всего, будут проверенными и верными методами.
Клифф А.Б.
«Синтаксис и грамматика R чрезвычайно сложны. Я сам сильно предпочитаю R, а не все остальное, но, тем не менее, должен признать, что синтаксис не очень прост и имеет очень выбранную кривую обучения» Оба из них, кажется, являются мнениями, но один одет как объективное утверждение, а другой выступает против него. Я сбит с толку. Я также чувствую, что синтаксис и идиомы Python более сложны (например, ООП-акцент), поэтому этот ответ меня смущает вдвойне.
яркая звезда
7

Я видел довольно много компаний, использующих название Data Scientist для ролей типа «Инженер данных». Особенно в большом пространстве данных.

Если компания использует Hadoop или распределенную инфраструктуру, такую ​​как Spark, для анализа в Java, то Python (или, возможно, Scala) будет наиболее подходящим языком.

greenpenguin
источник
В этом случае я точно знаю, что эта роль была для моделирования, так как она требовала навыков машинного обучения и определенного перечня методов.
Энтузиаст
Они все еще могут делать это внутри этих технологий, хотя используют библиотеки Java / Python, что-то вроде H20 или MLlib.
greenpenguin
4

Ява

Я бы не согласился с другими постерами по вопросу о Java. Существуют определенные базы данных noSQL (например, hadoop), которые нужны для написания заданий mapreduce в Java . Теперь вы можете использовать HIVE для достижения практически того же результата.

питон

Обсуждение Python / R продолжается. Оба являются расширяемыми языками, поэтому потенциально оба могут иметь одинаковую способность к обработке. Я знаю только R, и мои знания Python довольно поверхностны. Говоря как владелец малого бизнеса, вы хотите, чтобы в вашем бизнесе не было слишком много инструментов, в противном случае у них будет общая нехватка глубины и трудности с их поддержкой. Я думаю, что это доходит до глубины инструментальных знаний в команде. Если команда сконцентрирована на python, то имеет смысл нанять другого ученого, изучающего данные на python, так как он может взаимодействовать с существующей кодовой базой и историческим экспериментальным кодом.

Маркус Д
источник
2

По крайней мере, для моей нынешней команды (~ 80 ученых и инженеров) у нас нет таких предпочтений. Половина исследователей данных использует R, а другая половина - Python. Многие могут кодировать в обоих. Мы внедряем код Python и R в производство.

Я не думаю, что кто-либо из наших исследователей данных использует Java вообще. Если им нужно работать с большими данными, они могут использовать SparkSQL или PySpark. Команда разработчиков данных использует смесь Java / Scala / Python / Go.

Если вы один из немногих специалистов в области данных в небольшой компании, я могу понять, почему им требуются определенные языковые навыки, чтобы вы могли заниматься как наукой о данных, так и проектированием. Но я думаю, что у большинства небольших компаний не будет достаточно больших данных, которые Python или R не смогут обработать в процессе производства.

piggybox
источник
Можете ли вы рассказать о том, чем занимается ваша организация? И это на домашнем ML работа или для внешних клиентов?
Энтузиаст
1
@Enthusiast Розничный бизнес. 100% для внутреннего ML.
piggybox
0

Моя точка зрения программиста общего назначения с небольшим опытом работы с R: R отлично подходит для науки о данных, но он ориентирован на людей, которые интерпретируют данные вручную. Если вы хотите использовать результаты для чего-то автоматизированного, вам нужно взаимодействовать с чем-то другим, и что-то еще будет трудно сделать на языке, специфичном для проблемы, например R. Можете ли вы создать веб-сайт на R? :) С другой стороны, Python имеет готовые библиотеки для обработки данных и является языком программирования общего назначения, который не мешает вам делать с ним что-то еще. Что касается Java, то это хорошо для больших программных проектов с сотнями тысяч до миллионов строк кода. Если часть науки о данных должна взаимодействовать с этим, тогда может иметь смысл сделать все на Java.

Случайное нытье: Почему я должен входить на каждый сайт StackExchange отдельно?

Торп
источник
4
R-код может быть легко запущен практически всеми инструментами, доступными на рынке. Java почти бесполезна для науки о данных.
gented
1
@GennaroTedesco JAVA полезен для кодирования в инструментах больших данных. Так что частично полезно для запроса данных.
Энтузиаст
-1

Инструменты в Python лучше, чем в R. Сообщество R довольно застойное, а сообщество Python развивается очень быстро. Особенно в инструментах для Data Science.
Также Python работает намного проще со всем вокруг. Вы можете легко поковыряться в сети, подключаться к базам данных и так далее. Это делает прототипирование действительно быстрым.
И если у вас есть работающий прототип и вы хотите ускорить его или интегрировать в рабочий процесс компании, он обычно реализуется в Java.

У R есть несколько аккуратных инструментов и визуализаций, но это не так здорово, чтобы создавать новые вещи в нем.

Себастьян
источник
4
Это совершенно неправильно во всех отношениях.
gented