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#

  • Python apparaît comme un prérequis sur de nombreuses offres d’embauche

  • Python est le langage le plus utilisé dans l’enseignement

  • Yolo

  • Kaggle

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)
../_images/introprogpy_26_0.png

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#

  • tableur : difficile de passer à l’échelle

  • SAS, Matlab : onéreux

  • logiciel développé en C/C++ par des étudiants

  • R : naissance quasiment en même temps que Python mais inspiré de S né en 1976

  • il fallait connaître plusieurs langages pour tout faire

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#

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#

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

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.

  • gallery

L’intégration continue#

  • Indispensable aujourd’hui

NbImage('sklearn.png', width=600)
../_images/introprogpy_50_0.png

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')
../_images/introprogpy_52_0.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)
../_images/introprogpy_59_0.png

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