.. _introprogpyrst: ============================ Datascience et programmation ============================ .. only:: html **Links:** :download:`notebook `, :downloadlink:`html `, :download:`PDF `, :download:`python `, :downloadlink:`slides `, :githublink:`GitHub|_doc/notebooks/2021/actuaires/introprogpy.ipynb|*` 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 .. code:: ipython3 from jyquickhelper import add_notebook_menu add_notebook_menu() .. contents:: :local: .. code:: ipython3 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 .. code:: ipython3 NbImage("pp.png", width=500) .. image:: introprogpy_26_0.png :width: 500px 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 ~~~~~~~~~~~~~~~ - `Kaggle `__ - `XGBoost `__ 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 | tout le monde ne sait pas coder | | connaître pour l’exécuter | 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 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 .. code:: ipython3 NbImage('sklearn.png', width=600) .. image:: introprogpy_50_0.png :width: 600px 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 ? .. code:: ipython3 NbImage('req.png') .. image:: 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. .. code:: ipython3 NbImage('nvidia.png', width=500) .. image:: introprogpy_59_0.png :width: 500px Ce cours -------- Objectif du cours ~~~~~~~~~~~~~~~~~ - Programmation en Python - Introduction aux principaux outils pour la datascience Ressources ~~~~~~~~~~ - `Manuel de programmation avec Python `__, `antisèche `__ - `Exercices de programmation `__ - `Exercices de datascience `__ - `Exercices de datascience - actuariat `__ - `Ce qu’on demande à des étudiants de savoir faire en deux heures `__ - `Introduction au machine learning `__ - `Jeux d’algorithmes pour les petits et les grands `__ Ressources (2) ~~~~~~~~~~~~~~ - `cette présentation `__ - `machine learning customisé `__ - `Sujets mathématiques avec python `__ - `KMeans `__ - `Réseaux de neurones `__ - `ACP et NMF `__ - `Courbe ROC `__ - `p-value `__ - `distance d’édition `__ 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