Pourquoi les entreprises Internet préfèrent-elles Java / Python pour le travail de data scientist?

53

Je vois plusieurs fois dans la description de poste d'un informaticien demandant une expérience Python / Java et ne tenant aucun compte de R. Ci-dessous, un courrier électronique personnel que j'ai reçu du responsable informatique d'une entreprise pour laquelle j'avais postulé via linkedin.

X, merci de vous connecter et d'exprimer votre intérêt. Vous avez de bonnes compétences en analytique. Cependant, tous nos scientifiques de données doivent avoir de bonnes compétences en programmation en Java / Python, car nous sommes une organisation Internet / mobile et tout ce que nous faisons est en ligne.

Bien que je respecte la décision du scientifique en chef des données, je ne parviens pas à avoir une idée précise des tâches que Python peut effectuer que R ne peut pas effectuer. Quelqu'un peut-il se soucier d'élaborer? En fait, je suis désireux d'apprendre Python / Java, à condition d'obtenir un peu plus de détails.

Edit: J'ai trouvé une discussion intéressante sur Quora. Pourquoi Python est-il un langage de choix pour les scientifiques de données?

Edit2: Blog d'Udacity sur les langues et les bibliothèques pour l'apprentissage automatique

Passionné
la source
8
Python est un bon compromis: il fournit de nombreuses bibliothèques (non standard) pour datascience (pandas, scikit, ...) et de nombreux processus industriels sont déjà codés en python.
Manu H
4
"nos informaticiens doivent avoir de bonnes compétences en programmation en Java / Python, car nous sommes une organisation Internet / mobile et tout ce que nous faisons est en ligne" est une énorme non-séquence - la conclusion ne découle pas de la prémisse. Je soupçonne que le CDS essaye juste de se débarrasser de vous.
Spacedman
5
@ManuH Si par "non standard", vous voulez dire "pas dans la bibliothèque standard", vous avez raison. Mais ces outils sont très répandus et constituent certainement un élément essentiel du langage. numpy a actuellement plus de 100k questions sur SO, pandas a 74k. Je pense que vous pourriez certainement faire valoir qu’il s’agit de normes de l’industrie . (Du moins du point de vue du développement logiciel. Je me qualifierais à peine de "scientifique de données".)
jpmc26
2
"Data Scientist" n'est pas un terme bien défini. Data Scientist est fondamentalement quelqu'un qui peut faire des choses utiles avec des données. Ils ne doivent pas nécessairement utiliser des logiciels d'apprentissage automatique ou de statistiques. Quelqu'un pourrait utiliser Java / Scala / Spark / que ce soit pour gérer de grandes quantités de données et obtenir des informations utiles sans apprentissage automatique.
Akavall
2
@ jpmc26 Oui, c'était ce que je voulais dire. Maintenant, je me rends compte que même les bibliothèques qui n'ont pas encore atteint les normes de l'industrie pourraient être mentionnées (un argument supplémentaire pour le python)
Manu H

Réponses:

67

Vous pouvez donc vous intégrer au reste de la base de code. Il semble que votre entreprise utilise un mélange de Java et de python. Qu'allez-vous faire si un petit coin du site nécessite un apprentissage automatique? transmettre les données avec une base de données ou un cache, passer à R, etc.? Pourquoi ne pas tout faire dans la même langue? C'est plus rapide, plus propre et plus facile à entretenir.

Connaissez-vous des entreprises en ligne qui fonctionnent uniquement sur R? Moi non plus...

Tout cela étant dit, Java est le dernier langage dans lequel je ferais de la science des données.

Emre
la source
1
J'étais sur le point de dire qu'une architecture orientée services contribue également à relier les technologies. PMML est un peu d'entreprise. Je ne l'ai pas utilisé, mais le vôtre est un magasin Java, la langue de l'entreprise mère, de sorte que vous ne savez jamais ...
Emre
3
@Enthusiast n'oubliez pas que vous pouvez exécuter R sous Python en utilisant RPy2 (par exemple) pour pouvoir vous retrouver (comme je l'ai déjà fait dans un travail précédent) en exécutant des modèles écrits de R à python afin qu'ils puissent être présentés via une interface Web. via Django.
MD-Tech
2
Nous avons construit le modèle sous forme de fichiers .r en texte brut chargés dans l’interpréteur R à des fins de test (et de création plus facile). Pendant que cela était en cours de construction et de test, nous avons construit un projet django en python avec une section référençant RPy2 et créant des objets RPy2. Ces objets ont ensuite été utilisés pour charger les fichiers R de la même manière que dans l’interpréteur afin que nous puissions accéder aux fonctions qui encapsulaient le modèle. Nous pourrions ensuite transmettre les données de la base de données à R via python. La couche Python nous a fourni l'interface Web avec Django et le contrôle de la base de données, etc.
MD-Tech
1
@Enthusiast Les résultats du modèle ont été renvoyés par le R dans RPy2 et présentés au début sous différentes formes, principalement des graphiques.
MD-Tech
2
@Enthusiast C'était un réseau bayésien pour la finance mais je ne peux pas en dire plus. Le modèle a été écrit directement en R. Simplement en clair; Je l'ai édité dans Vim chaque fois que j'en avais besoin, et il a été "déployé" en chargeant le code R sous forme de texte dans RPy2 à l'aide de la source ("notre_code.r") sur les objets RPy2. Cela a été fait de cette façon afin que nous puissions éditer le modèle en direct. Ce n'est pas une réponse à cette question; sa une réponse à une qui n'a pas été demandé;)
MD-Tech
24

