Datascience et programmation#
Links: notebook
, html, PDF
, python
, slides, GitHub
Des années 1970 à la datascience d’aujourd’hui.
Une petite histoire de l’informatique
Le langage Python en quelques mots
Python en datascience
Comment partager son travail ? Package et Documentation
Les sujets fréquemment oubliés : tests unitaires, ingénierie logicielle
Etre rapide avec un des langages les plus lents, mise en production
Ce cours
from jyquickhelper import add_notebook_menu
add_notebook_menu()
from pyquickhelper.helpgen import NbImage
Une petite histoire de l’informatique#
1970#
premier ordinateur IBM
création de Microsoft, Apple
MS-DOS
accessoirement, ma naissance
1980#
début de l’informatisation
les imprimantes à aiguilles
le langage Pascal, l’éditeur Borland, Quatro Pro
applications des premiers réseaux de neurones
accessoirement : mon premier ordinateur, un Amstrad 464
1990#
Les SVM
les imprimantes laser
popularisation des PCs
débuts d’internet et des téléphones portables
premières versions du langages Python
Linux
création d’Amazon
2000#
premiers smartphone
les random forest, début de scikit-learn
python 3.0, début de IPython, l’ancêtre de jupyter, pandas
début de Hadoop, l’ancêtre du calcul distribué pour le traitement des logs de site web
création de Facebook
L’ENSAE passe du C au Python
Création de Git et GitHub
2000 aussi#
Accessoirement, ma thèse avec des réseaux de neurones, gros pour l’époque, petits pour aujourd’hui.
Premier pas chez Yahoo, en jouant avec des teras de logs et Hadoop.
2010#
le deep learning gagne ses premières compétitions,
les librairies de machine learning deviennent open source,
elles sont accessibles en python, langage beaucoup plus facile d’accès que C++
le GPU prend son envol
les librairies implémentent les calculs de façons distribués
calcul en temps réel, loi RGPD
2010 l’histoire s’accélère#
2020#
Python efface R
l’exploitation des données est une évidence
le numérique est partout, peut-être un peu trop,
les réseaux sociaux sont incontournables
il existe même des tableurs écrit en python
2020 aussi#
les fakes news, les fakes tout court (modèle GAN)
2030 ?#
téléphones traduisant en temps réel d’une langue à l’autre,
voitures automatisées sur l’autoroute,
des drones survoles les champs pour éradiquer les insectes
ou autres champignons,
commande vocale de nombreux appareils ménagers
2040#
Back to 1984 ? ou l’odyssée de 2001 ?
Le langage Python en quelques mots#
3 concepts en informatique#
la séquence d’instructions
les tests - si…
les boucles - répétition
Les fonctions#
Les fonctions évitent la répétition du code.
La programmation object : les classes#
On peut tout écrire sans classes.
Cela rend les programmes plus lisibles.
L’informatique : une complexité qu’on rejette au début et qu’on trouve pratique par la suite.
Une syntaxe simple#
une des grammaires les plus courtes : grammaire
indentation obligatoire : rend les programmes plus lisibles
documentation incluse dans le programme
portable#
disponible sous mac, linux, windows
open source
un site d’extensions
de nombreuses extensions, automatiser, site web, calculs
langage interprété#
langage interprété :
a besoin de l’interpréteur Python
il ne peut pas marcher sans non plus
langage compilé (C, C++) :
traduit en langage machine
fonctionne sur une machine
Interface C#
Python est très lent, voire le plus lent
Il vérifie sans cesse ce que fait l’utilisateur.
Mais il est facile de l’interfacer avec le langage C pour écrire des calculs rapidement.
Python outil idéal pour automatiser#
Conçu pour automatisé des tâches répétitives.
Mail, Web, traitement de fichiers…
Un des langages les plus utilisés, donc beaucoup d’aide disponible sur Internet
NbImage("pp.png", width=500)
Conclusion#
Python : langage simple
utilisé par beaucoup
lent mais rapide pour qui sait le marier avec C
Pas le plus efficace dans tous les domaines
Mais présent dans tous les domaines
Python en datascience#
Avant Python#
numpy, pandas, matplotlib#
1995 - numpy : calcul matriciel
2003 - matplotlib : graphes
2008 - pandas : manipulation de données façon SQL
jupyter, cython, scikit-learn, sphinx#
2001 - jupyter : interface mêlant code, texte et exécution
2007 - scikit-learn : machine learning
2007 - cython : écriture simplifiée d’extension C pour Python
2008 - sphinx : documentation
Conçus par des informaticiens scientifiques#
pandas, scikit-learn, jupyter, cython ont été créés pour combler un besoin
beaucoup d’outils équivalents ont existé
ceux-là ont gagné la bataille de la simplicité
Accélération avec Git / GitHub#
Partager du code comme les idées
GitHub : ET téléphone maison (pandas)
Développement rapide (plus qu’un logiciel propriétaire)
Possibilité de construire ses propres outils à partir de ceux-là
Possibilité de partager ses propres extensions
Contributeurs#
Un bon projet attire les talents du monde entier
Même s’il est commencé par une société privée
Les core développeurs d’un projet open source sont souvent une dream team.
Cas du deep learning#
le langage python est le langage du deep learning, tensorflow (2015), pytorch (2016)
ces outils grossissent plus vite que n’importe quelle interface graphique qui pourrait en faciliter l’usage
à la fois logiciel, à la fois support de recherche
Economie#
Opensource : il est possible de recruter un développeur connaissant déjà pytorch ou tensorflow
Les logiciels sont offerts.
Pas les ressources de calculs.
Aparté : Kaggle#
Les sujets fréquemment oubliés (à l’école) : tests unitaires, ingénierie logicielle#
Les tests unitaires#
Au début, on les oublie car c’est ennuyeux à écrire.
Ensuite, on les écrit tout de suite car on est paresseux.
Un logiciel sans test unitaires est comme un avion en plein vol sans avoir été testé
La documentation#
On l’oublie toujours quand on l’écrit après.
Ce qui est logique pour les uns ne l’est pas toujours pour les autres.
Ecrire des exemples est fastidieux mais utile.
L’intégration continue#
Indispensable aujourd’hui
NbImage('sklearn.png', width=600)
Version, dépendance#
Et les conflits de dépendance. What is deprecated ?
Que se passe-t-il quand on construit un outil dépendant d’une dizaine d’autres et que tous évoluent en parallèle ?
NbImage('req.png')
Design#
refactoriser or not refactoriser ?
La programmation sert à optimiser des usages précis.
Les usages évoluent.
Il y a peut-être des romans intemporels.
Il n’y a pas de code intemporel.
Etre rapide avec un des langages les plus lents, mise en production#
Vitesse de conception#
Ce qu’on gagne en vitesse de conception
On le perd en vitesse d’exécution
Grosse machine pour apprendre, petite pour prédire#
Estimer des modèles nécessites beaucoup de ressources et des calculs sur de grands jeux de données
Utiliser un modèle veut souvent dire calculer une prédiction très souvent
Mise en production des modèles de machine learning#
Obtenir le même résultat, avec le même modèle mais un code différent
On n’optimise pas les calculs de la même manière sur toutes les machines
Aujourd’hui#
On fait des choses étonnantes avec le deep learning comme la traduction en temps réelle décrite dans La nuit des temps (Barjavel). Les progrès sont étroitement liés avec la capacité à calculer rapidement.
NbImage('nvidia.png', width=500)
Ce cours#
Objectif du cours#
Programmation en Python
Introduction aux principaux outils pour la datascience
Ressources#
Ressources (2)#
Ressources (3)#
ONNX… ce sur quoi je travaille
En guise de conclusion#
La programmation
Automatiser des tâches répétitives
Traiter un volume d’informations humainement impossible à traiter
Comment partager son travail ? Package et Documentation#
Cas d’un indice économique#
L’INSEE calcule l’indice des prix à la consommation tous les mois.
C’est un processus qui est exécuté tous les mois même pendant les vacances.
Il existe depuis 1914.
Processus et manuel#
Reproduire un même chiffre périodiquement, c’est suivre la même liste d’instruction avec des données actualisées
Collecte des données
Nettoyage
Fusions des bases
Calculs des indices
Transmettre un code ou un manuel#
pour
contre
le code est prêt à l’emploi
le code est compliqué
le code est précis
le code ne marche pas toujours sur une autre machine
il n’est pas besoin de tout connaître pour l’exécuter
tout le monde ne sait pas coder mais tout le monde sait lire
c’est rapide
Comment transmettre un code ?#
envoyer son code par mail
envoyer les instructions pour le récupérer
utiliser le même moyen que tout autre librairie Python ? –> les packages
La simplicité c’est souvent utiliser ce qui marche déjà.
Package et documentation#
Python propose des outils pour simplifier la création de package
cookiecutter : modèle de packages
Quelques exemples pour le cours#
td1a_unit_test_ci : un modèle pour un package python simple
td2a_plotting : un modèle pour une librairie graphique basée sur matplotlib
td3a_cpp : un modèle pour écrire une extension avec cython
td3a_cpp_deep : un modèle pour étendre pytorch
Les entreprises en pleine mutation#
le partage de code nécessite un langage commun, les mêmes outils, le même langage –> uniformisation
un temps d’apprentissage non négligeable
un code grossit sans cesse : il faut communiquer sur les nouvelles fonctionnalités