Julia a-t-elle un espoir de rester dans la communauté statistique?

161

J'ai récemment lu un article de R-Bloggers, qui est lié à ce billet de John Myles White sur un nouveau langage appelé Julia . Julia profite d'un compilateur juste à temps qui lui donne des temps d'exécution rapides et le met dans le même ordre de grandeur que C / C ++ (le même ordre , pas aussi rapide). En outre, il utilise les mécanismes de boucle orthodoxes que connaissent ceux d'entre nous qui ont commencé à programmer sur des langages traditionnels, au lieu des instructions apply de R et des opérations vectorielles.

R ne s'en va pas du tout, même avec des timings aussi impressionnants de Julia. Il bénéficie d'un support étendu dans l'industrie et de nombreux packages fantastiques pour faire à peu près n'importe quoi.

Mes intérêts sont de nature bayésienne, où la vectorisation est souvent impossible. Certes, les tâches en série doivent être effectuées à l'aide de boucles et impliquent des calculs lourds à chaque itération. R peut être très lent lors de ces tâches de bouclage série, et C / ++ n’est pas une promenade dans le parc à écrire. Julia semble être une excellente alternative à l’écriture en C / ++, mais elle en est à ses balbutiements et elle manque de beaucoup de fonctionnalités que j’aime de R. Il n’a de sens que d’apprendre Julia en tant qu’atelier de statistiques informatiques s’il reçoit suffisamment de soutien. de la communauté des statistiques et les gens commencent à écrire des paquets utiles pour cela.

Mes questions suivent:

  1. Quelles caractéristiques doit avoir Julia pour avoir l’attrait qui a fait de R le langage de facto des statistiques?

  2. Quels sont les avantages et les inconvénients d’apprendre à Julia à effectuer des tâches lourdes en calcul, par rapport à l’apprentissage d’un langage de bas niveau comme C / ++?

Christopher Aden
la source
7
En quoi Julia est-elle supérieure à Incanter ( incanter.org ) et à d'autres projets similaires?
Wayne
24
Re constructions procédurales (par exemple en boucle): cela ressemble à un pas de géant en arrière. Nous sommes sur le point de passer de plates-formes à processeur unique ou petit à plates-formes massivement parallèles. Comme cette évolution se produira au cours de la prochaine décennie environ, le style de codage fonctionnel, facilement et automatiquement parallélisable, apportera d’énormes avantages par rapport au code procédural. Bien entendu, de nombreuses autres considérations interviennent dans le choix d'une plate-forme statistique, mais celle-ci mérite d'être considérée comme une stratégie à long terme.
whuber
12
Christopher, une bonne approche consiste à formuler les questions de manière à solliciter des raisons et des preuves. Par exemple, au lieu de "Julia a-t-elle le charme nécessaire ...", essayez quelque chose du type "Quels éléments de Julia pourraient lui donner une chance de gagner du terrain et pourquoi"; au lieu de "Cela vaut-il la peine d'apprendre", demandez-vous "Pourquoi Julia pourrait-elle valoir la peine d'apprendre maintenant? Quels sont ses avantages potentiels?" Vous pouvez préciser davantage la question en précisant les types d'utilisations de Julia qui pourraient vous intéresser, telles que le développement de logiciels, la résolution de problèmes ponctuels, la biostatistique, l'exploration de données, etc.
whuber
1
@Whuber: J'apprécie les suggestions et les ai mises en œuvre. Je vous remercie!
Christopher Aden
2
@ trolle3000 Je ne pense pas que quiconque prétende que la parallélisation est si automatique. Toutefois, lorsque vous avez écrit une version fonctionnelle d'un programme, vous avez déjà déployé beaucoup d'efforts pour le paralléliser. C'est pourquoi des applications telles que Mathematica peuvent automatiser la parallélisation, souvent de manière assez efficace. Si vous avez au contraire codé un algorithme de manière procédurale, il sera généralement beaucoup plus difficile de le paralléliser.
whuber

Réponses:

96

Je pense que la clé sera de savoir si les bibliothèques commencent ou non à être développées pour Julia. C’est bien beau de voir des exemples de jouets (même s’il s’agit de jouets compliqués) montrant que Julia souffle R hors de l’eau lors de la tâche où R est mauvais.

Mais les boucles mal faites et les algorithmes codés à la main ne sont pas la raison pour laquelle beaucoup de ceux que je connais et qui utilisent R utilisent R. Ils l’utilisent parce que, pour presque toute tâche statistique sous le soleil, quelqu'un a écrit le code R pour cela. R est à la fois un langage de programmation et un logiciel de statistiques - à l’heure actuelle, Julia n’est que le premier.

Je pense qu’il est possible d’y arriver, mais il existe beaucoup plus de langages bien établis (Python) qui ont encore du mal à rester des outils statistiques utilisables.

