Python Data Science

Python est un langage de programmation orienté objet interprété.

Un programme écrit en Python n'est opérationnel que si l'interpréteur est disponible sur la machine (bien que des solutions de compilation existent). En contrepartie, il peut fonctionner dès lors que l'interpréteur est présent, quel que soit le système d'exploitation de la machine. Sous cet angle, on peut le considérer comme un langage multiplateformes.

La syntaxe de Python est simple et claire, elle respecte les standards du domaine. Python propose les principales fonctionnalités de la programmation (actions conditionnelles, boucles, programmation modulaire), y compris les mécanismes de classes (héritage, surcharge des méthodes, polymorphisme). Python se marie très bien avec un cours d'algorithmie.

La distribution Python intègre un grand nombre de librairies. Elles couvrent un large choix de domaines (bases de données, accès réseaux, multimédia, traitements systèmes, compression, multithreading, ...).

Outre les librairies standards, un grand nombre de paquetages (packages) développés par des contributeurs indépendants donne accès à des fonctionnalités spécialisées performantes. Ici également, la liste est particulièrement longue. Ils nous donnent la possibilité de programmer des applications dans quasiment tous les secteurs de l'informatique. Nous nous intéresserons en particulier à la programmation statistique, au machine learning, au big data et à la data science. Python y occupe de plus en plus une place de choix et vient même taquiner R (News KDnuggets, Mai 2015, "R vs Python for Data Science: The Winner is..." ; ou encore DataCamp, Mai 2015, "Choosing R or Python for data analysis? An infographic." ; la messe est dite en 2020, Data Science Tools Popularity, animated, juin 2020)

Ces supports me servent avant tout de tremplin pour les approfondir en Master SISE de notre filière Informatique et Statistique. L'enseignement est alors axé sur la pratique du Machine Learning et le traitement des données complexes (texte - text mining [nlp - natural language processing], image - image mining, vidéo, audio, ...).


Matériel pédagogogique pour le cours - Slides, supports de cours, ouvrages, outils...

Supports

Outils

Le site du projet Python - Le logiciel (setup) et de la documentation sont disponibles en ligne. Le logiciel peut fonctionner sous Windows, MacOS X et Linux. J'ai utilisé la version 3.4.3 de Python pour Windows pour préparer ce cours. Python est libre, complètement gratuit.

Anaconda - Une distribution gratuite (peut-être "la" distribution) pour Python. Elle intègre nativement un grand nombre de packages, notamment ceux consacrés au calcul scientifique et aux statistiques (numpy, scipy, pandas, scikit-learn, etc.). Elle intègre également l'environnement de développement intégré Spyder et le shell IPython. C'est la distribution que nous priviégierons pour le cours.

Spyder. L'environnement de développement intégré (EDI) Spyder. Création et édition d'un programme Python (.py).Lancement d'un programme. La console iPython.

Débogage et profiling. Utilisation du débogueur de Spyder. Points d'arrêt. Suivi des valeurs des variables. Profiling du code sous Spyder. Utilisation de l'instruction %timeit. Utilisation du proflier intégré de Spyder.

Notebooks Jupyter avec Visual Studio Code (VSCode). Création de notebook ".ipynb" avec VS Code pour les projets de machine learning sous Python. Installation automatique des extensions. Choix du noyau (kernel). Possibilité d'utilisation des environnements Anaconda (conda). Exportation d'un notebook sous la forme d'un rapport HTML consultable avec un navigateur. Alternance de codes, résultats, commentaires Markdown pour l'élaboration d'un rapport.

Anaconda Python - Gestion des environnemens (ex. avec Tensorflow / Keras). Principe et intérêt du mécanisme des environnements sur la distribution Anaconda Python. Gestion des versions des packages de machine learning. Accès via Anaconda Navigator. Utilisation du gestionnaire "conda". Pour un environnement spécifique à un projet : création, activation, installation des packages, installation de l'outil de développement (Jupyter Notebook), démarrage du projet.

Slides pour le cours de Programmation Python

Introduction à la programmation Python. Les bases du langage Python. Types de données, affectation, calculs, structures algorithmiques (branchements conditionnels, boucles)

Programmation modulaire sous Python. Procédures et fonctions, découpage des projets en modules.

Collection d'objets sous Python. Création des tuples, listes et dictionnaires. Indices et plages d'indices. Digressions sur les chaînes de caractères.

Les classes sous Python. Caractéristiques d'une classe, champs et méthodes. Instanciation. Mécanismes de classes, héritage, surcharge des méthodes, polymorphisme, variables de classe. Collections d'objets.

