Le code source de ce cours est disponible sur https://github.com/asardell/programmation-python

Rappels du langage Python🐍

Les bases de la programmation

Variables

On peut définir des variables locales

On peut supprimer une variable de la mémoire

Structure conditionnelle

⛔ Il faut bien respecter une indentation sinon on sort de la structure conditionnelle

La fonction input() permet à l'utilisateur de renseigner une valeur

Construire une fonction

On est pas obligé de renseigner le nom des arguments s'ils sont renseignés dans le même ordre de l'implémentation de la fonction

L'ordre des arguments n'est pas important si on les renseigne

Avec des arguments par défaut

Boucles

FOR

La variable nb correspond au nombre d'itération de la boucle

⛔ Il faut bien respecter une indentation sinon on sort de la structure

⚠ La valeur de la borne droite d'une fonction range() est ouverte. Donc quand nb = 3, la boucle est lancée deux fois.

WHILE

⚠ Il est important d'exprimer une condition d'arrêt pour ne pas avoir de boucle infinie

Liste

On utilis les crochets [ ] pour définir une liste

La méthode append( ) permet d'ajouter un élément à une liste

La méthode extend( ) permet d'ajouter une liste à la fin d'une liste

La fonction len( ) renvoie la longueur d'une liste

Pour acceder aux éléments d'une liste on utilise les crochets [ ] .
⚠ L'indexation commence à 0

Librairies

Lorsqu'on installe python, plusieurs librairies sont installées par défaut. Généralement, il est nécessaire d'en installer d'autres. Par exemple la librairie numpy permet de manipuler des matrices et des listes. Il est recommandé d'installer des libraries via le terminal avec la commande pip install nom_librairie ou par un navigateur. Une fois installé, il faut import la librairie pour l'utiliser.

On recommande souvent de mettre un alias pour une librairie et éviter d'avoir à saisir le nom complet de la librairie à chaque usage de ses fonctions

Numpy

Voici quelques fonctions utiles de la librairie numpy

La fonction linspace( ) génère une séquence de n nombre

La fonction arange( ) génère une séquence avec un step n
⚠ La valeur stop n'est pas prise en compte

L'essentiel de 🐼

Dans ce notebook, nous allons voir l'essentiel de la manipulation de tableaux sous Python. Des notions importantes dans une démarche data science !

Importer la librairie pandas

on peut donc charger la librairie, la plupart du temps on lui associe un alias

⚠ Certaines fonctionnalités sont disponibles qu'à partir de certaines versions de pandas.

Importer un jeu de données

On importe le jeu de données avec la méthode read_mon_format() selon l'extension du fichier

On affiche un extrait du tableau avec la méthode head()

On supprime la première colonne inutile

On utilise la méthode shape pour afficher le nombre de lignes et colonnes

On utilise la méthode info() ou dtypes pour afficher une description du data frame

Manipuler un jeu de données

Interroger le data frame avec le nom des colonnes

Tester le type de l'objet que renvoie la méthode type() sur une colonne du dataframe

Nous n'avons pas l'information sur le type des données que rassemble cette colonne. En revanche, l'objet est une série pandas. Avec pandas, les différents vecteurs ou colonnes d''une dataframe sont appelées "Series". Un DataFrame pandas est donc une collection de pd.Series.

Sélectionner deux colonnes en mêmes temps

Il suffit de donner une liste avec des noms de colonnes.
⚠ L'ordre des colonnes renvoyé est le même que celles de la liste

Des lors que l'objet retouné a plus de 1 une colonne, c'est un objet pandas DataFrame et non pandas Series

Interroger le data frame avec les indices lignes/colonnes

La méthode iloc[ ] permet d'interroger un data frame Pandas avec les indices

⚠ En python, la borne extérieure d'une plage est toujours ouverte, c'est pourquoi la ligne d'indice 3 correspondant à la ligne 4 ne s'affiche pas contrairement à une liste

La méthode loc[ ] permet d'interroger un data frame Pandas avec le nom des lignes et des colonnes

L'association des méthodes columns et difference permet d'afficher toutes les colonnes d'un data frame exceptées celles mentionnées

On réutilise cette liste sans les variables mentionnées directement dans l'indexation du data frame

📢 Attention : Lorqu'on utilise cette méthode, la liste des colonnes affichées est triée par ordre alphabetique ce qui conduit à une réorganisation du tableau de départ

Interroger le data frame avec des filtres

Pour cela on utilise les opérateurs logiques qui permettent de renvoyer des booléens.

En réalité, l'opérateur ~ permet de renvoyer l'inverse des tests logiques effectués

Les méthodes isna() et notna() permettent d'effectuer des filtres sur des valeurs manquantes

Trier un jeu de données

On utilise la méthode sort_values() pour trier un data frame ou une série pandas

Exploration statistique sur un jeu de données

On utilise souvent la librairie numpy avec pandas

Indicateurs statistiques

La méthode describe() calcule des statistiques élémentaires sur les données

L'argument include permet de prendre en compte toutes les colonnes quelques soit leur type

L'argument percentiles permet d'avoir la main sur les quantiles affichés

La méthode unique() renvoie une liste des valeurs uniques d'une Series pandas

La méthode nunique() compte le nombre de valeurs uniques d'une Series pandas

Cela fonctionne aussi sur un data frame

La méthode value_counts() renvoie un tri à plat d'une Series pandas

Grouper les données

Tableaux croisés

La méthode crosstab() permet de calculer un tableau croisé

Pour un tableau croisé en pourcentage on utilise la méthode apply() permet de mapper une fonction sur tout les éléments de l'objet

Agrégation

On utilise la méthode groupby() pour grouper les données. Il faut ensuite utiliser agg() pour calculer des indicateurs pour chaque groupe

On peut grouper les données selon plusieurs variables

On peut aussi utiliser un dictionnaire

Ce code permet d'éliminer les deux niveaux d'index colonne en concatenant les noms

⚠ Le résultat utilise plusieurs index pour chaque ligne et colonne.

On utilise la méthode reset_index() pour mettre les index ligne en colonne

Modifier un jeu de données

Changement de type des variables

On transforme la variable Survived en caractère

On la repasse en numérique

Renommer des colonnes

On utilise la méthode rename() pour renommer une colonne

💡 Quelques fois, il est pénible de manipuler des variables avec des espaces, voici une commande pour remplacer les espaces par un '_'

On remet le nom des colonnes d'origine

Gerer les valeurs manquantes

Remplacer avec fillna()

On observe les valeurs manquantes présentent dans la variable age

On remplace les valeurs manquantes par des 0 avec la méthode fillna() dans une nouvelle colonne

On remarque qu'il n'y a plus de valeurs manquantes

⚠ Cela modifie la structure des données (ex : moyenne)

L'astuce pourrait-être de remplacer les valeurs manquantes par la moyenne ?

On remplace par la moyenne

⚠ Cela modifie la structure des données sauf la moyenne

Récapitulatif des méthodes utilisées

On supprime les colonnes crées

Supprimer avec dropna()

Une autre méthode plus radicale consiste à supprimer les observations ou colonnes avec des valeurs manquantes. On utilise la méthode dropna() avec :

⚠ On peut utiliser l'argument inplace = True pour modifier directement le data frame

Remplacer avec KNNImputer()

Cette méthode consiste à utiliser l'algorithme des K-plus proches voisins.
https://scikit-learn.org/stable/modules/generated/sklearn.impute.KNNImputer.html

💡 L'argument weights permet de pondérer la moyenne des voisins les plus proches leur distance de proximité.

⚠ Cette méthode ne fonctionne que sur des variables numériques !

Gérer les doublons

On remarque que certaines personnes sont présentes deux fois

On récupère le nom des personnes en doublon avec la méthode index

On filtre le data frame sur les doublons pour observer s'il y a bien une erreur ou s'il s'agit d'homonyme

Pour illustrer les méthodes pour dédoubloner, on travaille sur le dataset df_doublons

La première méthode consiste à supprimer les doublons basés sur une seule colonne

La deuxième méthode consiste à supprimer les doublons basés sur plusieurs colonnes à la fois

Les deux dernières méthodes consistent à supprimer les doublons selon leur position dans le data frame en utilisant la méthode groupby() avec tail() ou nth()

On sélectionne la première ligne ou apparaît le doublon

On sélectionne les x dernières lignes ou apparaît le doublon

Créer de nouvelle variables

Discrétisation

La méthode cut() permet de découper une variable numérique en tranche

⚠ L'argument include_lowest est important pour prendre en compte la plus petite borne inférieure

On crée une colonne avec ce découpage en ajoutant des labels

On affiche un tri à plat en triant selon les index avec la méthode sort_index()

Recodage de variables

On peut utiliser la méthode where() de la librarie numpy

La méthode get_dummies() permet de construire un condage disjonctif complet (appelé aussi one-hot encoding). Cela est trés utilisé en data science pour traiter les variables qualitatives en machine learning

⚠ Créer autant de colonne que de modalité est problématique car on ajoute des colonnes qui ne sont plus indépendante. C'est pourquoi en machine learning on crée plutot K-1 indicatrices, la dernière modalité étant déduite des autres. L'argument drop_first permet de gérer cela.

Exporter le jeu de données

On exporte le data frame avec la méthode to_mon_format() selon l'extension du fichier

Créer un objet pandas

Pour céer une Series pandas on utilise la méthode Series()

Pour céer un DataFrame pandas on utilise la méthode DataFrame()

Les options pandas

Il est possible de modifier les options d'affichage avec la gestion des options de la librairie pandas

La méthode reset_option() permet de réinitialiser les paramètres

Plus d'information sur la librairie pandas avec le cours de Kaggle : https://www.kaggle.com/learn/pandas

Pandas Profiling

Lancer la ligne de commande dans un terminal, une mise à jour de conda est peut être nécessaire