Fomite
la source
Avez-vous réellement examiné le code de référence (ou les références) pour savoir que les méthodes R sont mal écrites? J'essaie de le trouver moi-même pour voir comment les différentes langues ont été utilisées ...
Josh Hemann
10
@JoshHemann J'ai assez regardé pour savoir que, dans l'ensemble, R est "slow-ish". Il ne perd pas nécessairement à chaque fois, et il arrive parfois que Python sorte de l'eau, mais dans tous les cas, le ruban "qui gagne" semble aller auquel Python ou le programmeur R a écrit la plupart de ses contenus en C .
fomite
5
Le code de référence est terrible . Des gains de vitesse de 2000x sont possibles pour leurs exemples R. Voir stackoverflow.com/questions/9968578/… , en particulier les commentaires.
Ari B. Friedman
12
Vous avez raison, @gsk. Par exemple, pisumgithub.com/JuliaLang/julia/blob/master/test/perf/perf.R ) prend 7,76 secondes alors qu'une simple réécriture utilisant R ( replicate(500, sum((1 / (10000:1))^2))[500]) idiomatique prend 0,137 secondes, soit plus de cinquante fois plus rapide.
whuber
2
Une des raisons pour lesquelles R a décollé était sa compatibilité avec S-PLUS. Les gens ont pu utiliser beaucoup de vieux code. Le vieux code fortement utilisé a moins de bugs. Avec de nouvelles choses comme Julia, qui ne sont pas compatibles avec l’ancien code, vous avez besoin d’une situation «d’application révolutionnaire»: cela justifie toute la peine de passer à une nouvelle plate-forme. C'est similaire au nouveau langage de Google Go - bon essai, mais pourquoi devrais-je l'apprendre?
Aksakal
56

Je suis d'accord avec beaucoup d'autres commentaires. "Espérer"? Sûr. Je pense que Julia a beaucoup appris de ce que R et Python / NumPy / Pandas et d’autres systèmes ont fait bien ou mal au fil des ans. Si j'étais plus intelligent que moi et si je voulais écrire un nouveau langage de programmation qui serait le substrat d'un environnement de développement statistique à l'avenir, cela ressemblerait beaucoup à Julia.

Cela dit, il faudra 5 ans avant que cette question puisse être résolue avec le recul. À l'heure actuelle, Julia ne présente pas les aspects critiques suivants d'un système de programmation statistique capable de concurrencer R pour les utilisateurs quotidiens:

(liste mise à jour au fil du temps ...)

  • types de facteurs optionnellement ordonnés
  • la plupart des tests statistiques et des modèles statistiques
  • Programmation alphabète / support d'analyse reproductible
  • Tracé de classe R ou même Matlab

Pour rivaliser avec R, Julia et les progiciels de statistiques complémentaires devront être suffisamment propres et complets pour que les non-programmeurs intelligents, disent les étudiants de deuxième cycle en sciences sociales, puissent raisonnablement l’utiliser. Il y a énormément de travail à faire pour y arriver. Peut-être que ça va arriver, peut-être que ça va pétiller, peut-être quelque chose d'autre (R 3.0?) Va le remplacer.

Mise à jour:

Julia prend désormais en charge les DataFrames avec les données / NA manquantes, les modules / espaces de noms, les formulatypes et l' model.matrixinfrastructure, le traçage (sorta), le support de base de données (mais pas encore pour les DataFrames) et la transmission d'arguments par mots-clés. Il existe également un IDE (Julia Studio), un support Windows, des tests statistiques et un support date / heure.

Harlan
la source
literate programming/reproduce-able analysis support-> voir IJulia .
Piotr Migdal
1
Ajoutez le noyau iJulia pour l’écosystème des ordinateurs portables iPython / Jupyter.
thecity2
2
Julia Studio est en train de disparaître et Juno est maintenant l'IDE
Antony
3
Deux ans et demi après la publication de cette réponse, les deux tiers des éléments de la liste des "éléments indispensables" sont maintenant appliqués. Je pense que c’est la meilleure preuve que vous puissiez trouver que Julia est vraiment prometteuse.
Senderle
5 ans doivent avoir passé. Sommes-nous encore là, @ Harlan?
StasK
35

Pour moi, une chose très importante pour un langage d’analyse de données est d’avoir une fonctionnalité d’algèbre de requête / relationnelle avec des valeurs par défaut raisonnables et une conception orientée de manière interactive. Idéalement, elle devrait être intégrée au langage. OMI, aucun langage FOSS que j'ai utilisé ne le fait efficacement, pas même R.

data.frame est très difficile à utiliser de manière interactive - par exemple, il imprime toute la structure de données lors de son invocation, la syntaxe $ est difficile à travailler par programme, l'interrogation nécessite une auto-référence redondante (c'est-à-dire DF[DF$x < 10]), les jointures et les agrégations sont maladroites. Data.table résout la plupart de ces ennuis, mais comme il ne fait pas partie de la mise en œuvre principale, la plupart du code R n'utilise pas ses installations.

Les pandas en python souffrent des mêmes défauts.

Ces reproches peuvent sembler naïfs, mais ces défauts s’accumulent et sont finalement importants dans l’ensemble, puisqu’ils coûtent beaucoup de temps.

Je crois que si Julia veut réussir en tant qu’environnement d’analyse de données, il faut s’efforcer d’implémenter des opérateurs de type SQL (sans la syntaxe SQL) sur un type de données de table convivial.

Yike Lu
la source
1
+ 1 - Un point intéressant, judicieusement expliqué. Bienvenue dans notre communauté!
whuber
4
Pour être tatillon, les grands DataFrames Pandas n'impriment pas tout leur contenu lorsqu'ils sont invoqués, comme cela se produit dans R. Ils affichent maintenant les en-têtes de colonne avec un nombre de valeurs nulles / non nulles. De plus, bien que je convienne que la syntaxe n'est pas idéale, les problèmes de portée rendent difficile l'élimination de l'auto-référence pour le filtrage par style de compréhension. Il est plus volumineux, mais résiste également aux collisions d’espaces de noms si un DataFrame a des colonnes supplémentaires au moment de l’exécution que vous ne pensiez pas.
Goodside
29