Les fichiers sous Python (1). Création, écriture et lecture. Fichers texte brut et CSV.

Les fichiers sous Python (2). Création, écriture et lecture. Fichers JSON et XML.

Les vecteurs sous Python avec le package NumPy. Création et manipulation des vecteurs. Utilisation des structures et fonctions du module NumPy.

Les matrices sous Python avec le package NumPy. Création et manipulation des matrices. Calcul matriciel (inversion de matrice, calcul des valeurs et vecteurs propres, etc.). Chargement et sauvegarde des données tabulaires.

Statistiques sous Python avec le package SciPy. Mise en oeuvre des techniques statistiques inférentielles (tests d'adéquation, tests de normalité, tests de conformité à un standard, tests de comparaisons de populations, tests pour échantillons appariés, mesures d'association...) et exploratoires (essentiellement la classification automatique, k-means, classification ascendante hiérarchique, affichage du dendrogramme)

Graphiques sous Python avec le package Matplotlib. Réalisation de graphiques sous Python. Utilisation de la librairie "Matplotlib". Barplot, line plot, histogrammes, scatter plot, courbe de densité. Manipulation des couleurs et des types de points. Définition des axes et des titres. Enchaînement de graphiques dans la même fenêtre visuelle. Ouverture vers la librairie "Seaborn".

Manipulation des données avec le package Pandas. La structure DataFrame de "pandas" pour Python. Chargement de fichier (CSV ou Excel). Description et inspection de la structure DataFrame. Accès aux données : indices, plages d'indices, filtrage par conditions, projection. Statistiques descriptives. Graphiques.

Machine learning sous Python avec le package scikit-learn. Démarche data mining, analyse prédictive : construction des modèles, leur évaluation, détermination des paramètres "optimaux" pour les algorithmes d'apprentissage, scoring et ciblage, sélection de variables, validation croisée.

Econométrie sous Python avec le package StatsModels. Econométrie, régression linéaire multiple, estimation des paramètres, moindres carrés ordinaires (mco), tests de significativité, diagnostic, analyse des résidus, détection des points atypiques et influents, prédiction ponctuelle et par intervalle.

Python et Big Data. Programmation Python sous Spark via la librairie PySpark. Installation et configuration de Spark. Accès aux fonctionnalités du package PySpark. Démarche de machine learning (analyse prédictive).

Supports et documentation à lire pour le cours de Programmation Python

Apprendre à programmer avec Python, de Gérard Swinnen. Un cours d'introduction à la programmation Python. Toutes les notions de base y sont. Des chapitres que je n'aborderai pas vous permettront d'aller plus loin (ex. bases de données, applications web, interface graphique, etc.). Cet ouvrage m'a beaucoup aidé dans la préparation de mon cours.

Cours de Python, de Patrick Fuchs et Pierre Poulain. Un autre cours d'introduction à la programmation Python, très bien fait également. Là aussi, je m'en suis beaucoup inspiré.

python-simple.com, d'une personne que je n'arrive pas à identifier mais qui a fait un excellent travail. Conçu plutôt comme un aide-mémoire, il est clair, très complet et surtout très bien organisé, on se repère très facilement. Des modules standards et non standards (ex. numpy, scipy, matplotlib, etc.) sont décrits.

Introduction à Python pour la programmation scientifique, de David Cassagne. Ce support convient parfaitement à ce que nous faisons. Les bases y sont, et l'auteur effectue des incursions dans des domaines que nous n'aborderons pas, telle que la création des interfaces graphiques. Raison de plus pour le lire attentivement.

Python - Tutorial, du site tutorialspoint. En anglais mais très accessible et très bien organisés. On y retrouve les principales notions abordés dans notre cours, et plus même (ex. traitement des expréssions régulières, programmation cgi, bases de données, etc.).

Python documentation. On y trouve la documentation de référence du langage. La liste des packages standards est également disponible. Les descriptions sont exhaustives.

Tutoriels

