Salut tout le monde ! On a eu Functional February et Mechanical March. Maintenant, place à Analytical April, où on va se concentrer sur des langages parfaits pour la science des données.
Comme tu as pu le voir ces derniers mois, dans cette vidéo, Erik et moi allons te donner un aperçu rapide de ce que réserve ce mois et des différents langages qu'on va explorer.
Donc comme d'habitude, Erik va nous présenter les langages dans un instant, mais je vais commencer par te donner quelques détails pratiques sur ce mois.
Alors d'abord, les langages à l'honneur ce mois-ci. On en a seulement trois : Julia, Python et R. Chacun de ces langages est assez différent, et de toute évidence Python est un langage très polyvalent, mais on va t'encourager à essayer d'utiliser ces langages avec un état d'esprit science des données ce mois-ci.
Pour obtenir le badge Analytical April, tu dois terminer cinq exercices dans l'un de ces langages. On explorera bientôt les différences entre eux, mais en termes Exercism, notre parcours Python a un programme fantastique, donc je te recommande vraiment de l'essayer. On espère aussi lancer un programme Julia pendant le mois : une grande partie du travail est déjà faite et il ne reste plus qu'à le peaufiner. R n'a pas de programme, mais il propose plein d'exercices intéressants avec lesquels tu peux t'amuser.
Voici cinq exercices à l'honneur à essayer :
- etl : où tu peux explorer le remodelage de données vers un autre format
- largest-series-product : où tu peux t'exercer à trouver efficacement des motifs dans une chaîne de chiffres
- saddle-points : pour explorer le travail avec des tableaux/matrices multidimensionnels
- sum-of-multiples : pour t'exercer à filtrer et additionner une séquence de nombres
- word-count : convertir une chaîne de caractères en mots et les compter
Un rappel : en plus du badge Analytical April, il y a un badge #12in23 qui dure toute l'année et que tu peux obtenir en résolvant les différents exercices à l'honneur à n'importe quel moment de l'année. Donc tu devras résoudre ces 5 exercices en Python, R ou Julia à un moment cette année pour obtenir ce badge ! Pour la liste complète des exercices, un message sur le forum est lié depuis la page Analytical April.
Enfin, avant de plonger dans les langages, un rappel : en mars, on lance notre nouveau serveur Discord. Il s'y passe plein d'activités sympas, alors vas voir ! Le lien est dans la description ci-dessous !
Bon, explorons les langages. Prenons un aperçu rapide de chacun, puis on plongera dans leurs caractéristiques et leurs cas d'usage. Commençons par Python.
Python
- Conçu et développé par Guido van Rossum à la fin des années 1980 comme successeur du langage de programmation ABC. Première version publiée en 1991.
- Développé aux Pays-Bas au Centrum Wiskunde & Informatica (CWI) (célèbre pour être le lieu où Edsger Dijkstra a réalisé la majeure partie de son travail), un laboratoire de recherche financé par l'État.
- Guido programmait en C et avec des scripts shell, mais les deux avaient des inconvénients. Python vise à tirer le meilleur des deux mondes, sans les inconvénients.
- Géré par la Python Software Foundation, et les évolutions du langage passent par des Python Enhancement Proposals (PEP), l'équivalent des RFC.
R
- Créé par Ross Ihaka et Robert Gentleman à l'Université d'Auckland. R peut être considéré comme une implémentation différente du langage S (avec des différences relativement mineures), auquel a succédé S-plus, une implémentation commerciale (non libre) de S. Bien que R partage la majeure partie de sa syntaxe avec S, sa sémantique s'inspire de Scheme
- Objectif : créer un langage mieux adapté au calcul statistique et aux graphiques, et plus facile à utiliser que les logiciels comparables conçus par des informaticiens
Julia
- Développé de manière ouverte par Jeff Bezanson, Stefan Karpinski, Viral B. Shah et Alan Edelman, il compte aujourd'hui plus de mille contributeurs
- Objectif : construire un langage libre et de haut niveau qui a la vitesse du C, le dynamisme de Ruby, la métaprogrammation de LISP, la polyvalence de Python, la prise en charge des statistiques de R, la prise en charge de l'algèbre linéaire de MatLab et la puissance de traitement des chaînes de caractères de Perl, tout en sachant gérer une exécution massivement parallèle
- Excellent pour le calcul scientifique, mais aussi un langage polyvalent (le framework Genie pour les applications web)
Comme pour beaucoup de langages, tous les trois sont nés d'une insatisfaction :)
Très bien. Alors en termes de cas d'usage, quand utiliserais-tu chacun de ces langages plutôt que les autres ?
Python
- Un vrai langage polyvalent (sites web, scripts, calcul scientifique)
- Peut servir à de nombreux usages différents : l'IA (TensorFlow), le calcul scientifique (NumPy), les scripts, les sites web (Django), les systèmes embarqués (micro python), l'interfaçage avec du matériel (par ex. un Raspberry Pi), les jeux (EVE Online), et Python est même allé sur Mars
- Idéal pour apprendre à programmer : une profusion de ressources et une immense communauté. Beaucoup de conseils sur l'écriture de code pythonique (c'est-à-dire comment écrire du code Python idiomatique, avec des exemples), comme « Explicite vaut mieux qu'implicite » et « La lisibilité compte »). Beaucoup de systèmes d'exploitation l'ont installé par défaut
- L'un des langages les plus utilisés aujourd'hui, donc beaucoup de documentation, de bibliothèques et une grande communauté
R
- R est utilisé dans une grande variété de domaines, notamment par les chercheurs pour analyser les données d'expériences, par les universités pour enseigner les statistiques et l'analyse de données, dans le secteur financier où les statistiques sont essentielles (par ex. pour l'assurance), de même dans le commerce de détail (Amazon utilise R pour l'analyse de données) et l'industrie (John Deere estime combien de pièces détachées produire), le National Weather Service aide à prévoir la météo et les catastrophes, le journalisme de données (analyser des données du monde réel et leur donner du sens, souvent avec de la visualisation), très utilisé dans la santé, par ex. pour déterminer l'innocuité d'un médicament à partir d'essais précliniques
Julia :
- Idéal pour le calcul scientifique, l'exploration de données, l'apprentissage automatique, l'algèbre linéaire et le calcul distribué. La notation est proche de la notation mathématique, ce qui rend le passage de l'équation au code relativement facile
- Calcul distribué : les tâches (= coroutines) et les canaux permettent d'exécuter du code en parallèle où les différents éléments communiquent entre eux, avec une prise en charge multi-processus via le passage de messages (idéal pour le calcul haute performance)
- Utilisé dans le projet Celeste (un superordinateur exécutant du code Julia pour analyser 178 téraoctets de données astronomiques) (ce qui fait de Julia, par conséquent, un membre du club des petaflops, auquel seuls C, C++ et Fortran appartenaient à l'époque, Julia étant le premier langage dynamique, un million de milliards de calculs en virgule flottante par seconde. 1 suivi de 15 zéros), Clima (Climate Modeling Alliance) réunit des personnes de Caltech, du MIT et du Jet Propulsion Laboratory de la NASA pour développer un modèle de prévision climatique, le CERN, ASML
Et d'un point de vue programmation, en quoi diffèrent-ils ? Sont-ils fonctionnels, orientés objet, etc. ?
Python :
- Dynamique et fortement typé
- Multi-paradigme : impératif, fonctionnel, mais en réalité un langage orienté objet (tout est un objet)
- L'interprète par défaut, CPython, compile le code en bytecode, qui est ensuite interprété dans une machine virtuelle. PyPy est un remplacement de CPython qui compile à la volée en code machine
R :
- Dynamique et fortement typé
- Multi-paradigme, avec un cœur fonctionnel mais prenant aussi en charge les styles procédural et orienté objet
Julia :
- Dynamique et fortement typé, compilé juste-à-temps
- Multi-paradigme : impératif, orienté objet (surcharge via le dispatch multiple), fonctionnel (fonctions d'ordre supérieur, application partielle, opérateur pipe)
- Le code est compilé juste-à-temps, de manière anticipée, au moment de l'exécution
Et si on continue à les examiner d'un point de vue programmation, l'un de ces langages a-t-il des caractéristiques particulièrement remarquables ?
Python :
- Une syntaxe agréable : la sensibilité aux espaces blancs rend la portée facile à repérer. Le code est généralement facile à lire, par ex. des conditions booléennes lisibles (and/or)
- Expressif : on en fait beaucoup avec assez peu de code (compréhensions de listes, générateurs, décorateurs)
- Une immense richesse de bibliothèques disponibles pour toutes sortes d'usages
- Comme mentionné plus haut, c'est vraiment un langage polyvalent, car il peut servir dans de nombreux scénarios différents
Julia
- Le dispatch multiple. Décider quelle fonction appeler en fonction du type de tous les arguments (comme la surcharge de fonctions)
- Dynamique mais très performant. Les performances de Julia peuvent rivaliser avec celles de Fortran et s'approcher de celles du C. Le code « normal » est souvent performant (aucune bidouille extravagante n'est nécessaire, et les fonctions plus petites sont même encouragées). Des bibliothèques permettent d'exécuter du code sur GPU
- Calcul distribué : les tâches (= coroutines) et les canaux permettent d'exécuter du code en parallèle où les différents éléments communiquent entre eux, avec une prise en charge multi-processus via le passage de messages (idéal pour le calcul haute performance)
- Idéal pour le calcul scientifique, l'exploration de données, l'apprentissage automatique, l'algèbre linéaire et le calcul distribué. La notation est proche de la notation mathématique, ce qui rend le passage de l'équation au code relativement facile
R :
- Types de données flexibles : le vecteur est le type de base, même les scalaires sont des vecteurs. Les vecteurs peuvent porter des métadonnées (par ex. les noms de leurs éléments). Les listes sont hétérogènes (elles peuvent contenir des éléments de types différents). Un type spécial, le dataframe, pour des collections de vecteurs (tous de même longueur).
- Les opérations vectorisées permettent de mettre à jour des vecteurs de façon concise, efficace et lisible
- R est une suite intégrée d'outils logiciels pour la manipulation de données, le calcul et la représentation graphique. L'exploration, la visualisation et la manipulation des données sont faciles via RStudio. Idéal pour l'exploration de données
- Une super communauté, sympathique et diverse. La R for Data Science Online Learning Community est une communauté d'apprenants en R de tous niveaux qui travaillent ensemble pour progresser. Il existe un groupe Slack ouvert où les membres peuvent rester en contact et s'entraider face aux problèmes.
Si quelqu'un hésite sur lequel essayer en avril, comment lui recommanderais-tu de faire son choix ?
Comme tout en informatique : ça dépend ! Dans ce cas, je dirais que ça dépend surtout de tes objectifs et de ton expérience personnelle.
Si tu débutes relativement en programmation, que tu t'intéresses à l'IA ou à l'apprentissage automatique, ou que tu veux apprendre un langage que tu pourras utiliser pour plein de choses différentes, je te recommanderais probablement de commencer par Python : Le nombre de ressources disponibles pour Python est gigantesque, avec notamment de nombreux cours en ligne gratuits Python est utilisé partout avec l'IA et l'apprentissage automatique Python peut servir à un très grand nombre de choses Le parcours Python propose le mode apprentissage activé, ce qui peut t'aider à découvrir les concepts de base du langage de façon ludique
Si tu t'intéresses au travail statistique, que tu veux explorer et visualiser des données, ou que tu es curieux d'une autre façon de travailler avec les données, le langage R est un excellent choix : Les types de données de R sont fondés sur des collections de données (vecteurs/listes) et les opérations s'appliquent facilement aux collections (aucune boucle nécessaire) L'IDE RStudio est parfait pour explorer et visualiser des données R offre une excellente prise en charge de l'analyse statistique R permet de créer facilement des graphiques à partir de données
Si tu t'intéresses au calcul scientifique, que tu veux exécuter du code en parallèle, que la performance te tient vraiment à cœur, ou que tu veux apprendre un langage moderne et élégant qui apporte quelque chose de différent de la plupart des autres langages, je te recommanderais Julia :
- Le dispatch multiple sera nouveau pour beaucoup et il est incroyablement puissant
- Julia est idéal pour le calcul scientifique
- Le système de types de Julia est flexible et expressif
- Julia offre d'excellentes performances
- Julia est idéal pour l'exécution en parallèle
Bien sûr, si tu as le temps, je te recommande d'essayer les trois ! On ne sait jamais vraiment quel langage on va aimer avant de l'avoir essayé.