Je peux signer ce que Dirk et EpiGrad ont dit; Pourtant, il y a encore une chose qui fait de R une langue unique dans son créneau: le système de types orienté données.

R's a été spécialement conçu pour gérer les données. C'est pourquoi il est centré sur les vecteurs et contient des éléments tels que data.frames, factor, NA et attributs.
Les types de Julia sont quant à eux orientés sur les performances numériques. Nous avons donc des scalaires, des modes de stockage bien définis, des unions et des structures.

Cela peut sembler anodin, mais tout le monde qui a déjà essayé de faire des statistiques avec MATLAB sait que ça fait vraiment mal.

Donc, au moins pour moi, Julia ne peut rien offrir que je ne puisse pas réparer avec un morceau de C de quelques lignes et qui tue beaucoup d'expressivité vraiment utile.

utilisateur88
la source
4
(+1) Bon point. Quelques réflexions supplémentaires: Le manque d' data.frameinstallations similaires à Python m'a longtemps dérangé, mais maintenant, les Pandas semblent avoir résolu ce problème. Les formules font partie des extensions de statsmodels prévues (eh bien, nous savons qu'il est parfois préférable d'éviter l'interface de formule en R). Il y a une proposition pour data.frame pour Julia (plutôt rapide comparé à Python!), (...)
chl
5
Je pense que @mbq a aussi un point à propos de C. Si j'ai besoin de rapidité dans le même ordre de grandeur que C / C ++ ... je peux utiliser C / C ++ avec R.
Fomite
4
@EpiGrad, oui, vous pouvez écrire en C / C ++ et interfacer proprement avec R. Mais c'est une faiblesse, pas une force du langage. Avec Julia, les utilisateurs finaux n'auront jamais besoin d'écrire en C pour gagner de la vitesse.
Harlan
2
@ Harlan C'est seulement un point faible si vous connaissez déjà Julia et C. J'affirmerais avoir passé du temps en C <temps passé à apprendre une nouvelle langue et à tout réimplémenter à partir de zéro.
Fomite
9
@Harlan Et pour être franc, ces gens ne vont pas réécrire leur travail en Julia. R comme un paquet de statistiques, pas un langage de programmation est leur cas d'utilisation .
Fomite
26

Je peux voir Julia remplacer Matlab, ce qui serait un énorme service pour l'humanité.

Pour remplacer R, vous devez prendre en compte tout ce que Neil G, Harlan et d’autres ont mentionné, ainsi qu’un facteur important dont je ne pense pas qu’il a été tenu compte: l’installation facile de l’application et de ses bibliothèques.

À l'heure actuelle, vous pouvez télécharger un binaire de R pour Mac, Windows ou Linux. Il fonctionne avec une large sélection de méthodes statistiques. Si vous souhaitez télécharger un package, il suffit d’une simple commande ou d’un clic de souris. Ça fonctionne.

Je suis allé télécharger Julia et ce n'est pas simple. Même si vous téléchargez le binaire, vous devez avoir installé gfortran pour obtenir les bonnes bibliothèques. J'ai téléchargé la source et essayé makeet cela a échoué sans message vraiment utile. J'ai un diplôme de premier cycle et un diplôme de deuxième cycle en informatique, afin que je puisse faire le tour et le faire fonctionner si j'étais si enclin. (Je ne suis pas.) Est-ce que Joe Statistician va faire ça?

R possède non seulement un vaste choix de packages, mais également un système assez sophistiqué qui crée automatiquement les fichiers binaires de l'application et de presque tous les packages. Si, pour une raison quelconque, vous avez besoin de compiler un paquet à partir du source, ce n’est pas vraiment plus difficile (tant que vous avez un compilateur approprié, etc., installé sur votre système). Vous ne pouvez pas ignorer cette infrastructure, tout faire via github et vous attendre à une large adoption.

EDIT: Je voulais m'amuser avec Julia - ça a l'air excitant. Deux problèmes:

1) Lorsque j'ai essayé d'installer des paquets supplémentaires (oubliez comment ils s'appellent dans Julia), cela a échoué avec des erreurs obscures. De toute évidence, mon Mac ne dispose pas d'un outil similaire à celui auquel il s'attendait. Non seulement cela échoue, mais il reste des choses que je dois supprimer manuellement ou d'autres installations échoueront.

2) Ils forcent un certain espacement dans une ligne de code. Je n'ai pas les détails sous les yeux, mais c'est dû aux macros et au fait qu'il n'y ait pas d'espace entre la macro et la parenthèse ouvrant ses arguments. Ce type de restriction m'ennuie énormément, car j'ai développé la mise en forme de mon code au fil des ans et des langues et que je mets en fait un espace entre le nom d'une fonction / macro et la parenthèse d'ouverture. Je comprends certaines restrictions de formatage du code, mais des espaces dans une ligne?

Wayne
la source
5
Julia en est encore à ses balbutiements. Je ne suis pas un historien, mais je parierais que les binaires propres de R ne sont pas sortis au cours des premiers mois. Votre argument concernant le système de distribution est quelque chose que je n’ai pas vu beaucoup parler jusqu’à présent. Encore une fois, je parierais aussi que CRAN n’a pas germé en même temps que R. Un "CJAN" serait certainement bien pour une adoption à grande échelle.
Christopher Aden
7
Vous voudrez peut-être savoir alors, @Christopher, que R est en réalité un clone développé indépendamment d'un paquet (S, puis S-Plus) qui avait connu un succès commercial (modéré) et était en cours de développement il y a dix ans. Cela lui a donné une longueur d'avance significative que Julia (et la plupart des autres efforts de ce type) n'a jamais entreprise.
whuber
3
@ChristopherAden: Je suis d'accord pour dire que Julia est encore jeune. Mais je ne suis absolument pas du même avis que "un" CJAN "serait certainement bien pour une adoption à grande échelle": c'est une nécessité absolue. Les seuls outils que je puisse imaginer sans infrastructure de type CRAN sont hautement spécialisés, comme JAGS. Mais Julia, comme R, est polyvalente.
Wayne
10
Le jour où Open Source Language remplacera MATLAB sera le meilleur jour pour le monde de l’ingénierie.
Royi
9
"Je peux voir Julia remplacer Matlab, ce qui serait un énorme service pour l'humanité." Je ne pourrais pas être plus d'accord.
davidav
24