Il peut y avoir beaucoup de raisons comme:

  1. Souplesse de la main-d'œuvre: un programmeur Java / Python peut facilement être déplacé vers d'autres tâches ou projets.

  2. Disponibilité des candidats: il existe de nombreux programmeurs Java / Python. Vous ne voulez pas introduire un nouveau langage de programmation pour découvrir plus tard qu’il n’ya pas de personnel qualifié ou qu’il coûte trop cher.

  3. Intégration et ETL: Parfois, obtenir les données avec la bonne qualité est la partie la plus difficile du projet. Il est donc naturel d’utiliser le même langage que le reste des systèmes.

  4. Définition du modèle d'entreprise: la plupart des règles et des modèles d'entreprise sont déjà écrits dans ce langage.

  5. Garder les choses simples. Il est déjà assez difficile d’être à la pointe de la technologie. Une base linguistique diversifiée peut être chaotique. R pour cela, Ruby pour cela, Scala, Clojure, Fa #, Swift, Dart ... Ils peuvent avoir besoin de serveurs différents, de chemins différents, d’un enfer à administrer. Tous ont leurs propres IDE avec des outils et des plugins (pas toujours gratuits). Voir quelques remarques de Oncle Bob sur le choix des langues et les nouvelles technologies

Ainsi, même si vous avez un avantage de productivité de 5% à 15% en utilisant R pour une tâche spécifique, ils peuvent préférer un outil qui fait juste le travail, même si ce n’est pas de la manière la plus efficace.

borjab
la source
Bien que vrai, rien de ce qui précède ne répond réellement à la question. Obtenir les données réduit 99% du temps à interroger une base de données ou à lire des .csvfichiers, objectif pour lequel R est en fait le meilleur outil sur le marché. Disponibilité des candidats: le fait qu'il y ait plus de programmeurs Java que de programmeurs R n'implique pas que vous deviez écarter un candidat R si vous en avez un. Peu importe la manière dont le scientifique effectue ses exercices, dans la mesure où il déploie un code lisible pouvant être exécuté par certains serveurs (ou tout autre élément exploité par la société).
Gented
Bien sûr, vous ne devriez pas écarter le candidat. La personne est beaucoup plus importante que l'outil. Leur équipe peut apprendre R et le candidat peut apprendre Java / Python. Mais cela prendra du temps, ce qui signifie en argent.
borjab
Le point que je ne partage certainement pas, c'est que le langage ne le dérange pas. Lorsque le seul membre de l'équipe qui sait que R n'est pas en vacances et qu'il doit faire des changements, le patron ne sera pas heureux. Ou demandez simplement à l'équipe "Oh, génial, nous devons apprendre une nouvelle langue simplement parce que la nouvelle langue fait les choses de cette manière". L’administration des serveurs est peut-être un autre service et les nouveaux types de serveurs nécessitent de nouvelles analyses, procédures, etc. Peut-être avez-vous besoin du feu vert de la sécurité informatique pour utiliser une nouvelle langue.
borjab
@GennaroTedesco le code écrit par le candidat doit pouvoir être mis à jour par d' autres programmeurs, tout en travaillant ensemble et également dans l'avenir, lorsque l'auteur original passera à autre chose. Il n’est pas suffisant d’avoir un candidat qui connaît bien une technologie, il est tout aussi important de se demander s’il sera facile d’engager un autre candidat qui connaît bien la technologie lorsque vous en aurez besoin. Bien sûr, une nouvelle technologie de niche peut être introduite s’il ya une bonne raison, mais il doit exister une bonne raison de compenser de tels risques commerciaux.
Peteris
Vous pourriez avoir un x $ amélioration de la productivité en utilisant R, mais il est d' aucune aide si elles doivent dépenser $ 2x l' effort des changements dans leur flux de travail. Pourquoi feraient-ils cela, surtout s'ils pouvaient embaucher quelqu'un d'autre qui ne leur coûterait peut-être pas 2 fois?
user1908704
14

