Galleries de notebooks#

Cette page reprend tous les notebooks disponibles pour ces enseignements et les classes par thèmes. Beaucoup de notebooks se présentent par pairs énoncé - correction car ils servent de supports à des séances de travaux dirigés. Il est préférable de lire l’énoncé d’abord.

Notebooks Coverage

1A - Exposés, exercices pour apprendre la programmation et les algorithmes#

Ces exercices sont utiles pour apprendre la programmation et les algorithmes. Un exercice typique posé lors des entretiens d’embauche est celui sur le calcul de x^nn est entier. D’autres notebooks exposent des notions algorithmiques au travers de courts exemples. Les notebooks s’adressent en premier lieu à ceux qui apprennent à programmer.

_images/tableau_contingence.thumb.png

1A.1 - Calculer un chi 2 sur un tableau de contingence

$chi_2$ et tableau de contingence, avec numpy, avec scipy ou sans.

_images/structures_donnees_conversion.thumb.png

1A.1 - D’une structure de données à l’autre

Ce notebook s’amuse à passer d’une structure de données à une autre, d’une liste à un dictionnaire, d’une liste de liste à un dictionnaire, avec toujours les mêmes données : list, dict, tuple.

_images/histogramme_rapide.thumb.png

1A.1 - Histogramme et dictionnaire

Compter les occurences de nombres dans une liste est assez facile avec un dictionnaire et on peut l’écrire de plusieurs manières différentes.

_images/code_liste_tuple.thumb.png

1A.1 - Liste, tuple, ensemble, dictionnaire, liste chaînée, coût des opérations

Exemples de containers, list, tuple, set, dict.

_images/code_multinomial.thumb.png

1A.1 - Simuler une loi multinomiale

On part d’une loi uniforme et on simule une loi multinomiale.

_images/exercice_echelle.thumb.png

1A.algo - Calculer le nombre de façons de monter une échelle.

Une grenouille monte une échelle. Elle peut faire des bonds de un ou deux barreaux. Combien a-t-elle de façons de monter une échelle de treize barreaux ? Notion abordée : fonction récursive.

_images/exercice_xn.thumb.png

1A.algo - Calculer x**n le plus rapidement possible

C’est un exercice courant lors des entretiens d’embauche. Il faut savoir ce qu’est la dichotomie et la notation binaire d’un nombre.

_images/exercice_morse.thumb.png

1A.algo - Décoder du Morse sans espaces

Le code Morse était utilisé au siècle dernier pour les transmissions. Chaque lettre est représentée par une séquence de points et tirets. Comment décoder ce code ? Notion abordée : graphe, programmation dynamique, trie.

_images/exercice_plus_grande_somme.thumb.png

1A.algo - La sous-séquence de plus grande somme

Ce problème est connu sur le nom de Maximum subarray problem. Notion abordée : programmation dynamique.

_images/recherche_dichotomique.thumb.png

1A.algo - Recherche dichotomique

Recherche dichotomique illustrée. Extrait de Recherche dichotomique, récursive, itérative et le logarithme.

_images/tri_nlnd.thumb.png

1A.algo - Tri plus rapide que prévu

Dans le cas général, le coût d’un algorithme de tri est en $O(n ln n)$. Mais il existe des cas particuliers pour lesquels on peut faire plus court. Par exemple, on suppose que l’ensemble à trier contient plein de fois le même élément.

_images/profiling_example.thumb.png

1A.soft - Exemple de profiling

Profiling et fonction pdf. Le profiling est utilisé pour mesurer le temps que passe un programme dans chaque fonction.

_images/nbheap.thumb.png

Heap

La structure heap ou tas en français est utilisée pour trier. Elle peut également servir à obtenir les k premiers éléments d’une liste.

_images/coloriage_carre.thumb.png

Jeux de coloriage

Le notebook explore quelques problèmes de géométrie dans un carré.

_images/pivot_gauss.thumb.png

Pivot de gauss avec numpy

Etape par étape, le pivote de Gauss implémenté en python puis avec numpy.

2A - Exposés, techniques de data scientiste#

Ces notebooks abordent peu de théorie, en majorité des astuces pour améliorer son quotidien de data scientiste.

_images/seance_5_intro_et_json.thumb.png

2A.i - Données non structurées, programmation fonctionnelle

Une table dans une base de données est déjà le résultat d’une réflexion sur la façon de les représenter.

_images/seance_5_dask.thumb.png

2A.i - Données non structurées, programmation fonctionnelle : dask

dask est une sorte de mélange entre pandas et map/reduce. Le module implémente un sous-ensemble des possibilités de pandas sur des données qui ne tiennent pas nécessairement en mémoire.

_images/dataframe_matrix_speed.thumb.png

2A.i - Mesures de vitesse sur les dataframes

Lire un dataframe avec un itérateur quand on ne connaît pas sa taille, lire un array avec un itérateur.

_images/seance_5_prog_fonctionnelle.thumb.png

2A.i - programmation fonctionnelle

Itérateur, générateur, programmation fonctionnelle, tout pour éviter de charger l’intégralité des données en mémoire et commencer les calculs le plus vite possible.

_images/bayesian_with_python.thumb.png

2A.ml - Bayesian models with Python

Modèles de mélanges de lois. Statistiques bayésiennes. bayespy, scikit-learn.

_images/ml_timeseries_base.thumb.png

2A.ml - Timeseries et machine learning

Série temporelle et prédiction. Module statsmodels.

_images/notebook_convert.thumb.png

2A.soft - Convert a notebook into a document

A couple of tricks to convert notebook such as convert a notebook into RST or HTML, get the notebook name.

_images/jupyter_custom_magics.thumb.png

2A.soft - Custom Magics for Jupyter

The following example shows how to define custom logic to your notebooks. You will find more details here: Defining your own magics. It works pretty simple. I just defined the magic commands %ENSAEl, %%ENSAEb and both %ENSAE, %%ENSAE.

_images/git_notebook.thumb.png

2A.soft - Git depuis le notebook

Git est un logiciel de suivi de source décentralisé qui permet de travailler à plusieurs sur les mêmes fichiers. Aujourd’hui, on ne crée plus de logiciels sans ce type d’outil qui permet de garder l’historique des modifications apportées à un programme. Git a supplanté tous les autres logiciels du même type.

_images/cffi_linear_regression.thumb.png

Optimisation de code avec cffi, numba, cython

L’idée est de recoder une fonction en C. On prend comme exemple la fonction de prédiction de la régression linéaire de scikit-learn et de prévoir le gain de temps qu’on obtient en recodant la fonction dans un langage plus rapide.

_images/timeseries_ssa.thumb.png

Single Spectrum Analysis (SSA)

Illustration de la méthode SSA pour les séries temporelles appliquée à la détection de points aberrants. La méthode est décrite dans Singular Spectrum Analysis: Methodology and Comparison. Voir aussi Automated outlier detection in Singular Spectrum Analysis.

Compétitions de machine learning#

Une compétition de machine learning a été organisé sur plusieurs semaines pour le cours de Python pour un data scientiste. On trouve dans cette section différents matériaux pour débuter et quelques solutions des étudiants.

Année 2016#

L’objectif est de prédire la probabilité de défaut de paiement d’utilisateurs. On dispose de 23 variables et la variable à prédire est binaire. Chaque participant est évalué avec la métrique AUC qui est une métrique standard dans un problème de classification binaire. Les données sont issues de default of credit card clients Data Set et ont été un peu modifiées pour la compétition : apprentissage (X,Y) et test (X). Les étudiants avaient quelques notebooks pour les aider à démarrer. Un notebook présente la solution de l’un d’eux.

_images/td2a_eco_competition_statsdesc.thumb.png

2A.ml - 2016 - Compétition - Importation des données

Une compétition était proposée dans le cadre du cours Python pour un Data Scientist à l’ENSAE. Ce notebook facilite la prise en main des données et étudie les données avec des méthodes de statistiques descriptives.

_images/td2a_eco_competition_comparer_classifieurs.thumb.png

2A.ml - 2016 - Compétition - Préparation des données

Une compétition était proposée dans le cadre du cours Python pour un Data Scientist à l’ENSAE. Ce notebook facilite la prise en main des données et montre comment comparer plusieurs classifieurs avec la courbe ROC.

_images/td2a_eco_competition_modeles_logistiques.thumb.png

2A.ml - 2016 - Compétition ENSAE - Premiers modèles

Une compétition était proposée dans le cadre du cours Python pour un Data Scientist à l’ENSAE. Ce notebook facilite la prise en main des données et propose de mettre en oeuvre un modèle logit.

Année 2017#