La langue de Julia est assez nouvelle; son heure de pointe peut être mesurée en semaines (même si son temps de développement peut bien sûr être mesuré en années). Maintenant, ces semaines en lumière étaient des semaines très excitantes - voir, par exemple, la récente discussion à Stanford où "ça venait juste de commencer" --- se concrétiser.

Je continuerais donc à utiliser R et à prendre en compte les alternatives en développement. L'année dernière, beaucoup de gens ont été gaga contre Clojure; Cette année, Julia est la nouvelle saveur dominante. Nous verrons si ça colle.

Dirk Eddelbuettel
la source
16
En raison de ce que j'ai vu via Rcpp, Julia m'impressionne encore plus - environ 50, 60, 70 fois plus pour les boucles simples que dans MCMC, et plusieurs centaines pour les exemples "dégénérés" comme fibonacci sont essentiellement les mêmes Rcpp eu! Mais je sais aussi qu'avec Rcpp, j'ai toujours accès aux paquets 3700 CRAN, ainsi qu'à d'innombrables bibliothèques C ++, alors que Julia n'a presque rien. Cela dit, la promesse de Julia est énorme. Mais peut-être existe-t-il un "alors" ainsi qu'un "maintenant". Le temps nous le dira.
Dirk Eddelbuettel
2
Et n'oubliez pas Incanter, qui est supposé devenir un environnement statistique basé sur Clojure. Comment Julia est-elle supérieure à cela?
Wayne
2
@Wayne, ne brouillons pas les eaux ici. Ouvrez une nouvelle question à ce sujet (peut-être une question demandant une comparaison entre plusieurs langues)
naught101
2
@ naught011: Je fais simplement écho à l'argument de Dirk selon lequel Clojure était la saveur du mois, puis spécifiquement d'Incanter, à présent Julia. Je ne pense pas que Julia ou Incanter (ou Clojure) aient une chance d'être des plates-formes statistiques généralisées.
Wayne
2
Je n'en ai aucune idée, mais je suis heureux de mettre à jour le côté R: à l'heure actuelle, plus de 6400 paquets sur CRAN, et plus de 350 d'entre eux utilisent maintenant Rcpp. Travaille toujours pour moi. Les gens de Julia semblent actifs et heureux - et avoir le choix est une bonne chose. Il n'y a pas de langage unique pour tous les problèmes: désolé, Python .
Dirk Eddelbuettel
19

Bruce Tate ici, auteur de Sept langues en sept semaines. Voici quelques réflexions. Je travaille sur Julia pour le livre de suivi. Ce qui suit n’est que mon opinion après quelques semaines de jeu.

Deux forces fondamentales sont en jeu. Premièrement, toutes les langues ont une durée de vie. R sera remplacé un jour. Nous ne savons pas quand. Les nouvelles langues ont beaucoup de mal à évoluer. Lorsqu'un nouveau langage évolue, il résout généralement un problème de douleur accablant.

Ces deux choses sont liées. Pour moi, nous commençons à voir un thème prendre forme autour de langues telles que le langage R. Ce n'est pas assez rapide, et c'est plus difficile qu'il ne le faut. Ceux qui peuvent vivre dans une certaine enveloppe de performance et rester dans des bibliothèques établies vont bien. Ceux qui ne peuvent pas avoir besoin de plus, et ils commencent à en chercher plus.

Le fait est que les architectures informatiques sont en train de changer et que, pour en tirer parti, le langage et ses constructions doivent être construits d'une certaine manière. Le point de vue de Julia sur la concurrence est intéressant. Il optimise ce qui convient pour un tel langage: une distribution transparente et une circulation efficace des données entre les processus. Lorsque j'utilise Julia pour des tâches typiques, des cartes, des transformations, etc., j'appelle simplement des fonctions. Je n'ai pas à m'inquiéter de la plomberie.

Pour moi, le fait que Julia soit plus rapide sur un processeur soit intéressant, mais ne blâme pas trop R. Ce qui est intéressant pour moi, c’est que, comme les processeurs dépendent de plus en plus des performances multicœurs, les problèmes d’informatique technique sont à peu près idéalement placés. tirer le meilleur parti possible, dans le bon langage.

L'autre fonctionnalité qui aidera à y arriver est bien les macros. Le rythme de la langue est juste intense en ce moment. Les macros vous permettent de créer des blocs de construction plus gros et plus propres. Regarder les bibliothèques est intéressant mais ne donne pas une image complète. Vous devez regarder la croissance des bibliothèques. La trajectoire de Julia est à peu près parfaite ici.

Clojure est intéressant pour certains parce qu’aucun langage technique ne fait ce que R peut faire, alors certains se tournent vers un langage généraliste pour combler ce vide. Je suis en fait un grand fan. Mais Clojure est une distorsion cérébrale assez grave. Clojure sera là pour les programmeurs qui ont besoin de faire de l'informatique technique. Ce ne sera pas pour les ingénieurs et les scientifiques. Il y a trop à apprendre.