Tutoriels data science pour Python. Mise en oeuvre des algorithmes de machine learning sur des données réelles ou réalistes (analyses factorielles, svm, gradient boosting, régression lasso, régression linéaire multiple, classification automatique, etc.). Exemples de projets de data science menés sous Python (accès à l'API LinkedIn, détection des communautés dans les réseaux sociaux, catégorisation des SMS, etc.). Programmation Big Data (Spark avec PySpark, etc.).

Analyse discriminante linéaire - Projet Python. Présentation d'une librairie Python d'analyse discriminante linéaire prédictive (proc discrim), incluant la sélection de variables pas-à-pas (forward, backward ; proc stepdisc), réalisée par trois étudiants de la L3 IDS (informatique décisionnelle et statistique) de l'Université Lyon 2, promotion 2021 : Aleksandra Kruchinina, Aymeric Delefosse, Mamadou Diallo. Référence de la page GitHub, accès au code source, importation et mise en oeuvre des algorithmes dans les notebooks Python. Possibilité de produire des rapports HTML ou PDF à partir des résultats des calculs.

Dockerisation (Base de données [SQLite] + Web App Python [gradio]). Création d'une image docker contenant une base de données (multi-tables) et une web app Python (basée sur « gradio » pour cette dernière, mais ça aurait pu être Streamlit, Shiny, Dash, Bokeh, etc.). L'enjeu du choix technologique pour la base de données. La contrainte d'installation et de configuration si utilisation d'un serveur de SGBD traditionnel (ex. MySQL, PostgreSQL, etc.). L'intérêt de s'appuyer sur SQLite qui intègre dans un simple fichier l'ensemble des tables. L'accès à la base sous Python passe par l'installation d'un package (pysqlite3 dans cette vidéo). La manipulation de données se fait via des requêtes SQL. La simplicité du dispositif permet de créer très facilement une image docker encapsulant l'ensemble des éléments du programme.

Requêtes SQL sur DataFrame Pandas (pandasql / Python). Utilisation de requêtes SQL pour accéder aux informations d'une base de données sous la forme de tables « DataFrame – Pandas » chargées en mémoire. Utilisation du package « pandasql ». Requêtes simples, requêtes avec jointures. Parallèle avec les fonctions natives du package « Pandas ». Quelques éléments de réflexion quant à l'opportunité de cette solution pour la manipulation des bases de données (volumétrie, performances).

Macros Python pour LibreOffice Calc. Programmation de macros Python pour LibreOffice Calc via la librairie ScriptForge. Installations préalables, configuration de la machine pour que l’interpréteur Python soit visible de la suite bureautique, emplacement spécifique de nos modules Python pour LibreOffice. Ensuite, programmation des macros avec l’accès aux services via ScriptForge, notamment instanciation du service tableur et l’accès en lecture et écriture aux éléments de la feuille de calcul. Quelques exemples de macros, dont une – recueil des résultats de simulations répétées de lancer de pièces de monnaie – s’appuyant sur les capacités de calcul du tableur.

Macros Python pour LibreOffice Calc (2) - Sélections simples et multiples. Programmation de macros Python pour LibreOffice Calc, le tableur de la suite bureautique LibreOffice. Traitement des plages de cellules sélectionnées par l'utilisateur. Identification du type de sélection : une seule plage de cellules ou plusieurs plages non-contigües. Parcours des zones, parcours des cellules à l'intérieur d'une zone. Lecture, écriture et mise en forme des cellules.

Fonctions personnalisées Python pour LibreOffice Calc. Implémentation de fonctions dans des modules Python que l'on peut exploiter sous la forme de fonctions personnalisées dans une feuille de calcul du tableur Calc de la suite bureautique LibreOffice. Création et localisation du module Python dans le dossier "user". Elaboration d'une unité d'import Basic dans un classeur. Programmation en Basic de la fonction d'appel des fonctions Python.

Importation des DLL sous Python. Programmation des DLL (dynamic link library -- librairies de fonctions compilées) sous Lazarus (Pascal Objet). Exportation des fonctions. Importation des DLL dans des applications en Pascal / Lazarus ; puis importaton dans un programme Python. Comparaison des temps d'exécution.

Quelques packages Python - Statistique, Machine Learning et Data Science

NumPy. Le package de référence pour le calcul scientifique, il est sous-jacent à la très grande majorité des librairies dédiés aux statistiques et au machine learning. Nous nous intéresserons surtout aux vecteurs et matrices, et aux fonctions associées.

SciPy, basé sur NumPy, il propose de nombreuses fonctions statistiques que nous exploiterons.

Python Scientific Lecture Notes. Des supports de cours pour NumPy et SciPy.

Scikit-learn. Un package de machine learning évolué. Il propose les techniques exploratoires évoluées (apprentissage supervisé, régression, clustering, réduction de dimension, sélection de modèles, etc.)

Statsmodels. Un package pour la modélisation statistique. Il inclut des outils de régression, le traitement des séries temporelles, des tests statistiques paramétriques et non-paramétriques.

pandas - Python Data Analysis Library. Un package consacré à l'analyse de données. Il est surtout intéressant pour les fonctions de préparation et de manipulation de données.


Ricco Rakotomalala