L’objectif est de prédire la probabilité de défaut de paiement d’utilisateurs. On dispose de 23 variables et la variable à prédire est binaire. Chaque participant est évalué avec la métrique AUC qui est une métrique standard dans un problème de classification binaire. Les données sont issues de default of credit card clients Data Set et ont été un peu modifiées pour la compétition : apprentissage (X,Y) et test (X). Les étudiants avaient quelques notebooks pour les aider à démarrer. Un notebook présente la solution de l’un d’eux.

_images/prepare_data_2017.thumb.png

2A.ml - 2017 - Préparation des données

Ce notebook explique comment les données de la compétation 2017 ont été préparées. On récupére d’abord les données depuis le site OpenFoodFacts.

Données#

Ces données peuvent être utilisées lors de projets, de TDs, ils montrent comment les récupérer.

_images/deal_flow_espace_vert.thumb.png

Deal flow espaces verts 2018 - 2019

Ce jeu de données est proposé pour la réalisation d’un projet de module python pour partager une fonction de graphe. Un exemple de ce projet est proposé : td2a_plotting.

_images/data_irep.thumb.png

IREP: registre des émissions polluantes

Ce jeu de données est disponible sous le nombre Registre des émissions polluantes.

1A - Examens et solutions#

Le cours d’introduction à l’algorithmie est conclu par une séance de TD noté. Ces notebooks implémentent les solutions.

_images/td_note_2022_rattrapage.thumb.png

1A - Enoncé 15 novembre 2021 - rattrapage

Correction de l’examen du 15 novembre 2021.

_images/td_note_2021.thumb.png

1A - Enoncé 24 novembre 2020

Correction de l’examen du 24 novembre 2020.

_images/td_note_2023.thumb.png

1A - Enoncé 26 octobre 2022

Correction de l’examen du 26 octobre 2022.

_images/td_note_2022_rattrapage2.thumb.png

1A - Enoncé 3 mars 2022- rattrapage

Correction de l’examen du 3 mars 2022. L’objectif est de construire un arbre de façon algorithmique.

_images/td_note_2022.thumb.png

1A - Enoncé 3 novembre 2021

Correction de l’examen du 3 novembre 2021.

_images/interro_rapide_20_minutes_2014_10.thumb.png

1A.e - Correction de l’interrogation écrite du 10 octobre 2014

dictionnaire et coût algorithmique

_images/interro_rapide_20_minutes_2014_11.thumb.png

1A.e - Correction de l’interrogation écrite du 14 novembre 2014

coût algorithmique, calcul de séries mathématiques

_images/interro_rapide_20_minutes_2014_12.thumb.png

1A.e - Correction de l’interrogation écrite du 14 novembre 2014

dictionnaires

_images/interro_rapide_20_minutes_2014_09.thumb.png

1A.e - Correction de l’interrogation écrite du 26 septembre 2014

chaîne de caractères, tri, fonction

_images/interro_rapide_20_minutes_2015_09.thumb.png

1A.e - Correction de l’interrogation écrite du 26 septembre 2015

tests, boucles, fonctions

_images/interro_rapide_20_minutes_2015_11.thumb.png

1A.e - Correction de l’interrogation écrite du 6 novembre 2015

listes et dictionnaires

_images/td_note_2018_1.thumb.png

1A.e - Enoncé 12 décembre 2017 (1)

Correction du premier énoncé de l’examen du 12 décembre 2017. Celui-ci mène à l’implémentation d’un algorithme qui permet de retrouver une fonction $f$ en escalier à partir d’un ensemble de points $(X_i, f(X_i))$.

_images/td_note_2018_2.thumb.png

1A.e - Enoncé 12 décembre 2017 (2)

Correction du premier énoncé de l’examen du 12 décembre 2017. Celui-ci mène à l’implémentation d’un algorithme qui permet d’approximer une fonction $f$ par une fonction en escalier à partir d’un ensemble de points $(X_i, f(X_i))$.

_images/td_note_2020_1.thumb.png

1A.e - Enoncé 22 octobre 2019 (1)

Correction du premier énoncé de l’examen du 22 octobre 2019. L’énoncé propose une façon de disposer des tables rondes dans une salle ronde.

_images/td_note_2020_2.thumb.png

1A.e - Enoncé 22 octobre 2019 (2)

Correction du second énoncé de l’examen du 22 octobre 2019. L’énoncé propose une façon de disposer des tables carrées dans une salle carrée.

_images/td_note_2019_1.thumb.png

1A.e - Enoncé 23 octobre 2018 (1)

Correction du premier énoncé de l’examen du 23 octobre 2018. L’énoncé propose une méthode pour renseigner les valeurs manquantes dans une base de deux variables.

_images/td_note_2019_2.thumb.png

1A.e - Enoncé 23 octobre 2018 (2)

Correction du second énoncé de l’examen du 23 octobre 2018. L’énoncé propose une méthode pour renseigner les valeurs manquantes dans une base de deux variables.

_images/td_note_2015_rattrapage_enonce.thumb.png

1A.e - TD noté 2015 rattrapage (énoncé, écrit et oral)

Questions posées à l’oral autour du jeu 2048 et d’un exercice Google Jam sur le position de carreaux dans un plus grand carré : Problem D. Cut Tiles.

_images/td_note_2016.thumb.png

1A.e - TD noté, 11 décembre 2015

Calcul des intérêt d’un emprunt pour acheter un appartement, stratégie d’investissement.

_images/td_note_2017.thumb.png

1A.e - TD noté, 16 décembre 2016

Régression linéaire avec des variables catégorielles.

_images/td_note_2017_2.thumb.png

1A.e - TD noté, 21 février 2017

Solution du TD noté, celui-ci présente un algorithme pour calculer les coefficients d’une régression quantile et par extension d’une médiane dans un espace à plusieurs dimensions.

_images/td_note_2013_coloriage_correction.thumb.png

1A.e - TD noté, 27 novembre 2012 (coloriage, correction)

Coloriage d’une image, dessin d’une spirale avec matplotlib.

_images/td_note_2013_bout_de_code_coloriage.thumb.png

1A.e - TD noté, 27 novembre 2012 (éléments de code pour le coloriage)

Coloriage d’une image, dessin d’une spirale avec matplotlib : éléments de code données avec l’énoncé.

_images/td_note_2015.thumb.png

1A.e - TD noté, 5 décembre 2014

Parcours de chemins dans un graphe acyclique (arbre).

Exposés#

Ces notebooks ne sont pas des exercices. Ils viennent principalement illuster la partie Découvrir et abordent des problèmes algorithmiques dont quelques solutions sont implémentées.

_images/expose_vigenere.thumb.png

1A.algo - Casser le code de Vigenère

La lettre la plus fréquente en français est la lettre E. Cette information permet de casser le code de César en calculant le décalage entre la lettre la plus fréquente du message codé et E. Mais cette même méthode ne marchera pas pour casser le code de Vigenère. Babbage a contourné cet obstacle en étudiant la fréquence des groupes de trois lettres.

_images/BJKST.thumb.png

2A.algo - Algorithmes de streaming : généralités

Les streams (flux) de données sont aujourd’hui présents dans de nombreux domaines (réseaux sociaux, e-commerce, logs de connexion Internet, etc.). L’analyse rapide et pertinente de ces flux est motivée par l’immensité des données qui ne peuvent souvent pas être stockés (du moins facilement) et dont le traitement serait trop lourd (penser au calcul de l’âge moyen des 1,86 milliards utilisateurs de Facebook pour s’en convaincre). Ce notebook s’intéresse particulièrement à l’algorithme BJKST.

_images/hash_distribution.thumb.png

2A.algo - Hash et distribution

Une fonction de hash a pour propriété statistiques de transformer une distribution quelconque en distribution uniforme. C’est pour cela que beaucoup d’algorithmes utilisent ce type de fonction avant tout traitement pour répartir les données de manières uniformes plutôt que d’utiliser une variable une colonne telle quelle.

_images/expose_einstein_riddle.thumb.png

2A.algo - L’énigme d’Einstein et sa résolution

Résolution de l’énigme L’énigme d’Einstein. Implémentatin d’une solution à base de règles.

_images/ml_rue_paris_parcours.thumb.png

2A.algo - Parcourir les rues de Paris

Algorithme de plus courts chemins dans un graphe. Calcul d’un chemin comparé au calcul de tous les chemins les plus courts.

_images/expose_TSP.thumb.png

2A.algo - Réflexions autour du voyage de commerce (TSP)

Le problème du voyageur de commerce consiste à trouver le plus court chemin passant par toutes les villes. On parle aussi de circuit hamiltonien qui consiste à trouver le plus court chemin passant par tous les noeuds d’un graphe. Le notebook explore quelques solutions approchées et intuitives.