Il est généralement vrai que pour les exercices de science et de statistique purement données, R offre les data.tableoutils et les méthodes les meilleurs et les plus rapides (surtout si vous utilisez le paquet), qui seraient autrement plus lourds à implémenter en Python (je suppose que par Python, nous entendons tous par ). La plupart des scientifiques utilisent en fait R pour effectuer leurs modèles et leurs calculs, ou simplement pour voir le comportement des données.

Une fois l'exercice terminé, il est temps de le mettre à la disposition des autres personnes qui doivent l'utiliser (c'est-à-dire le déployer). à cette fin, il est souvent préférable de soumettre le code en Python pour deux raisons principales:

  1. La plupart des architectures sont écrites en Python ou sont compatibles avec Python. Il serait donc plus facile de mettre en œuvre des modèles écrits de manière native dans ce langage.
  2. La syntaxe et la grammaire R sont extrêmement compliquées. Je suis moi-même fortement en faveur de R, mais je dois toutefois admettre que la syntaxe n'est pas vraiment simple et que la courbe d'apprentissage est très bien choisie.

Cela dit, il est toujours vrai que l'on peut facilement traduire le code R dans un autre langage, à condition que des méthodes, des bibliothèques et des packages soient disponibles (la plupart d'entre eux le sont en Python, ce qui ne pose aucun problème). De nombreuses infrastructures et bases de données supportant le code R sous-jacent, la portabilité n’est donc pas un problème, surtout si l’on doit simplement soumettre les résultats des calculs (dans ce cas, personne ne voit vraiment le code sous-jacent).

Java n’est pratiquement pas utile à la science des données proprement dite (bien que l’Université de Stanford ait une collection de bibliothèques de PNL d’apprentissage automatique écrites en Java, pour autant que je me souvienne - mais veuillez vérifier). La seule raison pour laquelle cela peut être requis est simplement que le reste de la société l’utilise à grande échelle et qu’elle ne veut pas le remplacer par quelque chose de nouveau.

gentil
la source
Merci de partager votre point de vue et votre expérience! C'est utile. De votre avant dernier paragraphe, je suppose que vous parlez de scikit-learn? ou vouliez-vous dire RPy? Vous souhaitez élaborer?
Enthusiast
1
Je veux simplement dire que quoi que vous fassiez dans R, il y a probablement un paquet Python similaire qui fait le même travail. Les pandas couvrent la plupart des choses data.tablequ’offre; Comme vous l'avez dit, scikit-learn en est un autre exemple, mais il en existe beaucoup d'autres, selon le cas.
Gented
1
Exactement ce que je fais. La recherche en R, une fois que cela est terminé, se traduit en python pour s'intégrer dans la base de code. Mais @Enthusiast, que vous puissiez faire la même chose dans cette entreprise dépend de sa culture. La plupart des gens utilisent le langage de programmation utilisé par leur patron. Et Python n'est pas difficile à apprendre.
jf328
1
@GennaroTedesco: "Je veux simplement dire que quoi que vous fassiez dans R, il y a très probablement un paquet Python similaire qui fait le même travail". Je suis en fait fortement en désaccord avec cette déclaration. Le plus gros avantage avec R est que 90% des statisticiens publient leur dernier et "meilleur" en R, plutôt que Python. Si ces méthodes font leur chemin, elles pourraient éventuellement se rendre en Python. Mais c'est aussi un avantage pour Python; il y a beaucoup de packages de statistiques R qui ne sont que des ordures, alors que je pense que les packages de statistiques Python sont plus susceptibles d'être les méthodes éprouvées et vraies.
Cliff AB
"La syntaxe et la grammaire de R sont extrêmement compliquées. Je suis moi-même fortement en faveur de R, mais je dois toutefois admettre que la syntaxe n'est pas vraiment simple et que sa courbe d'apprentissage est très bien choisie." Les deux semblent être des opinions, mais l'une est habillée comme une déclaration objective et l'autre s'y oppose. Je suis dérouté. Je pense aussi que la syntaxe et les idiomes de Python sont plus compliqués (accentuation de la POO, par exemple), je suis donc doublement dérouté par cette réponse.
étoile brillante
7

J'ai vu pas mal d'entreprises utiliser le titre Data Scientist pour des rôles de type "Data Engineer". Particulièrement dans le grand espace de données.

