Python et Data Science : 8 concepts à ne pas oublier

Tips Python

Pour que les moindres détails sur Python, NumPy et Pandas n’aient plus de secret pour toi, voici un article qui traite de concepts clés à connaître : Python et Data Science.

Le problème

Si tu t’es déjà retrouvé à te poser plusieurs fois la même question ou même rechercher des réponses toujours sur le même concept ou syntaxe lorsque tu programmes en Python, tu n’es pas seul.

Dans cet article, j’ai envie de lister les détails importants qu’on a tendance à oublier lorsqu’on arrête de coder quelques semaines.

Bien qu’il soit tout à fait normal et sain de regarder les questions/réponses sur StackOverflow ou sur d’autres ressources, cela te ralentit un peu et soulève des questions quant à ta compréhension complète du langage.

Nous vivons dans un monde où la quantité de ressources accessibles et gratuites est infinie. En une recherche Google, tu obtiens un résultat. Cependant, cela peut être à la fois une bénédiction et une malédiction. Attention : lorsque ces ressources ne sont pas gérées efficacement (mauvaise sélection par exemple), une dépendance excessive peut engendrer très vite de mauvaises habitudes sur le long terme.

Une autre mauvaise habitude c’est de copier/coller du code que tu trouves ici et là, plutôt que de prendre le temps d’apprendre et de consolider le concept pour pouvoir reproduire le code toi-même la prochaine fois.

Cette approche est paresseuse et même si elle est géniale à court terme, elle finira par nuire à ta croissance Pythonesque, à ta productivité et à ta capacité à te souvenir de la syntaxe à VIE.

Objectif

Voyons voir certains concepts et certains points de syntaxe qui sont  négligés systématiquement lors de l’analyse des données en Python.

Dans le but de consolider ta compréhension de ces concepts une fois pour toutes et de t’épargner quelques recherches de StackOverflow, voici ce qu’ON oublie toujours lorsqu’on travaille avec Python, NumPy et Pandas.

J’ai inclus 8 concepts qui a mon sens sont important dans la programmation Python et qu’on a tendance à mettre de côté ou oublier. J’essaye d’explorer chaque concept de façon concise: une courte description et un exemple. Si besoin de plus d’explications, n’hésite pas à commenter.

1. Compréhension de liste (en une seule ligne)

Écrire une boucle for chaque fois que tu as besoin de définir une sorte de liste est fastidieux, heureusement que Python a un moyen intégré de résoudre ce problème en une seule ligne de code. La syntaxe peut être un peu difficile à comprendre, mais une fois que tu te seras familiarisé avec cette technique, tu l’utilises assez souvent.

Pour comprendre la compréhension de liste en une seule ligne vs. et la création d’une liste en plusieurs lignes, regarde l’exemple ci-dessous qui présente les 2 syntaxes.

Dans cet exemple où l’on souhaite mettre au carré les nombres impairs d’une liste, soit numbers une liste contenant quelques nombres :

numbers = [1, 2, 3, 4, 5]  

doubled_odds = [] 

for n in numbers:
    if n % 2 == 1:        
        doubled_odds.append(n ** 2) 

Ce qui donne:

  • On assigne une liste vide à la variable double_odds
  • On assigne à cette liste les valeurs correspondantes avec la méthode append
  • On exécute une boucle for permettant de parcourir les éléments de la liste numbers
  • On finit par une condition if permettant de vérifier si le nombre est impair

Ce code devient avec une compréhension de liste :

numbers = [1, 2, 3, 4, 5]

doubled_odds = [n ** 2 for n in numbers if n % 2 == 1]

2. Fonctions Lambda

En Python, la fonction Lambda est une fonction ‘anonyme’, elle n’est donc pas défini par un nom.
Alors que les fonctions ‘normales’ sont définies à l’aide du mot-clé def suivi du nom de la fonction, les fonctions anonymes sont définies à l’aide du mot-clé lambda.

Par conséquent, ces fonctions anonymes sont également appelées fonctions lambda.

À quoi elles servent ?

Les fonctions lambda sont utilisées pour créer de petites fonctions ponctuelles et anonymes dans Python. Fondamentalement, elles te permettent d’appliquer une fonction sans créer de fonction.

La syntaxe de base des fonctions lambda est :

lambda arguments: expression

Note que les fonctions lambda peuvent faire tout ce que font les fonctions normales, tant qu’il n’y a qu’une seule expression.

Voici un exemple simple pour avoir une meilleure idée de la puissance des fonctions lambda :

double = lambda x: x * 2 print(double(5)) 
10

3. Map et Filter

Une fois que tu maîtrises les fonctions lambda, apprendre à les associer aux fonctions map et filter peut être très puissant.

Map

En gros, map prend une liste et la transforme en une nouvelle liste en effectuant une opération sur chaque élément (à partir d’une fonction lambda).

Dans l’exemple ci-dessous, la fonction map parcourt chaque élément d’une liste et retourne une nouvelle liste dans laquelle chaque élément est multiplié par 2. Note bien que la fonction list permet de retourner en sortie un objet de type liste.

# map seq = [1, 2, 3, 4, 5] 

result = list(map(lambda var: var*2, seq)) 
print(result) 
[2, 4, 6, 8, 10]

Filter

La fonction filter prend une liste et applique une règle (ou condition). Un peu comme map sauf qu’elle renvoie un sous-ensemble de la liste d’origine en comparant chaque élément à la règle de filtrage booléen.