_images/ml_huge_datasets.thumb.png

2A.i - Huge datasets, datasets hiérarchiques

L’exemple Building a huge numpy array using pytables montre créer une grande matrice qui ne tient pourtant pas en mémoire. Il existe des modules qui permet de faire des calcul à partir de données stockées sur disque comme si elles étaient en mémoire.

_images/ml_table_mortalite.thumb.png

2A.i - Table de mortalité dans plusieurs containers

Pas de calcul d’espérence de vie, seulement différentes façons de lire les données d’une table de mortalité.

_images/ml_features_model.thumb.png

2A.ml - Features ou modèle

On se pose toujours la question du modèle de machine learning qui conviendrait le mieux à notre problème. Faut-il choisir un modèle complexe avec des features brutes ou plutôt un modèle simple avec des features retravaillées ?

_images/expose_graphe_et_map_reduce.thumb.png

3A.mr - Graphes et Map Reduce

Les graphes sont des structures de données difficiles à manipuler avec des concepts map/reduce car les données ne sont pas indépendantes et la notion de voisinage est importante. Ce notebook explore ces difficultés.

_images/expose_rwr_recommandation.thumb.png

3A.mr - Random Walk with Restart (système de recommandations)

Si la méthode de factorisation de matrices est la méthode la plus connue pour faire des recommandations, ce n’est pas la seule. L’algorithme Random Walk with Restart s’appuie sur l’exploration locale des noeuds d’un graphe et produit des résultats plus facile à intepréter.

Notebooks des étudiants#

Ces notebooks viennent des étudiants et illustrent certains aspects du cours.

Année 2016-2017#

Une compétition a été lancée lors de la première année. Ce notebook a été proposé comme solution par un étudiant.

_images/solution_2016_credit_clement.thumb.png

2016 - Une solution à la compétition de machine learning 2A

Ce notebook a été proposé par un étudiant pour la compétition organisée pour ce cours : classification binaire.

Année 2017-2018#

Les étudiants contribuent au cours.

_images/dimensions_reduction.thumb.png

Réduction des dimensions

On peut souhaiter réduire de nombre de dimensions d’un jeu de données :

Année 2018-2019#

Notebooks écrits par les étudiants ou écrits pendant les cours.

_images/2018-09-18_sklearn_api.thumb.png

2018-09-18 - API de scikit-learn

Présentation de l’API de scikit-learn et implémentation d’un prédicteur fait maison. On utilise le jeu du Titanic qu’on peut récupérer sur opendatasoft ou awesome-public-datasets.

_images/2018-09-18_rappels_python.thumb.png

2018-09-18 - Rappels sur le langage python

Notebooks écrit durant la séance du 18 septembre 2018 à propos du langage Python.

_images/2018-09-18_rappels_python_pandas_matplotlib.thumb.png

2018-09-18 - Rappels sur pandas et maplotlib

Manipulation de données autour du jeu des passagers du Titanic qu’on peut récupérer sur opendatasoft ou awesome-public-datasets.

_images/2018-09-25_distance_entre_mots.thumb.png

2018-09-25 - Distance entre mots

La distance proposée est naïve puisqu’elle considère uniquement les lettres communes entre deux mots.

_images/2018-10-02_scraping_recuperer_images.thumb.png

2018-10-02 - Scraping, récupérer une image depuis LeMonde

Le notebook suivant récupère le contenu d’une page du journal Le Monde, extrait les urls d’images à l’aide d’une expression régulière puis télécharge les images pour les stocker dans un répertoire. Le notebook extrait les images d’une personnalité.

_images/2018-10-09_ensemble_gradient_boosting.thumb.png

2018-10-09 Ensemble, Gradient, Boosting…

Le noteboook explore quelques particularités des algorithmes d’apprentissage pour expliquer certains résultats numériques. L’algoithme AdaBoost surpondère les exemples sur lequel un modèle fait des erreurs.

Année 2022-2023#

Notebooks pendant les cours.

_images/example_spark.thumb.png

First steps on pyspark

## Initialization

2A - sklearn_ensae_course#

Ces exemples viennent des lectures proposées par Gaël Varoquaux A l”ENSAE : sklearn_ensae_course/notebooks/figures.

_images/00_introduction_machine_learning_and_data.thumb.png

2A.ML101.0: What is machine learning?

Machine Learning is about building programs with tunable parameters that are adjusted automatically so as to improve their behavior by adapting to previously seen data.

_images/01_data_manipulation.thumb.png

2A.ML101.1: Introduction to data manipulation with scientific Python

In this section we’ll go through the basics of the scientific Python stack for data manipulation: using numpy and matplotlib.

_images/02_basic_of_machine_learning_with_scikit-learn.thumb.png

2A.ML101.2: Basic principles of machine learning with scikit-learn

Classification and regression.

_images/03_supervised_classification.thumb.png

2A.ML101.3: Supervised Learning: Classification of Handwritten Digits

In this section we’ll apply scikit-learn to the classification of handwritten digits. This will go a bit beyond the iris classification we saw before: we’ll discuss some of the metrics which can be used in evaluating the effectiveness of a classification model.

_images/04_supervised_regression.thumb.png

2A.ML101.4: Supervised Learning: Regression

Here we’ll do a short example of a regression problem: learning a continuous value from a set of features.

_images/05_measuring_prediction_performance.thumb.png

2A.ML101.5: Measuring prediction performance

Source: Course on machine learning with scikit-learn by Gaël Varoquaux

_images/06_unsupervised_dimreduction.thumb.png

2A.ML101.6: Unsupervised Learning: Dimensionality Reduction and Visualization

Unsupervised learning is interested in situations in which X is available, but not y: data without labels. A typical use case is to find hiden structure in the data.

_images/07_application_to_face_recognition.thumb.png

2A.ML101.7: Example from Image Processing

Here we’ll take a look at a simple facial recognition example.

_images/08_validation_and_learning_curves.thumb.png

2A.ML101.8: Parameter selection, Validation & Testing

The content in this section is adapted from Andrew Ng’s excellent Coursera course.

1A - Travaux dirigés - Introductions#

Tous les énoncés et les corrections des séances d’introduction à la programmation et aux algorithmes.

_images/td1a_cenonce_session1.thumb.png

1A.0 - Premiers pas en Python

Questions très simples pour ceux qui savent coder, quelques éléments principaux du langage Python pour les autres.

_images/td1a_correction_session1.thumb.png

1A.0 - Premiers pas en Python (correction)

La partie 1 ne nécessite pas de correction.

_images/pp_exo_deviner_un_nombre.thumb.png

1A.1 - Deviner un nombre aléatoire

Notebook sur un des premiers programmes qu’on écrit quand on apprend à programmer. Une boucle, un test.

_images/pp_exo_deviner_un_nombre_correction.thumb.png

1A.1 - Deviner un nombre aléatoire (correction)

On reprend la fonction introduite dans l’énoncé et qui permet de saisir un nombre.

_images/td1a_cenonce_session3.thumb.png

1A.1 - Dictionnaires, fonctions, code de Vigenère

Le dictionnaire est une structure de données très utilisée. Elle est illustrée pour un problème de décryptage.

_images/td1a_correction_session3.thumb.png

1A.1 - Dictionnaires, fonctions, code de Vigenère (correction)

Le notebook ne fait que crypter et décrypter un message sachant le code connu. Casser le code requiert quelques astuces décrites dnas ce notebook : casser le code de Vigenère.

_images/integrale_rectangle.thumb.png

1A.1 - Intégrale et la méthode des rectangles

Approximation du calcul d’une intégrale par la méthode des rectangles

_images/integrale_rectangle_correction.thumb.png

1A.1 - Intégrale et la méthode des rectangles - correction

Approximation du calcul d’une intégrale par la méthode des rectangles.

_images/td1a_pyramide_bigarree.thumb.png

1A.1 - Tracer une pyramide bigarrée

Cet exercice est inspirée de l’article 2015-04-07 Motif, optimisation, biodiversité. Il s’agit de dessiner un motif.

_images/td1a_pyramide_bigarree_correction.thumb.png

1A.1 - Tracer une pyramide bigarrée - correction

Cet exercice est inspirée de l’article 2015-04-07 Motif, optimisation, biodiversité. Il s’agit de dessiner un motif. Correction.

_images/td1a_cenonce_session2.thumb.png

1A.1 - Variables, boucles, tests

Répétitions de code, exécuter une partie plutôt qu’une autre.

_images/td1a_correction_session2.thumb.png

