Un data frame est un tableau de données. En général, les données à analyser sont contenues dans un tel tableau de données.
Leur manipulation est un pré-equis avant toute analyse, représentation ou exploitation des données.
Ce TP propose une introduction aux éléments essentiels des tableaux de données en python, disponible dans le paquetage pandas.
La documentation sur pandas est disponible en ligne.
Les tableaux de données sont disponibles dans le paquetage pandas. Il faut donc l'importer pour réaliser les manipulations. Il est courant de le surnommer pd en le chargeant par la commande import pandas as pd.
Un tableau de données est donc constitué d'un ensemble de lignes et de colonnes. Chaque ligne correspond à une donnée, chaque colonne correspond à un attribut. À l'intersection d'une ligne avec une colonne, on trouve la valeur de l'attribut pour la donnée. Si celle-ci est inconnue, on utilise généralement la valeur NA qui signifie Non Available, quoique cette convention ne soit pas toujours bien respectée.
Les données d'un tableau sont généralement stockées dans un fichier. En préalable à toute analyse, les données doivent être chargées dans un data frame. Il existe de multiples formats pour stocker les données d'un tableau dans un fichier. Quand il s'agît de données simples, l'un des plus répandus est un fichier au format csv.
Comme dans un tableau de données, dans un fichier csv, chaque ligne correspond à une donnée et chaque colonne à un attribut. Sur une ligne, les valeurs des attributs sont séparées par une virgule. La première ligne du fichier csv peut indiquer le nom des attributs ; elle est optionnelle.
Dans ce TP, nous allons utiliser un jeu de données qui représentent la composition en différentes molécules d'olives. La fonction pandas qui charge un fichier csv est read_csv. Le fichier se trouve à cette url : https://philippe-preux.github.io/ensg/miashs/datasets/olives.csv.
À faire : dans Python, en s'aidant si nécessaire de la documentation, charger ce fichier dans un objet dénommé olives.
Remarque pratique importante : il faut garder à l'esprit qu'un fichier csv
peut être édité avec un éditeur de textes. Il n'est pas rare que l'on doive le modifier avant de pouvoir le charger dans Python ou d'en simplifier le traitement dans Python ; il n'est pas rare non plus que ces modifications soient plus faciles à réaliser dans un éditeur de textes que dans Python.
Une fois un jeu de données chargé, les toutes premières choses à faire consistent à simplement inspecter son contenu :
À faire :
>>> olives.head (n=5) Unnamed: 0 region area ... linolenic arachidic eicosenoic 0 North-Apulia 1 1 ... 36 60 29 1 North-Apulia 1 1 ... 31 61 29 2 North-Apulia 1 1 ... 31 63 29 3 North-Apulia 1 1 ... 50 78 35 4 North-Apulia 1 1 ... 50 80 46 [5 rows x 11 columns]Si ce n'est pas ce que vous obtenez, la lecture n'a pas été effectuée correctement et la raison en est que vous avez mal utilisé la fonction pandas.
columns = {"Unnamed: 0": "Region Name"}
indique avec un dictionnaire la (ou les) colonne(s) à renommer.
Pour analyser un jeu de données, il faut accéder aux valeurs des attributs des données. En particulier, il faut accéder à la valeur des attributs qui nous intéresse, pour les données qui nous intéressent.
Pour cela, on utilise les attributs loc [] et iloc [].
iloc [] permet de sélectionner des lignes ou des colonnes par leurs indices. loc() est beaucoup plus général et permet de sélectionner des lignes ou des colonnes en indiquant un nom ou en les sélectionnant selon un critère.
À faire :
À faire : en consultant la documentation de pandas, effectuer les opérations suivantes :
Mêmes choses pour les attributs 3 à 6.
La méthode describe() donne plusieurs statistiques d'un coup. Testez-la et regardez la documentation pour comprendre ce qu'elle affiche.
À faire :
Pour les attributs numériques, on peut utiliser les méthodes de la bibliotèque numpy. Par exemple, pour calculer la valeur moyenne de l'attribut 5, on peut aussi écrire : np.mean (olives.iloc [:,5]) (en supposant que vous avez importé numpy en le renommant np).
À faire : répondre aux deux questions précédentes en utilisant des méthodes de la bibliothèque numpy.
Un attribut catégorique, ou nominal, est un attribut dont la valeur est prise parmi un ensemble fixé de valeurs possibles. Par exemple une couleur parmi jaune, vert, rouge, orange, violet. Ainsi, l'attribut 0 est un attribut catégorique qui indique la région de provenance de l'olive. De même, malgré les apparences qui peuvent faire croire que les attributs 1 et 2 sont numériques, ce sont en fait des attributs catégoriques : l'attribut 2 est simplement un numéro correspondant à la valeur de l'attribut 0. Quant à l'attribut 1, c'est une valeur 1, 2 ou 3 qui indique grossiérement la zone géographique : sud de l'Italie (1), Sardaigne (2), nord de l'Italie (3).
Pour éviter des erreurs malencontreuses comme calculer la valeur moyenne d'un attribut catégorique, il faut indiquer explicitement les attributs catégoriques. Pour cela, on fait : olives ["Region Name"] = olives ["Region Name"].astype("category").
Vérifier maintenant que vous ne pouvez plus calculer la moyenne de cet attribut.
À faire :
Pour les attributs catégoriques, il est intéressant d'obtenir la liste des valeurs présentes dans le jeu de données et également le nombre de données dans chaque catégorie.
À faire :
olives
.