Donc pour moi, Julia ou quelque chose comme ça va absolument remplacer R un jour. C'est une question de temps.

utilisateur1295658
la source
Julia ne propose pas beaucoup de nouveaux langages qui fournissent à la fois des types basés sur des modèles et un écosystème macro de première classe dérivé de lisp - Julia. Cette capacité, ainsi que ses fonctionnalités de concurrence et sa vitesse (qui s'améliorera probablement dans les versions futures), lui confèrent une position concurrentielle solide par rapport aux autres langues, à mon avis. J'utilise rarement R mais utilise fréquemment C ++ (w / templates) et Lisp (w / macros). Julia peut faire les deux, proprement et efficacement, dans un seul langage clair. Je suis convaincu que Julia deviendra une langue majeure à l'avenir.
AsymLabs
15

Chaque fois que je vois une nouvelle langue, je me demande pourquoi une langue existante ne peut pas être améliorée.

Les grands avantages de Python sont

  • un riche ensemble de modules (pas seulement des statistiques, mais des bibliothèques de traçage, sortie en pdf, etc.)
  • les constructions de langage dont vous aurez finalement besoin à long terme (constructions orientées objet dont vous avez besoin dans un grand projet; décorateurs, fermetures, etc. qui simplifient le développement)
  • de nombreux tutoriels et une grande communauté de support
  • accès à mapreduce, si vous avez beaucoup de données à traiter et que cela ne vous gêne pas de payer quelques sous pour l’exécuter sur un cluster.

Pour dépasser R, Julia, etc., Python pourrait utiliser

  • développement de la compilation juste-à-temps pour Python restreint pour vous donner plus de vitesse sur une seule machine (mais mapreduce est toujours préférable si vous pouvez supporter la latence)
  • une bibliothèque de statistiques plus riche
Neil G
la source
3
Cela peut être vrai, mais pour un utilisateur très occasionnel, la conception du langage de Python peut être un peu plus difficile à utiliser que quelque chose comme Matlab ou Julia, qui a une syntaxe encore plus mathématique. Tu peux dire y = 3x+2en Julia et ça marche!
Harlan
6
C'est drôle: quand j'ai vu Python pour la première fois il y a plus de 10 ans, j'ai eu exactement la même réaction (pourquoi est-ce nécessaire? Pourquoi ne pas simplement améliorer ce qui existe déjà? Pourquoi apprendre un tout nouvel ensemble de bizarreries syntaxiques bizarres, noms de classes, méthodes , et procédures, et tout le reste?). :-)
whuber
2
@NeilG Les statisticiens moins professionnels que les chercheurs non programmeurs, en particulier dans le domaine des sciences. Python est excellent pour les programmeurs, mais si tout ce que vous voulez faire est de charger vos données psychologiques et d’ajuster (rapidement) certains modèles, une syntaxe très simple, semblable à une mathématique, pourrait être préférable à la conception élégante basée sur les objets de Python.
Harlan
3
@NeilG N'oubliez pas que le succès de R tient en partie au fait qu'il n'est pas utilisé uniquement par les statisticiens. Il est utilisé par les gens qui font des statistiques . Et les spécialistes des sciences sociales, les cliniciens et les étudiants de premier cycle en sciences sont des utilisateurs absolument très occasionnels.
Fomite
6
Je pense que le blog de John D Cook (membre de CrossValidated) est parfaitement clair: je préférerais beaucoup programmer les mathématiques dans un langage généraliste plutôt que d'essayer de coder les problèmes de mathématiques et de systèmes dans un langage mathématique. Si la communauté Julia peut garder cela à l'esprit, il y a de bonnes chances que le langage reste en place pour la programmation analytique en général (les statistiques n'en étant qu'un élément). Voir johndcook.com/blog/2012/04/02/why-scipy
Josh Hemann
9

Julia n'acceptera pas R très bientôt. Découvrez Microsoft R ouvert.

https://mran.revolutionanalytics.com/open/

Ceci est une version améliorée de R qui utilise automatiquement tous les cœurs de votre ordinateur. C'est le même R, le même langage, les mêmes packages. Lorsque vous l'installerez, RStudio l'utilisera également dans la console. La vitesse de MRO est encore plus rapide que Julia. Je fais beaucoup d'informatique intensive et j'utilise Julia depuis plus d'un an. Je suis passé récemment à R parce que R a un meilleur support et RStudio est un éditeur génial. Julia en est encore à ses débuts et ne rattrape peut-être pas Python ou R très bientôt.

Milton Mai
la source
8

Ce qui suit ne mérite probablement pas d'être une réponse, mais il est trop important d'être enterré comme un commentaire sur la réponse de quelqu'un d'autre ...

Je n'ai pas beaucoup entendu parler de la consommation de mémoire, juste de la vitesse. Toute la sémantique de R étant une valeur de passage peut être douloureuse, et ceci a été une critique du langage (qui est une question distincte du nombre de paquets intéressants qui existent déjà). Une bonne gestion de la mémoire est importante, de même que des moyens de gérer les traitements hors cœur (par exemple, les tableaux ou les tables mappés en mémoire de numpy , ou le format xdf de Revolution Analytics). Bien que le compilateur JIT de PyPy permette de réaliser des benchmarks Python frappants, la consommation de mémoire peut être assez élevée. Alors, est-ce que quelqu'un a déjà utilisé Julia et l'utilisation de la mémoire? On dirait qu'il y a des fuites de mémoire sur la version "alpha" de Windows qui seront sans aucun doute corrigées, et j'attends toujours l'accès à une machine Linux pour jouer moi-même avec le langage.

Josh Hemann
la source
C'est vrai, mais il existe des moyens d'utiliser le passage par référence dans R (Classes de référence, par exemple).
Ari B. Friedman
1
Et R n'est pas vraiment strictement valeur de passage. Une évaluation paresseuse et une optimisation intelligente signifient que souvent, les données ne sont pas copiées sauf si elles doivent l'être.
Ari B. Friedman
8

Je pense qu'il est peu probable que Julia remplace un jour R, pour nombre des raisons mentionnées précédemment. Julia est un remplacement Matlab, pas un remplacement R; ils ont des objectifs différents. Même après que Julia ait une bibliothèque de statistiques complète, personne n’y enseignerait jamais un cours d’introduction à la statistique.

Cependant, un domaine dans lequel cela pourrait être incroyable est un langage de programmation optimisé pour la vitesse qui est moins pénible que le C / C ++. S'il était lié de manière transparente à R (dans le style de Rcpp), il serait alors extrêmement utile pour l'écriture de segments de code critiques pour la vitesse. Malheureusement, aucun lien de ce type n'existe actuellement:

https://stackoverflow.com/questions/9965747/linking-r-and-julia

Ari B. Friedman
la source
Mais maintenant, il y en a un: comments.gmane.org/gmane.comp.lang.julia.devel/15153 ne l'a pas essayé (pas encore).
kjetil b halvorsen
8

Je suis un novice Julia, et je suis compétent. Les raisons pour lesquelles je trouve Julia intéressante à ce jour sont la performance et la compatibilité.

Outils GPU. J'aimerais utiliser CUSPARSE pour une application statistique. Les résultats du CRAN indiquent qu'il n'y a pas grand chose à faire. Julia a des liaisons disponibles qui semblent bien fonctionner jusqu'à présent.

using CUSPARSE
N = 1000
M = 1000
hA = sprand(N, M, .01)
hA = hA' * hA
dA = CudaSparseMatrixCSR(hA)
dC = CUSPARSE.csric02(dA, 'O') #incomplete Cholesky decomp
hC = CUSPARSE.to_host(dC)

Outils HPC. On peut utiliser un cluster de manière interactive avec plusieurs nœuds de calcul.

nnodes = 2
ncores = 12    #ask for all cores on the nodes we control
procs = addprocs(SlurmManager(nnodes*ncores), partition="tesla", nodes=nnodes)
for worker in procs
    println(remotecall_fetch(readall, worker, `hostname`))
end

Compatibilité Python. Il y a un accès à l'écosystème python. Par exemple, il était facile de savoir comment lire les données d'imagerie cérébrale:

import PyCall
@pyimport nibabel

fp = "foo_BOLD.nii.gz"
res = nibabel.load(fp)
data = res[:get_data]();

Compatibilité C Ce qui suit génère un entier aléatoire à l’aide de la bibliothèque standard C.

ccall( (:rand, "libc"), Int32, ())

La vitesse. Je pensais que je verrais comment le paquet Distributions.jl fonctionnait contre le logiciel Rnorm - qui, je suppose, est optimisé.

julia> F = Normal(3,1)
Distributions.Normal(μ=3.0, σ=1.0)

julia> @elapsed rand(F, 1000000)
0.03422067

En R:

> system.time(rnorm(1000000, mean=3, sd=1))
   user  system elapsed 
  0.262   0.003   0.266 
8 tours
la source
1
@ NickCox, comme il y a déjà plus d'une douzaine de réponses, j'ai pensé qu'il serait peut-être intéressant de mettre en évidence un autre angle. De plus, j'ai posté une première ébauche accidentellement :)
conjectures
1
La question était de savoir pourquoi Julia pourrait rester dans la communauté statistique, ma réponse est centrée sur un support apparemment bon pour hpc + gpu, ce que de nombreuses personnes avec un travail intensif en calcul peuvent trouver intéressant.
Conjectures
7