Dans l’exemple ci-dessous, on applique la fonction filter avec comme règle une fonction qui prend seulement les valeurs supérieures à 2. On filtre donc notre liste pour n’afficher seulement la sous-liste de valeurs plus grandes que 2.

# filtrer seq = [1, 2, 3, 4, 5] 

result = list(filter(lambda x: x > 2, seq)) 
print(result) 
[3, 4, 5]

4. Arange et Linspace

Pour créer des tableaux Numpy rapides et faciles, ne cherche pas plus loin que les fonctions arange et linspace. Chacune a un but spécifique, mais on les préfère à la fonction range car elles permettent de produire des tableaux NumPy, qui sont généralement plus faciles à utiliser pour la Data Science.

Arange

arange renvoie des valeurs espacées uniformément dans un intervalle donné. En plus d’un point de départ (start) et d’arrêt (stop), tu peux également définir une taille de pas (step) ou un type de données si nécessaire. Note que le point d’arrêt est une valeur de “coupure”, donc il ne sera pas inclus dans le tableau résultant.

# np.arange(start, stop, step)
np.arange(3, 7, 2)
array([3, 5])

Linspace

linspace est très similaire mais avec tout de même une légère différence. linspace renvoie des nombres espacés uniformément sur un intervalle spécifié. Donc, étant donné un point de départ (start) et d’arrêt (stop), ainsi qu’un certain nombre de valeurs (num), linspace les espacera équitablement pour obtenir en sortie un tableau Numpy contenant exactement le nombre de valeurs spécifié (num). Note que cette fois-ci, la valeur stop est présente dans le tableau résultant.

Ceci est particulièrement utile pour les visualisations de données et les axes du graphique.

# np.linspace(start, stop, num)
np.linspace(2.0, 3.0, num=5)
array([ 2.0,  2.25,  2.5,  2.75, 3.0])

5. L’histoire des axes

Tu as peut-être rencontré ce problème lors de la suppression d’une colonne dans un tableau Pandas ou lors de l’addition de valeurs dans une matrice NumPy. Si non, tu y seras sans doute confronté un jour.

Prenons l’exemple de la suppression d’une colonne pour le moment :

df.drop('Row A', axis=0) df.drop('Column A', axis=1)

Combien d’entre vous ont écrit cette ligne en ignorant ce que cela signifiait ? Comme tu peux probablement le déduire, on définit l’axe sur 1 si l’on souhaite traiter les colonnes et sur 0 pour les lignes. Mais pourquoi ?

Voici une astuce pour s’en souvenir :

df.shape 
(# of Rows (nombre de lignes), # of Columns (nombre de colonnes)

En appelant l’attribut shape à partir d’un DataFrame, Pandas nous renvoie un tuple avec en première valeur le nombre de lignes et en deuxième valeur le nombre de colonnes. C’est un bon rappel pour se souvenir de l’indexage Python, les lignes sont à 0 et les colonnes à 1, un peu comme la façon dont nous déclarons la valeur de notre axe.

6. Concat, Merge et Join

Si tu es familier avec SQL, ces concepts seront probablement beaucoup plus faciles pour toi. Quoi qu’il en soit, ces fonctions sont essentiellement des moyens de combiner des données de manière spécifique. Il peut être difficile de savoir quel concept utilisé et à quel moment.

Concat

concat permet à l’utilisateur d’ajouter un ou plusieurs DataFrames les uns aux autres en dessous ou à côté (en fonction de la définition de l’axe).

Python et Data Science : fonction concat

Merge

merge combine plusieurs données sur des colonnes spécifiques et communes qui servent de clé primaire.

Python et Data Science : fonction merge

Join

join, tout comme merge, combine deux DataFrames. Cependant, il les joint en fonction de leurs indices, plutôt que par rapport à d’une colonne spécifiée.

Python et Data Science : fonction join

Tu peux consulter l’excellente documentation Pandas pour découvrir d’autres syntaxes spécifiques et des exemples plus concrets ainsi que des cas particuliers que tu pourrais rencontrer à l’avenir.

7. Apply de Pandas

apply c’est un peu une fonction map mais adapté aux DataFrames Pandas ou plus précisément aux objets Series. Si tu n’es pas familier, les objets Series sont assez similaires aux tableaux NumPy pour la plupart.

apply envoie une fonction à chaque élément le long d’une colonne ou d’une ligne en fonction de ce que tu spécifies (paramètre axis). Tu peux imaginer à quel point cela peut être utile, en particulier pour formater et manipuler des valeurs sur une colonne DataFrame entière, sans avoir à créer de boucle.

Consulte ma formation Analyse et Visualisation de Données ici pour plus de détails et d’exemples sur l’utilisation de la méthode apply.

Pivot de Tables

Dernier point mais non des moindres, ce sont les tableaux croisés dynamiques. Si tu es familier avec Microsoft Excel, tu as probablement déjà entendu parler des tableaux croisés dynamiques. La fonction intégrée Pandas pivot_table crée un tableau pivotant de type feuille de calcul en tant que DataFrame. Note que les niveaux dans le tableau croisé dynamique sont stockés dans des objets MultiIndex sur l’index et les colonnes du DataFrame résultant.

Consulte ma formation Analyse et Visualisation de Données ici pour plus de détails et d’exemples sur l’utilisation de la méthode pivot_table.

Python et Data Science : pour finir…

C’est tout pour cet article. J’espère que quelques-uns de ces aperçus t’ont permis de te familiariser avec les méthodes, les fonctions et les concepts importants ou mêmes de les revoir.

Tu les rencontras très fréquemment lors de l’utilisation de Python pour la Data Science.

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *