Favicon
NSI Première

Connexion élèves

Choisir le(s) module(s) à installer :

Le module Pandas

Cela devient vite fastidieux, du Python "pur" pour manipuler des données...

Il existe heureusement des modules spécialement destinés à la manipulation et au traitement de données en Python : par exemple, le module Pandas.

C'est le module "de référence" pour tout ce qui est analyse de données, "Big data", etc... en Python.

Principe

Cette introduction à l'utilisation du module se fera avec ce fichier de données ( à enregistrer dans votre zone personnelle ).

Le module n'est pas forcément installé sur les ordinateurs du lycée, mais est disponible dans les éditeurs du site : penser à l'installer au préalable, et charger les fichiers nécessaires dans le système de fichiers virtuel du navigateur.

Dataframe

Après avoir importé le module en début de script, on crée, à partir de données stockées par exemple dans un fichier .csv, un tableau de données appelé dataframe :

import pandas df = pandas.read_csv('population_pays.csv') # df est l'abréviation de dataframe print(df)

La première ligne indique le nom des colonnes du tableau; chaque ligne commence par un index ( commençant à 0 ) permettant de la repérer

Le dataframe contenant de très nombreuses données, Pandas ne les affiche pas toutes par défaut : les points de suspension indiquent des données non affichées.

Informations sur les données

On peut obtenir de nombreuses informations sur le tableau de données lui-même.

Dé-commenter chaque ligne ci-dessous pour observer le résultat de leur exécution :

#print(df.shape) # affiche le nombre de lignes et de colonnes du dataframe #print(df.head(3)) # affiche les 3 premières lignes #print(df.tail(10)) # affiche les 10 dernières lignes #print(df.columns) # affiche le nom des colonnes #print(df.dtypes) # affiche le type de données précis de chaque colonne #print(df.info()) # affiche plus d'informations sur les données #print(df.describe()) # affiche des statistiques sur les données

Sélectionner une ou plusieurs colonnes

# Pour avoir la liste des pays par exemple, on sélectionne la la colonne 'Country' : #print(df['Country']) # On peut sélectionner plusieurs colonnes simultanément : #print(df[['Country','Year_1960','Year_2016']]) # les noms des colonnes sont les éléments d'un tableau # On peut créer un nouveau tableau à partir de colonnes sélectionnées : #nouveau_df = df[['Country','Year_1960']] #print(nouveau_df) # On peut renommer une ou plusieurs colonnes d'un tableau : #nouveau_df = nouveau_df.rename(columns = {'Country':'Pays'}) # pour renommer une colonne #print(nouveau_df) #nouveau_df = nouveau_df.rename(columns = {"Year_1960": 1960, "Year_2016": 2016}) # pour renommer plusieurs colonnes #print(nouveau_df)

Dans Pandas, une colonne est plus qu'une simple liste. C'est un objet sur lequel il est possible de faire les mêmes opérations que sur un dataframe :

annee_2016 = df['Year_2016'] #print(annee_2016.describe()) # infos statistiques #print(annee_2016.head(5)) # premières lignes #print(annee_2016.mean()) # Si on veut la moyenne des population pour l'année 2016 #print(annee_2016.sort_values()) # Pour trier : affiche 1) les numéros de lignes, 2) les valeurs dans l'ordre croissant

Remarque : NaN signifie Not a Number et indique qu'il y a probablement une valeur manquante dans la table () il doit y avoir un pays pour lequel on n'a pas d'information sur sa population en 2016.)

Sélection de lignes suivant une ou plusieurs condition(s)

# Pour avoir la ligne de la France: #condition = (df['Country']=='France') # On "fabrique" une condition #print(df[condition]) # Pour avoir la liste des pays dont la population en 1960 était supérieure à 100 000 000 : #condition = (df['Year_1960']>10**8) #print(df[condition]) # Pour avoir la liste des pays dont la population en 1960 était supérieure à 100 000 000 ET inférieure à 200 000 000 #condition1 = (df['Year_1960']>10**8) #condition2 = (df['Year_1960']<2*10**8) #print(df[condition1 & condition2]) # le "and" s'écrit ici "&" # Pour avoir la liste des pays dont la population en 1960 était supérieure à 1 000 000 000 OU inférieure à 100 000 #condition1 = (df['Year_1960']>10**9) #condition2 = (df['Year_1960']<10**5) #print(df[condition1 | condition2]) # le "or" s'écrit ici "|"

Trier un tableau

# Trier le tableau par ordre croissant suivant l'année 2016 print(df.sort_values(by = 'Year_2016'))

Enlever les valeurs manquantes

print(df.shape) # taille avant suppression df = df.dropna() # suppression des lignes qui comportent des valeurs manquantes print(df.shape)

Ajouter une nouvelle colonne

On veut mesurer par exemple l'augmentation de la population , en pourcentage, entre 1960 et 2016. On va créer une nouvelle colonne dans laquelle on écrira une formule de calcul, puis on ajoutera cette colonne au tableau :

augmentation = (df['Year_2016']/df['Year_1960'])*100 # calcul automatique ligne par ligne df['Augmentation']=augmentation print(df)

Application : une base de données de films ( IMDb )

Pour cette application, vous utiliserez ce fichier de données.

  1. Créer un dataframe à partir du fichier de données :
  2. Former un nouveau tableau appelé movies_df2 en ne gardant que les colonnes suivantes, et les renommer en français, puis afficher le nouveau tableau :
    
     'movie_title': 'Titre'
     'director_name': 'Réalisateur'
     'duration': 'Durée en min'
     'title_year': 'Année'
     'imdb_score': 'Score IMDb'
     'budget': 'Budget'
     'gross': 'Recette'
    				
  3. Enlever les lignes présentant des valeurs manquantes :
  4. Ne garder que les films sortis à partir de l'année 2000 :
  5. Afficher cette table en classant du moins bien noté au mieux noté :
  6. Lequel de ces films a levé la plus grosse recette (vous pouvez vous aider d'un tri pour obtenir ce résultat) ?
  7. Créer une nouvelle colonne qui va mesurer la rentabilité (Recette - Budget) de chaque film et l'ajouter au tableau (ignorer les éventuels avertissements) :
  8. Trier le tableau pour afficher les films du moins rentable au plus rentable :
  9. Quels sont les films dont le score IMDb est supérieur à 8 et qui n'ont pourtant pas été rentables ?

SOLUTION