Julia 1.0 vient de sortir un IDE très utilisable (Juno). Le parti est arrivé un peu tard, Python ayant déjà dominé le Machine Learning, alors que R continuait de dominer tous les autres types d'analyses statistiques. Cela étant dit, Julia se fait déjà une place de choix dans le domaine des algorithmes de finance et de trading, car un temps de développement rapide ET une exécution sont indispensables. À mon avis, à moins qu'un autre langage ne soit nettement meilleur, l'élévation de Julia deviendra probablement la suivante:

(1) Il commence à manger le déjeuner de MATLAB. Les utilisateurs de MATLAB aiment la syntaxe MATLAB mais détestent à peu près tout le reste. La lenteur, les licences coûteuses, les moyens très limités de traiter des structures de données complexes qui ne sont pas des matrices. Je me souviens d'une citation où il est dit que "Si Julia remplace MATLAB, ce sera un énorme service pour l'humanité". Les utilisateurs de MATLAB peuvent très bien maîtriser Julia et seront impressionnés par la facilité avec laquelle il est possible d’écrire un code qualité qui fait bien plus que ce que MATLAB peut faire (structures rapides que vous pouvez insérer dans des tableaux et les parcourir rapidement?). De plus, les chercheurs peuvent créer de sérieuses boîtes à outils en Julia (une petite équipe de doctorants a écrit un ensemble d'équations différentielles de classe mondiale) qui aurait été impossible avec MATLAB.