1A.1 - Variables, boucles, tests (correction)

Boucles, tests, correction.

_images/j2048.thumb.png

1A.2 - 2048 - stratégie gagnante

Le jeu 2048 est assez simple et fut populaire en son temps. Comment imaginer une stratégie qui dépasser le 2048 ?

_images/j2048_correction.thumb.png

1A.2 - 2048 - stratégie gagnante - correction

Le jeu 2048 est assez simple et fut populaire en son temps. Comment imaginer une stratégie qui dépasser le 2048 ?

_images/td1a_cenonce_session6.thumb.png

1A.2 - Classes, héritage

L’héritage permet de réécrire certaines parties du code sans pour autant enlever les anciennes versions toujours utilisées.

_images/td1a_correction_session6.thumb.png

1A.2 - Classes, héritage (correction)

Correction.

_images/td1a_cenonce_session5.thumb.png

1A.2 - Classes, méthodes, attributs, opérateurs et carré magique

Les classes proposent une façon différente de structurer un programme informatique. Pas indispensable mais souvent élégant.

_images/td1a_correction_session5.thumb.png

1A.2 - Classes, méthodes, attributs, opérateurs et carré magique (correction)

Correction.

_images/texte_langue.thumb.png

1A.2 - Deviner la langue d’un texte

Comment deviner la langue d’un texte sans savoir lire la langue ? Ce notebook aborde les dictionnaires, les fichiers et les graphiques.

_images/texte_langue_correction.thumb.png

1A.2 - Deviner la langue d’un texte (correction)

Calcul d’un score pour détecter la langue d’un texte. Ce notebook aborde les dictionnaires, les fichiers et les graphiques (correction).

_images/td1a_cenonce_session4.thumb.png

1A.2 - Modules, fichiers, expressions régulières

Le langage Python est défini par un ensemble de règle, une grammaire. Seul, il n’est bon qu’à faire des calculs. Les modules sont des collections de fonctionnalités pour interagir avec des capteurs ou des écrans ou pour faire des calculs plus rapides ou plus complexes.

_images/td1a_correction_session4.thumb.png

1A.2 - Modules, fichiers, expressions régulières (correction)

Correction.

_images/matrix_dictionary.thumb.png

Produit matriciel avec une matrice creuse

Les dictionnaires sont une façon assez de représenter les matrices creuses en ne conservant que les coefficients non nuls. Comment écrire alors le produit matriciel ?

1A - Travaux dirigés autour des algorithmes#

Problèmes de graphes, d’optimisation, ces notebooks traitent principalement d’algorithmes.

_images/td1a_cenonce_session8.thumb.png

1A.algo - Arbre et Trie

Le mot trie est anglais et se prononce traïlle. Il sera défini plus bas. Cette structure de données est très adaptée à la recherche d’un mot dans une liste ordonnée. C’est aussi une histoire de dictionnaires imbriqués.

_images/td1a_correction_session8.thumb.png

1A.algo - Arbre et Trie (correction)

Correction.

_images/BJKST_enonce.thumb.png

1A.algo - BJKST - calculer le nombre d’éléments distincts

Comment calculer le nombre d’éléments distincts d’un ensemble de données quand celui-ci est trop grand pour tenir en mémoire. C’est ce que fait l’algorithme BJKST.

_images/graph4exos.thumb.png

1A.algo - Des problèmes de graphes

Découvrir les graphes avec des problèmes pas trop compliqués. Composantes connexes, plus court chemin et…

_images/td1a_cenonce_session7_edition.thumb.png

1A.algo - La distance d’édition

La distance d’édition ou de Levenshtein calcule une distance entre deux séquences. L’algorithme utilise la programmation dynamique.

_images/td1a_correction_session7_edition.thumb.png

1A.algo - La distance d’édition (correction)

Correction.

_images/td1a_cenonce_session9.thumb.png

1A.algo - Optimisation sous contrainte

L’optimisation sous contrainte est un problème résolu. Ce notebook utilise une librairie externe et la compare avec l’algorithme Arrow-Hurwicz qu’il faudra implémenter. Plus de précision dans cet article Damped Arrow-Hurwicz algorithm for sphere packing.

_images/td1a_correction_session9.thumb.png

1A.algo - Optimisation sous contrainte (correction)

Un peu plus de détails dans cet article : Damped Arrow-Hurwicz algorithm for sphere packing.

_images/td1a_cenonce_session8_wikiroot.thumb.png

1A.algo - Parcours dans un graphe (wikipédia)

Parcourir le graphe formé par les liens wikipédia… Le notebook explore également le web scrapping.

_images/td1a_correction_session8_wikiroot.thumb.png

1A.algo - Parcours dans un graphe (wikipédia) - correction