Si la société utilise Hadoop ou un framework distribué tel que Spark pour effectuer ses analyses, Java ou Python (ou probablement Scala) sont les langages les plus utiles.

greenpenguin
la source
Dans ce cas, je sais avec certitude que son rôle était de modéliser car il demandait des compétences en apprentissage automatique et une liste de techniques spécifiée.
Enthusiast
Ils pourraient toujours le faire à l’intérieur de ces technologies, bien que l’utilisation de bibliothèques Java / Python, qui me viennent à l’esprit, comme H20 ou MLlib.
greenpenguin
4

Java

Je ne suis pas d'accord avec les autres affiches sur la question Java. Il y a certaines bases de données noSQL (comme hadoop) dont on a besoin pour écrire des tâches mapreduce en java . Vous pouvez maintenant utiliser HIVE pour obtenir à peu près le même résultat.

Python

Le débat python / R continue. Les deux sont des langages extensibles, ils pourraient donc potentiellement avoir la même capacité de traitement. Je ne connais que R et ma connaissance du python est assez superficielle. En tant que propriétaire de petite entreprise, vous voulez ne pas avoir trop d’outils dans votre entreprise, sans quoi il y aura un manque général de profondeur et de difficulté à les prendre en charge. Je pense que cela va aller à la profondeur de la connaissance de l'outil dans l'équipe. Si l'équipe se concentre sur le langage python, il est logique de faire appel à un autre expert en données python, car elle peut utiliser la base de code existante et le code d'expérimentation historique.

Marcus D
la source
2

Au moins pour mon équipe actuelle (~ 80 scientifiques et ingénieurs en informatique), nous n’avons pas cette préférence. Ici, la moitié des scientifiques utilisent R et une autre moitié, Python. Beaucoup peuvent coder dans les deux. Nous déployons le code Python et R en production.

Je ne pense pas que nos scientifiques de données utilisent Java du tout. S'ils ont besoin de gérer des données volumineuses, ils peuvent utiliser SparkSQL ou PySpark. L'équipe d'ingénierie de données utilise un mélange de Java / Scala / Python / Go.

Si vous faites partie des rares personnes travaillant dans les données dans une petite entreprise, je peux comprendre pourquoi elles ont besoin de certaines compétences linguistiques pour pouvoir utiliser à la fois la science des données et l'ingénierie. Mais tbh, je pense que la plupart des petites entreprises n’auront pas assez de données que Python ou R ne peuvent pas gérer en production.

tirelire
la source
Pouvez-vous préciser le type d'entreprise de votre organisation? Et est-ce le travail en interne ML ou pour des clients externes?
Enthusiast
1
@Enthusiast Commerce de détail. 100% pour ML interne.
Tirelire
0

Mon point de vue en tant que programmeur polyvalent avec une petite expérience de R: R est excellent pour la science des données, mais il est destiné aux personnes qui interprètent manuellement les données. Si vous souhaitez utiliser les résultats pour quelque chose d'automatisé, vous devez vous connecter à autre chose, et ce sera difficile à faire dans un langage spécifique à un problème comme R. Pouvez-vous créer un site Web en R? :) D'autre part, python a des bibliothèques prêtes à l'emploi pour les tâches d'analyse de données et constitue un langage de programmation généraliste qui ne vous empêche pas de faire autre chose avec. Quant à Java, il convient aux grands projets de programmation comportant des centaines de milliers à des millions de lignes de code. Si la partie science des données doit s’interfacer avec cela, il est alors logique de tout faire en Java.

Whine aléatoire: Pourquoi dois-je me connecter à chaque site StackExchange séparément?

Torp
la source
4
Le code R peut être facilement géré par presque tous les outils disponibles sur le marché. Java est presque inutile pour la science des données.
Gented
1
@GennaroTedesco JAVA est utile pour le codage dans les outils bigdata. Donc en partie utile pour interroger des données.
Enthusiast
-1

Les outils en Python sont simplement meilleurs que ceux de R. Ther R: la communauté est plutôt stagnante alors que la communauté Python évolue très rapidement. Surtout dans les outils pour la science des données.
Python fonctionne également beaucoup plus facilement avec tout ce qui l’entoure. Vous pouvez facilement parcourir le Web, vous connecter à des bases de données, etc. Cela rend le prototypage très rapide.
Et si vous avez un prototype fonctionnel et que vous vous efforcez de le rendre plus rapide ou de l'intégrer au flux de travail de l'entreprise, il est généralement réimplémenté en Java.

R a quelques outils et une visualisation soignés, mais ce n’est pas génial de construire de nouvelles choses.

Sébastien
la source
4
C'est complètement faux en tout point.
Gented