(2) Il commence à reprendre la recherche en méthodes numériques et en simulation. Le MIT met tout son poids derrière Julia et la communauté des chercheurs écoute le MIT. Les simulations numériques et les nouvelles méthodes numériques sont des problèmes mal définis qui n’ont pas de bibliothèques. C'est ici que brille Julia en tant que langue. S'il n'y a pas de bibliothèques disponibles, il est beaucoup plus facile d'écrire du code de qualité rapide dans Julia que dans n'importe quel autre langage. Ce sera un langage numérique / de simulation écrit par des mathématiciens pour des mathématiciens (son similaire à R encore?)

(3) Une autre percée dans l'apprentissage automatique se produit qui donne l'avantage à Julia. C'est un peu un joker qui pourrait ne pas arriver. TensorFlow est génial, mais il est extrêmement difficile à pirater. Python a déjà commencé à montrer des fissures et TensorFlow a commencé à adopter Swift (avec une mention honorable pour Julia). Si une autre percée en matière d’apprentissage automatique se produit, il sera beaucoup plus facile à implémenter et à pirater dans un paquet Julia comme Flux.jl.

(4) Julia commence à rattraper lentement R, ce qui prendra un certain temps. Faire des statistiques dans MATLAB est pénible, mais Juila est déjà bien en avance sur MATLAB avec Distributions.jl. Le fait est que les flux de travail R peuvent être facilement traduits en Julia. Le seul avantage réel de R est le fait qu’il existe de nombreux packages écrits par des statisticiens pour des statisticiens. Ce processus est cependant également facile à faire en Julia. La différence est que Julia est rapide et que vous n’aurez pas à utiliser une autre langue pour les performances (les packages R les plus "sérieux" sont écrits dans des langages comme C). Le problème avec R est que les packages écrits en R sont trop lents pour gérer de grands ensembles de données. La seule alternative est de traduire les paquets dans une autre langue, ce qui rend le développement de R plus lent que celui de Julia.

Déduction
la source
2
La citation sur le remplacement de Matlab dont vous vous souvenez est tirée de ce fil . :)
Dougal
5

Je suis intéressé par la promesse d'une meilleure vitesse et d'une parallélisation facile en utilisant différentes architectures. Pour cette raison, je surveillerai certainement le développement de Julia, mais il est peu probable que je l'utilise tant qu'il ne pourra pas gérer les modèles mixtes linéaires généralisés. à partir d'algorithmes d'apprentissage machine.

Aucun statisticien ne peut se permettre d’avoir une attitude fondamentaliste face au choix des outils. Nous utiliserons tout ce qui nous permettra de faire le travail le plus efficacement possible. Je pense que je vais rester avec R pendant encore quelques années, mais ce serait bien d’être agréablement surpris.

Mervyn thomas
la source
Bonjour Mervyn, et bienvenue à Stats.SE! Julia a considérablement amélioré son temps depuis la création de ce billet (il y a presque un an!). Douglas Bates porté certains de ses GLM (GLMM peut - être?) Code à Julia dmbates.blogspot.com/2012/04/r-programmer-looks-at-julia.html ) et la page GitHub a vu beaucoup de mises à jour dans le passé année. Mon analyse de Julia jusqu’à présent (je l’utilise de temps en temps depuis l’année dernière) est un bon outil de rapidité, que j’utilise pour certains MCMC bruts, mais qui n’a pas encore remplacé R dans mon ensemble d’outils. Je ne peux pas attendre que R accélère ou que Julia soit plus répandue!
Christopher Aden
Doug n'a pas encore porté de GLMM. Si quelqu'un veut m'aider, je suis sûr qu'il serait heureux ...
Ben Bolker
4

Le luxe de NA en R ne va pas sans pénalités de performance. Si Julia soutient les NA avec une pénalité de performance moins importante, cela devient intéressant pour un segment de la communauté des statistiques, mais les NA imposent également un travail supplémentaire considérable lors de l'utilisation de code compilé avec R.

Beaucoup de paquets dans R reposent sur des routines écrites dans des langages hérités (C, Fortran ou C ++). Dans certains cas, les routines compilées ont été développées en dehors de R, puis utilisées comme base pour les packages de bibliothèque R. Dans d'autres, les routines ont d'abord été implémentées dans R, puis les segments critiques ont été traduits dans un langage compilé lorsque les performances ont été insuffisantes. Julia sera intéressante si elle peut être utilisée pour mettre en œuvre des routines équivalentes. Il est possible de concevoir une prise en charge de bas niveau pour les NA de manière à simplifier le traitement de NA par rapport à ce que nous avons maintenant avec R avec du code compilé.

Le nombre massif de bibliothèques R représente les efforts de nombreux utilisateurs. Cela était possible parce que R offrait des fonctionnalités qui n'étaient autrement pas disponibles / abordables. Pour que Julia soit largement utilisée, elle a besoin d’un groupe d’utilisateurs qui trouvent qu’elle fait ce dont elle a tellement besoin mieux que les solutions de rechange qui en valent la peine et qui nécessitent des efforts pour fournir des choses très élémentaires (par exemple, des graphiques, des classes de dates, des NA, etc.). ) disponible dans les langues existantes.

George N. White III
la source
4