Correction du notebook du même titre. On part d’une page, on explore les liens des pages liées à la première et on continue. On utilise le module beautifulsoup4 (web scrapping pour parser les pages.

_images/graph1exo_parcours.thumb.png

1A.algo - Parcours de graphe

On veut compter les arcs, les noeuds d’un graphe. On utilise également les classes.

_images/graph1exo_parcours_correction.thumb.png

1A.algo - Parcours de graphe - correction

Algorithme assez simple sur les graphes (correction).

_images/td1a_cenonce_session7.thumb.png

1A.algo - Programmation dynamique et plus court chemin

La programmation dynamique est une façon des calculs qui revient dans beaucoup d’algorithmes. Elle s’applique dès que ceux-ci peuvent s’écrire de façon récurrente.

_images/td1a_correction_session7.thumb.png

1A.algo - Programmation dynamique et plus court chemin (correction)

Correction.

_images/td1a_quicksort.thumb.png

1A.algo - Quicksort

Cet énoncé a pour objectif de présenter l’algorithme de tri quicksort qui permet de trier par ordre croissant un ensemble d’éléments (ici des chaînes de caractères) avec un coût moyen.

_images/graph_spectral_clustering.thumb.png

1A.algo - Spectral Clustering

On veut couper un graphe en deux en coupant le moindre d’arcs possible. C’est un algorithme de clustering.

_images/graph_spectral_clustering_correction.thumb.png

1A.algo - Spectral Clustering - correction

On veut couper un graphe en deux en coupant le moindre d’arcs possible. C’est un algorithme de clustering. Correction du notebook qui contient l’énoncé.

_images/td1a_cenonce_session4_5_jaccard.thumb.png

1A.algo - distance de Jaccard (dictionnaires)

Le notebook part du problème qui consiste à construire une distance entre deux chaînes de caractères en partant d’une idée naïve pour aller jusque la distance d’édition. distance de Jaccard.

_images/td1a_correction_session4_5_jaccard.thumb.png

1A.algo - distance de Jaccard (dictionnaires) - correction

De la distance de Jaccard à la distance de Levenshtein.

_images/td1a_sobel.thumb.png

1A.algo - filtre de Sobel

Le filtre de Sobel est utilisé pour calculer des gradients dans une image. L’image ainsi filtrée révèle les forts contrastes.

_images/td1a_sobel_correction.thumb.png

1A.algo - filtre de Sobel - correction

Correction.

_images/td1a_plus_grande_somme.thumb.png

1A.algo - la plus grande sous-séquence croissante

Un exercice classique : trouver la plus grande sous-séquence croissante. Celle-ci n’est pas nécessairement un bloc contigü de la liste initiale mais les entiers apparaissent dans le même ordre.

_images/td1a_plus_grande_somme_correction.thumb.png

1A.algo - la plus grande sous-séquence croissante - correction

Un exercice classique : trouver la plus grande sous-séquence croissante. Celle-ci n’est pas nécessairement un bloc contigü de la liste initiale mais les entiers apparaissent dans le même ordre.

_images/td1a_quicksort_correction.thumb.png

1A.algo - quicksort - correction

Implémentation du quicksort façon graphe.

1A - Travaux dirigés autour des données#

Ces notebooks s’intéresse principalement à ceux qui découvre la manipulation des données avec des dataframes.

_images/td1a_cenonce_session_10.thumb.png

1A.data - DataFrame et Matrice

Les DataFrame se sont imposés pour manipuler les données avec le module pandas. Le module va de la manipulation des données jusqu’au calcul d’une régresion linéaire.

_images/td1a_correction_session_10.thumb.png

1A.data - DataFrame et Matrice (correction)

Correction.

_images/decorrelation.thumb.png

1A.data - Décorrélation de variables aléatoires

On construit des variables corrélées gaussiennes et on cherche à construire des variables décorrélées en utilisant le calcul matriciel.

_images/decorrelation_correction.thumb.png

1A.data - Décorrélation de variables aléatoires - correction

On construit des variables corrélées gaussiennes et on cherche à construire des variables décorrélées en utilisant le calcul matriciel. (correction)

_images/td1a_cenonce_session_12_plot.thumb.png

1A.data - Visualisation des données

Les tableaux et les graphes sont deux outils incontournables des statisticiens. Petite revue des graphes.

_images/td1a_cenonce_session_12_carte.thumb.png

1A.data - Visualisation des données - cartes

Les cartes sont probablement les graphes les plus longs à mettre en place. Si les coordonnées longitude lattitude sont les plus utilisées, il est possible de les considérer comme des coordonnées carthésiennes sur une grande surface (sphérique). Il faut passer par une projection spécifique dans le plan. Il faut également ajouter des repères géographiques pour lire efficacement une carte comme les frontières des pays, les rivières… Tout ça prend du temps.

_images/td1a_cenonce_session_12_js.thumb.png

1A.data - Visualisation des données - graphes interactifs

Les graphiques interactif permettent d’afficher plus d’information sur le même graphe mais comme le lecteur ne peut déchiffrer des graphes trop chargés, il interagit pour restreindre sa lecture à une zone précise. Le zoom est indispensable pour visualiser des données très localisées sur de grandes zones géographiques mais ce n’est pas la seule.

_images/td1a_correction_session_12.thumb.png

1A.data - visualisation des données - correction

Correction.

td1a_home#

_images/2021_2048_classe.thumb.png

2048 et les classes

Le jeu 2048 est assez addictif mais peut-on imaginer une stratégie qui joue à notre place est maximise le gain… Le jeu se joue sur une matrice 4x4.

_images/2021_tsp.thumb.png

Algo - Aparté sur le voyageur de commerce

Le voyageur de commerce ou Travelling Salesman Problem en anglais est le problème NP-complet emblématique : il n’existe pas d’algorithme capable de trouver la solution optimale en temps polynômial. La seule option est de parcourir toutes les configurations pour trouver la meilleure. Ce notebook ne fait qu’aborder le problème.

_images/2020_surface.thumb.png

Algo - Calculs de surface et autres calculs

C’est l’histoire d’une boucle, puis d’une autre, puis enfin d’un couple de boucles, voire d’un triplé.

_images/2020_graph.thumb.png

Algo - Graphe - Composantes connexes

Les graphes sont un outil très utilisé pour modéliser un ensemble de relations entre personnes, entre produits, entre consommateurs. Les utilisations sont nombreuses, systèmes de recommandations, modélisation de la propagation d’une épidémie, modélisation de flux, plus court chemin dans un graphe.

_images/2020_ordonnancement.thumb.png

Algo - Problème d’ordonnancement

Un problème d’ordonnancement est un problème dans lequel il faut déterminer le meilleur moment de démarrer un travail, une tâche alors que celles-ci ont des durées bien précises et dépendent les unes des autres.

_images/2020_tsp.thumb.png

Algo - TSP - Traveling Salesman Problem

TSP, Traveling Salesman Problem ou Problème du Voyageur de Commerce est un problème classique. Il s’agit de trouver le plus court chemin passant par des villes en supposant qu’il existe une route entre chaque paire de villes.

_images/2020_edit.thumb.png

Algo - distance d’édiction

La distance d’édition ou distance de Levenshtein permet de calculer une distance entre deux mots et par extension entre deux séquences.

_images/2021_random_graph.thumb.png

Algo - graphes aléatoires

Comment générer un graphe aléatoire… Générer une séquence de nombres aléatoires indépendants est un problème connu et plutôt bien résolu. Générer une structure aléatoire comme une graphe est aussi facile. En revanche, générer un graphe aléatoire vérifiant une propriété - la distribution des degrés - n’est pas aussi simple qu’anticipé.

_images/2020_suffix.thumb.png

Algo - jeux de dictionnaires, plus grand suffixe commun

Les dictionnaires sont très utilisés pour associer des choses entre elles, surtout quand ces choses ne sont pas entières. Le notebook montre l’intérêt de perdre un peu de temps pour transformer les données et rendre un calcul plus rapide.

_images/2020_topk.thumb.png

Algo - les k premiers éléments

Rechercher les k premiers éléments est un exercice classique d’algorithmie, souvent appelé *top-k*et qu’on peut résoudre à l’aide d’un algorithme de sélection. C’est très utile en machine learning pour retourner les 3, 4, ou 5 premiers résultats d’un modèle prédictif.

_images/2020_covid.thumb.png

Algo - simulation COVID

Ou comment utiliser les mathématiques pour comprendre la propagation de l’épidémie.

_images/2021_editdist.thumb.png

Distance entre deux mots de même longueur et tests unitaires

Calculer une distance entre deux mots n’est pas le plus intuitif des problèmes. Dans ce notebook, on se permet de tâtonner pour faire évoluer quelques idées autour du sujet. C’est l’occasion aussi de montrer à quoi servent les tests unitaires et pourquoi ils sont utiles lorsqu’on tâtonne.

_images/2022_profiling.thumb.png

Profiling, application à la convolution

Une convolution est une opération très fréquente en deep learning lorsqu’il s’agit d’interpréter des images. Elle est aussi coûteuse et c’est pour ça que beaucoup essayent d’accélérer son calcul à défaut de s’en passer.

_images/2022_hash.thumb.png

Répartition, table de hashage

Il est facile de répartir des élèves en quatre groupe après les avoir triés par ordre croissant, les élèves dont les noms de famille commencent par A dans le premier groupe et ainsi de suite… Cette répartition peut poser un problème éthique parfois. On souhaite écrire une fonction de répartition qui affecte les étudiants dans un groupe parmi quatre :

_images/2021_covid_pickle.thumb.png

Sérialisation, pickle, COVID

Ce notebook aborde les sujets évoqués dans le titre.

_images/2020_rest.thumb.png

Tech - API REST pour deep learning avec FastAPI

Certains sites web actuels font appels à de nombreux modèles de machine learning. Un moteur de recherche affiche beaucoup de résultats différents, des suggestions, des résultats de recherches, des recherches associées, des informations, des résultats locaux. Chacun d’entre eux fait appel à un ou plusieurs modèles de machine learning plus ou moins complexes. Le modèle classique d’un site web, ce sont deux machines : * le client : la machine de celui qui consiste le site web * le server : la machine qui retourne la page pour celui qui consiste le site web

_images/2020_json_xml.thumb.png

Tech - JSON - XML

Transmettre l’information d’une machine à une autre, d’un logiciel à un autre, d’une base de données à une autre est un problème récurrent. Le format le plus simple pour des données est le format csv. Ca marche bien pour les tables mais cela ne permet de transmettre aisément des données non structurées.

_images/2022_serialisation.thumb.png

Tech - Sérialisation

La sérialisation répond à un problème simple : comment échanger des données complexes autres que des tableaux ?

_images/2020_numpy.thumb.png

Tech - calcul matriciel avec numpy

numpy est la librairie incontournable pour faire des calculs en Python. Ces fonctionnalités sont disponibles dans tous les langages et utilisent les optimisations processeurs. Il est hautement improbable d’écrire un code aussi rapide sans l’utiliser.

_images/2020_carte.thumb.png

Tech - carte

Faire une carte, c’est toujours compliqué. C’est simple jusqu’à ce qu’on s’aperçoive qu’on doit récupérer la description des zones administratives d’un pays, fournies parfois dans des coordonnées autres que longitude et latitude. Quelques modules utiles :

_images/2020_regex.thumb.png

Tech - expressions régulières

Les expressions régulières sont utilisées pour rechercher des motifs dans un texte tel que des mots, des dates, des nombres…

_images/2020_pandas.thumb.png

Tech - manipulation de données avec pandas

pandas est la librairie incontournable pour manipuler les données. Elle permet de manipuler aussi bien les données sous forme de tables qu’elle peut récupérer ou exporter en différents formats. Elle permet également de créer facilement des graphes.

_images/2020_profile.thumb.png

Tech - profiling

Le profilage de code ou profiling en anglais signifie qu’on mesure le temps passé dans chaque partie d’un programme pour en découvrir les parties les plus coûteuses et les améliorer. On souhaite toujours accélérer un programme trop lent, le profiling permet de savoir sur quelles parties se concentrer.

_images/2022_unit_test.thumb.png

Test unitaires

Les tests unitaires sont l’élément clé pour créer un programme fiable. Il est impensable de s’en passer. Un test unitaire est une fonction qui s’assure qu’une autre fonction retourne le résultat souhaité pour les mêmes entrées. Ils sont présents dans tous les langages.

_images/2022_classes.thumb.png

Un bref aperçu des classes

Les classes ou la programmation objet est une façon différente d’écrire et d’organiser un programme informatique. Cela ne permet rien de plus que les fonctions mais ça permet de le faire souvent de façon plus élégante.

1A - Travaux dirigés autour des pratiques logiciels#

Il est difficile de construire un logiciel qui tiennent la route lorsqu’il est conçu à plusieurs, que certains des auteurs ne sont plus là. Ces notebooks sont un guide des bonnes pratiques.

_images/td1a_cython_edit.thumb.png

1A.soft - Calcul numérique et Cython

Python est très lent. Il est possible d’écrire certains parties en C mais le dialogue entre les deux langages est fastidieux. Cython propose un mélange de C et Python qui accélère la conception.

_images/td1a_cython_edit_correction.thumb.png

1A.soft - Calcul numérique et Cython - correction

_images/td1a_sql.thumb.png

1A.soft - Notions de SQL

Premiers pas avec le langage SQL.

_images/td1a_sql_correction.thumb.png

1A.soft - Notions de SQL - correction

Correction des exercices du premier notebooks relié au SQL.

_images/td1a_unit_test_ci.thumb.png

1A.soft - Tests unitaires, setup et ingéniérie logicielle

On vérifie toujours qu’un code fonctionne quand on l’écrit mais cela ne veut pas dire qu’il continuera à fonctionner à l’avenir. La robustesse d’un code vient de tout ce qu’on fait autour pour s’assurer qu’il continue d’exécuter correctement.

2A - Travaux dirigés - Data Scientiste / Economiste#

Enoncés communs aux data scientistes et aux économistes pour le cours Python pour un Data Scientist / Economiste.

_images/td2a_cenonce_session_2A.thumb.png

2A.data - Calcul Matriciel, Optimisation

numpy arrays sont la première chose à considérer pour accélérer un algorithme. Les matrices sont présentes dans la plupart des algorithmes et numpy optimise les opérations qui s’y rapporte. Ce notebook est un parcours en diagonal.

_images/td2a_correction_session_2A.thumb.png

2A.data - Calcul Matriciel, Optimisation - correction

Calcul matriciel (numpy.

_images/td2a_cenonce_session_1.thumb.png

2A.data - DataFrame et Graphes

Les Dataframe se sont imposés pour manipuler les données. Avec cette façon de représenter les données, associée à des méthodes couramment utilisées, ce qu’on faisait en une ou deux boucles se fait maintenant en une seule fonction. Le module pandas est très utilisé, il existe de nombreux tutoriels, ou page de recettes pour les usages les plus fréquents : cookbook.

_images/td2a_correction_session_1.thumb.png

2A.data - DataFrame et Graphes - correction

Opérations standards sur les dataframes (pandas et les matrices (numpy. Graphiques avec matplotlib.

_images/td2a_visualisation.thumb.png

2A.data - Matplotlib

Tutoriel sur matplotlib.

_images/pandas_iterator.thumb.png

2A.data - Pandas et itérateurs

pandas a tendance a prendre beaucoup d’espace mémoire pour charger les données, environ trois fois plus que sa taille sur disque. Quand la mémoire n’est pas assez grande, que peut-on faire ?

_images/pandas_iterator_correction.thumb.png

2A.data - Pandas et itérateurs - correction

pandas a tendance a prendre beaucoup d’espace mémoire pour charger les données, environ trois fois plus que sa taille sur disque. Quand la mémoire n’est pas assez grande, que peut-on faire ?

_images/td2a_cenonce_session_5_donnees_non_structurees_et_programmation_fonctionnelle.thumb.png

2A.i - Données non structurées et programmation fonctionnelle

Calculs de moyennes et autres statistiques sur une base twitter au format JSON avec de la programmation fonctionnelle (module cytoolz.

_images/td2a_correction_session_5_donnees_non_structurees_et_programmation_fonctionnelle_corrige.thumb.png

2A.i - Données non structurées, programmation fonctionnelle - correction

Calculs de moyennes et autres statistiques sur une base twitter au format JSON avec de la programmation fonctionnelle (module cytoolz.

_images/td2a_cenonce_session_2D_jupyter.thumb.png

2A.i - Jupyter et calcul distribué

Jupyter a été découpé en plusieurs extensions comme ipyparallel qui permet de distribuer un calcul sur plusieurs processus. Ce notebook montre comment faire sur une seule machine.

_images/td2a_cenonce_session_5.thumb.png

2A.i - Modèle relationnel, analyse d’incidents dans le transport aérien

Base de données relationnelles, logique SQL.

_images/td2a_correction_session_5.thumb.png

2A.i - Modèle relationnel, analyse d’incidents dans le transport aérien - correction

Manipulation de données avec les dataframes, jointures. Correction inachevée…

_images/td2a_cenonce_session_2D_parallelisation_local.thumb.png

2A.i - Parallélisation locale (énoncé)

Parallélisation avec joblib.

_images/td2a_progressbar.thumb.png

2A.i - ProgressBar et fusion de random forest - énoncé

L’idée de ce notebook n’est pas de se servir de faire du machine learning mais de modifier la fonction fit pour afficher une barre d’avancement dans le notebook. Lorsque les affichages (print) sont trop nombreux et prennent tout l’écran, une barre de défilement est une solution pratique et efficace. On applique cela à un assemblage de random forest.

_images/td2a_bigdata_memory.thumb.png

2A.i - Stratégies et grandes matrices en mémoire

Eléments de réflexion autour des jeux de données trop grands pour tenir en mémoire.

_images/td2a_cenonce_session_2E.thumb.png

2A.i - Sérialisation

Charger un dataframe depuis un fichier texte prend du temps car il faut convertir le texte en nombre. La sérialisation permet de copier le contenu depuis la mémoire vers le disque. A la prochaine utilisation, Python a juste besoin de recopier le bloc depuis le disque et de le copier sans trop le modifier en mémoire. Sérialiser un dataframe permet de le récupérer beaucoup plus vite.

_images/td2a_correction_session_2E.thumb.png

2A.i - Sérialisation - correction

Sérialisation d’objets, en particulier de dataframes. Mesures de vitesse.

_images/td2a_ml_text_features.thumb.png

2A.ml - Classification binaire avec features textuelles

Ce notebook propose de voir comment incorporer des features pour voir l’amélioration des performances sur une classification binaire.

_images/td2a_ml_text_features_correction.thumb.png

2A.ml - Classification binaire avec features textuelles - correction

Ce notebook propose de voir comment incorporer des features pour voir l’amélioration des performances sur une classification binaire.

_images/ml_crypted_data.thumb.png

2A.ml - Machine Learning et données cryptées

Comment faire du machine learning avec des données cryptées ? Ce notebook propose d’en montrer un principe exposé dans CryptoNets: Applying Neural Networks to Encrypted Data with High Throughput and Accuracy.

_images/ml_crypted_data_correction.thumb.png

2A.ml - Machine Learning et données cryptées - correction

Comment faire du machine learning avec des données cryptées ? Ce notebook propose d’en montrer un principe exposés CryptoNets: Applying Neural Networks to Encrypted Data with High Throughput and Accuracy. Correction.

_images/td2a_some_nlp.thumb.png

2A.ml - Texte et machine learning

Revue de méthodes de word embedding statistiques (~ NLP ou comment transformer une information textuelle en vecteurs dans un espace vectoriel (features) ? Deux exercices sont ajoutés à la fin.

_images/td2a_correction_session_2C.thumb.png

2A.soft - IPython et commandes magiques - correction

Aperçu des commandes magiques pour automatiser un peu plus les tâches courantes.

_images/td2a_cenonce_session_2C.thumb.png

2A.soft - Jupyter et commandes magiques

Pour être inventif, il faut être un peu paresseux. Cela explique parfois la syntaxe peu compréhensible mais réduite de certaines instructions. Cela explique sans doute aussi que Jupyter offre la possibilité de définir des commandes magiques qu’on peut interpréter comme des raccourcis. % pour une ligne, %% pour une cellule.

2A - Travaux dirigés - Algorithmes#

Enoncés algorithmiques pour le cours Python pour un Data Scientist / Economiste.

_images/knn_high_dimension.thumb.png

2A.algo - Plus proches voisins en grande dimension

La méthodes des plus proches voisins est un algorithme assez simple. Que se passe-t-il quand la dimension de l’espace des features augmente ? Comment y remédier ? Le profiling memory_profiler ou cprofile sont des outils utiles pour savoir où le temps est perdu.

_images/knn_high_dimension_correction.thumb.png

2A.algo - Plus proches voisins en grande dimension - correction

La méthodes des plus proches voisins est un algorithme assez simple qui devient très lent en grande dimension. Ce notebook propose un moyen d’aller plus vite (ACP) mais en perdant un peu en performance.

_images/td2a_correction_session_6A.thumb.png

2A.algo - Puzzles algorithmes (1) - correction

Eléments de réponses pour des puzzles algorithmiques tirés de Google Code Jam et autres sites équivalents, produits scalaires, problèmes de recouvrements, soudoyer les prisonniers, découpage stratifié.

_images/td2a_correction_session_6B.thumb.png

2A.algo - Puzzles algorithmes (2) - correction

Eléments de réponses pour des puzzles algorithmiques tirés de Google Code Jam et autres sites équivalents, nombres premiers, écoulement d’eau, séparation des bagarreurs, formation de binômes.

_images/td2a_cenonce_session_6A.thumb.png

2A.algo - Puzzles algorithmiques (1)

Puzzles algorithmiques tirés de Google Code Jam et autres sites équivalents, produits scalaires, problèmes de recouvrements, soudoyer les prisonniers, découpage stratifié.

_images/td2a_cenonce_session_6B.thumb.png

2A.algo - Puzzles algorithmiques (2)

Puzzles algorithmiques tirés de Google Code Jam et autres sites équivalents, nombres premiers, écoulement d’eau, séparation des bagarreurs, formation de binômes.

_images/gentry_integer_encryption.thumb.png

Cryptage homomorphic de Craig Gentry

Un cryptage homomorphe préserve l’addition et la multiplication : une addition sur des nombres cryptés est égale au résultat crypté de l’addition sur les nombres non cryptées. Craig Gentry a proposé un tel cryptage dans son article Fully Homomorphic Encryption over the Integers. Le système de cryptage encrypte et décrypte des bits (0 ou 1).

_images/gentry_integer_encryption_correction.thumb.png

Cryptage homomorphic de Craig Gentry - correction

Un cryptage homomorphe préserve l’addition et la multiplication : une addition sur des nombres cryptés est égale au résultat crypté de l’addition sur les nombres non cryptées. Craig Gentry a proposé un tel cryptage dans son article Fully Homomorphic Encryption over the Integers. Le système de cryptage encrypte et décrypte des bits (0 ou 1). Correction.

2A - Travaux dirigés - Economistes (1)#

Enoncés plutôt dédiés aux économistes pour le cours Python pour un Data Scientist / Economiste.

_images/TD2A_eco_les_API.thumb.png

2A.eco - API, API REST

Petite revue d’API REST.

_images/TD2A_eco_debuter_flask.thumb.png

2A.eco - Débuter avec Flask

Pour aller vite, Flask est un framework de développement web en Python. Il en existe d’autres, le plus connu d’entre eux est Django. Ce notebook la création d’un site web à usage principalement privé.

_images/TD2A_eco_API_SNCF.thumb.png

2A.eco - Exercice API SNCF

Manipulation d’une API REST, celle de la SNCF est prise comme exemple. Exercices.

_images/TD2A_eco_API_SNCF_corrige.thumb.png

2A.eco - Exercice API SNCF corrigé

Manipulation d’une API REST, celle de la SNCF est prise comme exemple. Correction d’exercices.

_images/td2a_eco_exercice_de_fin_de_seance.thumb.png

2A.eco - Exercice Python - Eco Séance 2

Voici un petit exercice qui nous permet de voir à peu près toutes les opérations standards sur les dataframes avec un jeu de données issus des élections.

_images/td2a_eco_exercices_de_manipulation_de_donnees.thumb.png

2A.eco - Mise en pratique des séances 1 et 2 - Utilisation de pandas et visualisation

Trois exercices pour manipuler les donner, manipulation de texte, données vélib.

_images/td2a_eco_exercices_de_manipulation_de_donnees_correction_a.thumb.png

2A.eco - Mise en pratique des séances 1 et 2 - Utilisation de pandas et visualisation - correction

Correction d’un exercice sur la manipulation des données.

_images/td2a_eco_exercices_de_manipulation_de_donnees_correction_b.thumb.png

2A.eco - Mise en pratique des séances 1 et 2 - Utilisation de pandas et visualisation - correction

Correction de l’exercice 2 et manipulations classiques de texte.

_images/td2a_eco_exercices_de_manipulation_de_donnees_correction_c.thumb.png

2A.eco - Mise en pratique des séances 1 et 2 - Utilisation de pandas et visualisation - correction

Correction de l’exercice 3 et disponibilités des velibs.

_images/td2a_eco_sql.thumb.png

2A.eco - Python et la logique SQL

SQL permet de créer des tables, de rechercher, d’ajouter, de modifier ou de supprimer des données dans les bases de données. Un peu ce que vous ferez bientôt tous les jours. C’est un langage de management de données, pas de nettoyage, d’analyse ou de statistiques avancées.

_images/td2a_eco_sql_correction.thumb.png

2A.eco - Python et la logique SQL - correction

Correction d’exercices sur SQL.

_images/td2_eco_rappels_1a.thumb.png

2A.eco - Rappel de ce que vous savez déjà mais avez peut-être oublié

pandas et numpy sont essentiels pour manipuler les données. C’est ce que rappelle ce notebook. Voir aussi Essential Cheat Sheets for Machine Learning and Deep Learning Engineers.

_images/td2a_TD5_Traitement_automatique_des_langues_en_Python.thumb.png

2A.eco - Traitement automatique de la langue en Python

Aperçu de ce qu’est le traitement automatique du langage naturel (NLP et quelques exercices.

_images/td2a_TD5_Traitement_automatique_des_langues_en_Python_correction.thumb.png

2A.eco - Traitement automatique de la langue en Python - correction

Correction d’exercices liés au traitement automatique du langage naturel.

_images/TD2A_Eco_Web_Scraping.thumb.png

2A.eco - Web-Scraping

Sous ce nom se cache une pratique très utile pour toute personne souhaitant travailler sur des informations disponibles en ligne, mais n’existant pas forcément sous la forme d’un tableau Excel… Bref, il s’agit de récupérer des informations depuis Internet.

_images/TD2A_Eco_Web_Scraping_corrige.thumb.png

2A.eco - Web-Scraping - pokemon

Il faut récupérer automatiquement des images de pokémon depuis le site pokemondb.net.

_images/td2a_eco_regressions_lineaires.thumb.png

Régressions linéaires avec Statsmodels et Scikit-Learn

On peut réaliser des régressions linéaires de beaucoup de manières avec Python. On en a retenu 2, statsmodels et scikit-learn. Les deux librairies ont chacunes leurs qualités et leurs défauts, sachez que l’une est plus orienté data science et l’autre plus pour des économistes.

2A - Travaux dirigés - Economistes (2)#

Enoncés plutôt dédiés aux économistes pour le cours Python pour un Data Scientist / Economiste. Ces énoncés sont également moins testés et peuvent ne plus être à jour.

_images/td2a_eco_NLP_tf_idf_ngrams_LDA_word2vec_sur_des_extraits_litteraires.thumb.png

2A.eco - Introduction au text mining

Dans ce TD, nous allons voir comment travailler avec du texte, à partir d’extraits de textes de trois auteurs, Edgar Allan Poe, (EAP), HP Lovecraft (HPL), et Mary Wollstonecraft Shelley (MWS).

_images/td2a_eco_5d_Travailler_du_texte_les_expressions_regulieres.thumb.png

2A.eco - Les expressions régulières : à quoi ça sert ?

Chercher un mot dans un texte est une tâche facile, c’est l’objectif de la méthode find attachée aux chaînes de caractères, elle suffit encore lorsqu’on cherche un mot au pluriel ou au singulier mais il faut l’appeler au moins deux fois pour chercher ces deux formes. Pour des expressions plus compliquées, il est conseillé d’utiliser les expressions régulières. C’est une fonctionnalité qu’on retrouve dans beaucoup de langages. C’est une forme de grammaire qui permet de rechercher des expressions.

_images/td2a_eco_5d_Travailler_du_texte_les_expressions_regulieres_correction.thumb.png

2A.eco - Les expressions régulières : à quoi ça sert ? (correction)

Chercher un mot dans un texte est une tâche facile, c’est l’objectif de la méthode find attachée aux chaînes de caractères, elle suffit encore lorsqu’on cherche un mot au pluriel ou au singulier mais il faut l’appeler au moins deux fois pour chercher ces deux formes. Pour des expressions plus compliquées, il est conseillé d’utiliser les expressions régulières. C’est une fonctionnalité qu’on retrouve dans beaucoup de langages. C’est une forme de grammaire qui permet de rechercher des expressions.

_images/td2a_Seance_7_Analyse_de_textes.thumb.png

TD7 - Analyse de texte

Analyse de texte, TF-IDF, LDA, moteur de recherche, expressions régulières.

_images/td2a_Seance_7_Analyse_de_textes_correction.thumb.png

TD7 - Analyse de texte - correction

Analyse de texte, TF-IDF, LDA, moteur de recherche, expressions régulières (correction).

2A - Travaux dirigés - Machine Learning#

Enoncés plutôt dédiés aux data scientistes pour le cours Python pour un Data Scientist / Economiste.

_images/td2a_correction_cl_reg_anomaly.thumb.png

2A.data - Classification, régression, anomalies - correction

Le jeu de données Wine Quality Data Set contient 5000 vins décrits par leurs caractéristiques chimiques et évalués par un expert. Peut-on s’approcher de l’expert à l’aide d’un modèle de machine learning.

_images/td2a_enonce_cl_reg_anomaly.thumb.png

2A.data - Classification, régression, anomalies - énoncé

Le jeu de données Wine Quality Data Set contient 5000 vins décrits par leurs caractéristiques chimiques et évalués par un expert. Peut-on s’approcher de l’expert à l’aide d’un modèle de machine learning.

_images/td2a_sentiment_analysis.thumb.png

2A.ml - Analyse de sentiments

C’est désormais un problème classique de machine learning. D’un côté, du texte, de l’autre une appréciation, le plus souvent binaire, positive ou négative mais qui pourrait être graduelle.

_images/td2a_sentiment_analysis_correction.thumb.png

2A.ml - Analyse de sentiments - correction

C’est désormais un problème classique de machine learning. D’un côté, du texte, de l’autre une appréciation, le plus souvent binaire, positive ou négative mais qui pourrait être graduelle.

_images/td2a_cenonce_session_3B.thumb.png

2A.ml - Arbres de décision / Random Forest

Classification, régression, visualisation avec des méthodes ensemblistes (arbres, forêts, …).

_images/td2a_correction_session_3B.thumb.png

2A.ml - Arbres de décision / Random Forest - correction

Méthodes ensemblistes, features importance, correction.

_images/ml_cc_machine_learning_problems2.thumb.png

2A.ml - Boosting, random forest, gradient - les features qu’ils aiment

Avantages et inconvénients des méthodes à gradient. Exercice sur la rotation de features avant l’utilisation d’une random forest.

_images/td2a_clustering.thumb.png

2A.ml - Clustering

Ce notebook utilise les données des vélos de Chicago Divvy Data. Il s’inspire du challenge créée pour découvrir les habitudes des habitantes de la ville City Bike. L’idée est d’explorer plusieurs algorithmes de clustering et de voire comment trafiquer les données pour les faire marcher et en tirer quelques apprentissages.

_images/td2a_clustering_correction.thumb.png

2A.ml - Clustering - correction

Ce notebook utilise les données des vélos de Chicago Divvy Data. Il s’inspire du challenge créée pour découvrir les habitudes des habitantes de la ville City Bike. L’idée est d’explorer plusieurs algorithmes de clustering et comment trafiquer les données pour les faire marcher.

_images/ml_b_imbalanced.thumb.png

2A.ml - Imbalanced dataset

Un jeu de données imbalanced signifie qu’une classe est sous représentée dans un problème de classification. Lire 8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset.

_images/ml_ccc_machine_learning_interpretabilite.thumb.png

2A.ml - Interprétabilité et corrélations des variables

Plus un modèle de machine learning contient de coefficients, moins sa décision peut être interprétée. Comment contourner cet obstacle et comprendre ce que le modèle a appris ? Notion de feature importance.

_images/td2a_cenonce_session_4A.thumb.png

2A.ml - Machine Learning et Marketting

Prédire la souscription d’un contrat sur le jeu de données Bank Marketing Data Set .

_images/td2a_correction_session_4A.thumb.png

2A.ml - Machine Learning et Marketting - correction

Classification binaire, correction.

_images/td2a_pipeline_tree_selection_correction.thumb.png

2A.ml - Pipeline pour un réduction d’une forêt aléatoire - correction

Le modèle Lasso permet de sélectionner des variables, une forêt aléatoire produit une prédiction comme étant la moyenne d’arbres de régression. Cet aspect a été abordé dans le notebook Reduction d’une forêt aléatoire. On cherche à automatiser le processus.

_images/td2a_pipeline_tree_selection_enonce.thumb.png

2A.ml - Pipeline pour un réduction d’une forêt aléatoire - énoncé

Le modèle Lasso permet de sélectionner des variables, une forêt aléatoire produit une prédiction comme étant la moyenne d’arbres de régression. Cet aspect a été abordé dans le notebook Reduction d’une forêt aléatoire. On cherche à automatiser le processus.

_images/ml_c_machine_learning_problems.thumb.png

2A.ml - Problèmes classiques de machine learning illustrés

Revue des problèmes classiques de machines learning, classification, régression, ranking. Exercices sur la classification multi-classes.

_images/td2a_tree_selection_correction.thumb.png

2A.ml - Réduction d’une forêt aléatoire - correction

Le modèle Lasso permet de sélectionner des variables, une forêt aléatoire produit une prédiction comme étant la moyenne d’arbres de régression. Et si on mélangeait les deux ?

_images/td2a_tree_selection_enonce.thumb.png

2A.ml - Réduction d’une forêt aléatoire - énoncé

Le modèle Lasso permet de sélectionner des variables, une forêt aléatoire produit une prédiction comme étant la moyenne d’arbres de régression. Et si on mélangeait les deux ?

_images/td2a_cenonce_session_3A.thumb.png

2A.ml - Statistiques descriptives avec scikit-learn

ACP, CAH, régression lineaire.

_images/td2a_correction_session_3A.thumb.png

2A.ml - Statistiques descriptives avec scikit-learn - correction

ACP, CAH, régression linéaire, correction.

_images/td2a_timeseries.thumb.png

2A.ml - Séries temporelles

Prédictions sur des séries temporelles et autres opérations classiques.

_images/td2a_timeseries_correction.thumb.png

2A.ml - Séries temporelles - correction

Prédictions sur des séries temporelles.

_images/ml_a_tree_overfitting.thumb.png

2A.ml - Tree, hyperparamètres, overfitting

L’overfitting ou surapprentissage apparaît lorsque les prédictions sur de nouvelles données sont nettement moins bonnes que celles obtenus sur la base d’apprentissage. Les forêts aléatoires sont moins sujettes à l’overfitting que les arbres de décisions qui les composent. Quelques illustrations.

_images/gradient_boosting.thumb.png

Gradient Boosting

Le notebook explore l’algorithme du Gradient Boosting.

_images/ml_lasso_rf_grid_search_correction.thumb.png

Hyperparamètres, LassoRandomForestRregressor et grid_search (correction)

Le notebook explore l’optimisation des hyper paramaètres du modèle LassoRandomForestRegressor, et fait varier le nombre d’arbre et le paramètres alpha.

_images/ml_lasso_rf_grid_search_enonce.thumb.png

Hyperparamètres, LassoRandomForestRregressor et grid_search (énoncé)

Le notebook explore l’optimisation des hyper paramaètres du modèle LassoRandomForestRegressor, et fait varier le nombre d’arbre et le paramètres alpha.

_images/td2a_ethics.thumb.png

Machine Learning éthique

Ce notebook est inspiré de l’article FairTest: Discovering Unwarranted Associations in Data-Driven Applications et propose d’étudier une façon de vérifier qu’un modèle ou une métrique n’est pas biaisé par rapport à certains critères.

_images/td2a_ethics_correction.thumb.png

Machine Learning éthique - correction

Ce notebook est inspiré de l’article FairTest: Discovering Unwarranted Associations in Data-Driven Applications et propose d’étudier une façon de vérifier qu’un modèle ou une métrique n’est pas biaisé par rapport à certains critères.

_images/ml_scikit_learn_simple.thumb.png

Rappels sur scikit-learn et le machine learning

Quelques exercices simples sur scikit-learn. Le notebook est long pour ceux qui débutent en machine learning et sans doute sans suspens pour ceux qui en ont déjà fait.

_images/ml_scikit_learn_simple_correction.thumb.png

Rappels sur scikit-learn et le machine learning (correction)

Quelques exercices simples sur scikit-learn. Le notebook est long pour ceux qui débutent en machine learning et sans doute sans suspens pour ceux qui en ont déjà fait.

_images/seasonal_timeseries.thumb.png

Timeseries

Ce notebook présente quelques étapes simples pour une série temporelle. La plupart utilise le module statsmodels.tsa.