Je serai direct, je n'ai aucune expérience de R, mais je travaille avec beaucoup de personnes qui pensent que c'est un excellent outil d'analyse statistique. Mon expérience est dans l'entreposage de données, et en raison du modèle de programmation facile à utiliser de Julia mais plus standard, je pense qu'il pourrait être un substitut très intéressant à la partie transformée des outils ETL traditionnels qui fonctionnent généralement très mal, la plupart n'ont aucun moyen de le faire. créer facilement une transformation normalisée ou réutiliser les résultats d'une transformation déjà effectuée sur un ensemble de données précédent. La prise en charge des n-uplets bien définis et typés se démarque. Si je veux construire un cube OLAP devant fondamentalement construire des n-uplets plus détaillés (tables de faits) à partir de n-uplets déjà calculés, les outils ETL actuels ne disposent pas de "blocs de construction" pour en parler. peut aider, cette industrie a travaillé sur cette question de différentes manières dans le passé, mais il y a des compromis à faire. Les langages de programmation traditionnels peuvent aider en fournissant des transformations définies de manière centralisée, et Julia pourrait potentiellement simplifier les agrégations et les distributions non standard communes aux systèmes d'entrepôts de données plus complexes.

Preston
la source
3

Vous pouvez également utiliser Julia et R ensemble. Il y a une interface Julia-to-R . Grâce à ces packages, vous pouvez jouer avec Julia tout en appelant R chaque fois qu’une bibliothèque est nécessaire.

vasili111
la source
2

Julia a sans aucun doute toutes les chances de devenir une statistique dont le rêve est devenu réalité. Prenez SAS par exemple. Son pouvoir réside dans les nombreuses procs écrites en C - ce que Julia peut faire est de vous donner les procs avec le code source, avec des matrices une distribution de type de données intégrée avec SAS / iml. Je ne doute pas que les statisticiens se rendront à Julia une fois qu'ils auront compris ce que ce chiot peut faire.

Jimbo He
la source
1
Bienvenue à Stats.SE, Jimbo. Je ne suis pas d'accord avec votre affirmation. Je pense que nous avons vu ce que Julia est capable de faire, mais le problème à ce stade-ci est qu'il n'y a pas autant de paquets spécifiques à un domaine pour cela que chez R. R continuera à dominer dans les statistiques open source. tant que les chercheurs verront plus d’avantages à utiliser les nombreux packages de l’univers R. C'est ce que je pense, au moins.
Christopher Aden
2

Oh oui, Julia dépassera R assez rapidement. Et les raisons principales seront les "macros", 95% du langage est implémenté dans Julia et sa syntaxe parcimonieuse sans bruit. Si vous n'avez pas d'expérience avec les langages de type lisp, vous ne le comprendrez peut-être pas encore, mais vous verrez assez rapidement comment l'interface de formule R deviendra un mécanisme obsolète et laid, et sera remplacée par des micro-langages spécialisés de modélisation similaires à CL. macro de boucle. L'accès aux références de bas niveau d'un objet est également un avantage considérable. Je pense que R n’a toujours pas compris que le fait de cacher les éléments internes de l’utilisateur complique les choses au lieu de les simplifier.

Comme je le vois maintenant (après des années d'utilisation intensive de R derrière et juste de lire le manuel de Julia), les principaux inconvénients de Julia en ce qui concerne R ne sont pas un support pour l'héritage structurel (cela était intentionnel). Le système de types de Julia est moins ambitieux que S4; il prend également en charge l'envoi multiple et l'héritage multiple, mais avec un catch - il n'y a qu'un seul niveau de classes concrètes. Par contre, je vois rarement des hiérarchies de classes dans R plus profondes que 3 niveaux.

Le temps nous le dira, mais ce sera plus tôt que ne le pensent la plupart des utilisateurs de R :)

VitoshKa
la source
2
Vous faites valoir un point intéressant à propos des macros: des décennies plus tard, les gens sous-estiment encore la puissance de Lisp. Cependant, comme vous l'avez laissé entendre au point 1, ce langage est essentiellement un remplacement de Matlab, pas un remplacement de R. Je pense que vous ignorez également le fait que ce sont les langages plus les bibliothèques (paquets) que les gens utilisent et que Julia n’a même pas 1% de ce dont elle a besoin.
Wayne
2
@Wayne, je n'ignore rien, le PO concernait l'avenir et non ce qui se passe maintenant. Dans 5 ans, il y aura peut-être beaucoup plus de bibliothèques de statistiques dans Julia que maintenant pour R. Et cela, simplement parce que Julia a de bonnes chances d'être une bien meilleure langue.
VitoshKa
Si julia devient vraiment un remplaçant de MATLAB, utiliser le même langage d'ingénierie et de statistiques aura d'énormes avantages. Les zones qui se chevauchent (telles que les séries chronologiques) sont énormes.
kjetil b halvorsen
1

Les premiers cas d'utilisation de Julia sont des problèmes numériques. Fondamentalement, vous pouvez décomposer ces domaines de la science analytique et informatique en science des données (pilotée par les données) et en science de la simulation (pilotée par modèle). Julia traite en premier des cas d'utilisation de la science de la simulation. Ils traitent également des cas de science des données, mais plus lentement. R ne sera jamais très utile pour la science de la simulation, mais Julia sera très utile pour les deux dans quelques années.

Jamie Lawson
la source
0

Il doit pouvoir appliquer n'importe quelle fonction aux grands ensembles de données qui ne peuvent pas être conservés en mémoire de manière transparente pour l'utilisateur.
Cela inclut au moins l’exécution de modèles à effets mixtes, de modèles de survie ou de MCMC sur des jeux de données compatibles avec le disque mais pas sur la mémoire. Et si possible sur des jeux de données distribués sur plusieurs ordinateurs.

skan
la source