La librairie Pandas
La librairie Pandas est une librairie Python qui a pour objectif de vous faciliter la vie en matière de manipulation de données. C’est donc un élément indispensable qui faut maîtriser en tant que datascientiste. Les structures de données gérées par Pandas peuvent contenir tout type d’éléments à savoir (dans le jargon Pandas) des Séries et DataFrame et des Panel. Dans le cadre de nos expérimentations on utilisera plutôt les Dataframe car ils offres une vue bidimentionnelle des données (comme un tableau excel), et c’est exactement ce que l’on va chercher à utiliser pour nos modèles.
Pour information :
- Une Series Pandas est un vecteur étiqueté capable de contenir n’importe quel type d’objet (tableau à 1 dimension)
- Un DataFrame est une matrice bidimensionnelle où les colonnes peuvent être de différents types (tableau à 2 dimensions)
- Un Panel est une structure de données à trois dimensions.
Si vous avez opté pour une distribution de Python (Anaconda par exemplle) bonne nouvelle, vous n’avez rien à faire, cette librairie étant déjà présente dans ladite distribution … si ce n’est pas le cas la commande pip vous permettra de l’installer :
$ pip install pandas
L’autre bonne nouvelle est que cette librairie est conçue pour travailler avec deux autres librairies célèbres et indispensable : NumPy et matplotlib !
Dans le cadre de ce petit tuto je vous recommande d’utiliser Jupyter notebook (les sources sont disponibles plus bas) afin d’aller plus vite.
N’hésitez pas non plus à consulter la documentation officielle : https://pandas.pydata.org/pandas-docs/stable/api.html
Les types de données
Créons tout d’abord un jeu de données simple (DataFrame)
import pandas as pd pd.DataFrame({'Colonne 1': [1], 'Colonne 2': [2]})
La première commande précise à Python que l’on va travailler avec la librairie Pandas.
La seconde ligne indique à Pandas de créer un tableau à deux dimensions.
Voici le résultat :
Colonne 1 | Colonne 2 | |
0 | 1 | 2 |
les colonnes ont des beaux libellés mais si vous vouloez aussi etiquetter vos lignes il faudra le préciser avec la propriété index comme suit :
pd.DataFrame({'Colonne 1': [35, 41], 'Colonne 2': [1, 2]}, index=['Ligne 1', 'Ligne 2'])
Voici le résultat :
Colonne 1 | Colonne 2 | |
Ligne 1 | 35 | 41 |
Ligne 2 | 41 | 2 |
C’est pas forcément le plus utile mais ça peut quand même servir, voici comment créer une série (vecteur) :
pd.Series(["Valeur1", "Valeur2", "Valeur3", "Valeur4"], index=["Index1", "Index2", "Index3", "Index4"], name='Ma série')
Voici le résultat :
Index1 | Valeur1 |
Index2 | Valeur2 |
Index3 | Valeur3 |
Index4 | Valeur4 |
Name: Ma série, dtype: object |
Par contre récupérer des données provenant d’un fichier csv, c’est plus utile, pour celà utilisez la commande read_csv :
csv = pd.read_csv("./datasets/housing/housing.csv")
Note: Si vous voulez plutôt lire une fichier excel, référez-vous à la commande read_excel.
Une fois lu le fichier, plusieurs commandes sont très utiles :
- head() : permet d’afficher les premières lignes du DataFrame
- tail() : idem mais pour les dernières lignes
- describe() : Très utile, donne des indications sur les données (comptage, ecart type, valeur médiane, quantile, min, max, etc.). Attention ! certains indicateurs statistiques ne sont valables que pour les variables numériques (ex. moyenne, min, max, etc.), et inversemment pour les non-numériques (ex. top, freq, etc. ), d’où des « NaN » dans certaines situations. Pour récupérer toutes les statistiques, effectuer un
df["colonne 1"].describe(include='all')
- shape() : dimensions de l’objet
- value_Counts() permet d’obtenir un tableau de valeurs + fréquence de distribution très utile :
df["colonne 1"].
value_counts() - etc.
Accéder aux données (DataFrame)
Récupérer un vecteur
On peut récupérer un vecteur colonne (une colonne du DataFrame) très simplement via :
csv.longitude ou csv["longitude"]
NB: csv est un DataFrame qui a une colonne étiquettée longitude.
Récupérer une cellule
csv.longitude[0]
ou
csv["longitude"][0]
Manipuler les données du DataFrame
Dans le même esprit on peut récupérer des morceaux du DataFrame via les commandes iloc() et loc():
Récupérer les 4 premières colonnes et les 3 premières lignes :
csv.iloc[:3, :4]
Filtrage sur colonnes (via labels) :
csv.loc[:, ('longitude', 'latitude')]
Manipuler les données caractères
Il est souvent utile de décomposer les chaines de caractères. pour cela Pandas offre plusieurs fonctions très pratique. La fonction split() par exemple permet de découper la chaine de caractère selon un séparateur.
Exemple :
monDataframe["index1"].str.split("-", expand=True)
Dans l’exemple ci-dessus on découpe la chaine de caractère correspondant à la colonne « index1 » du DataFrame mondataframe avec pour séparateur le caractère –. Notez deux choses ici. l’attribut str permet en premier lieu de manipuler la donnée du DataFrame en tant que caractère. Deuxièmement l’option expand=True permet de renvoyer un nouveau DataFrame au lieu d’une série (c’est bien plus pratique pour la suite).
Consultez dans la documentation officielle Python les autres fonctions de gestion de caractères.
Les notebook Jupyter de ce tuto
Retrouvez les exemples et résultats ci-dessus dans les deux notebook jupyter sur mon Github
Suite du tuto (Partie N°2) ici
Ingénieur en informatique avec plus de 20 ans d’expérience dans la gestion et l’utilisation de données, Benoit CAYLA a mis son expertise au profit de projets très variés tels que l’intégration, la gouvernance, l’analyse, l’IA, la mise en place de MDM ou de solution PIM pour le compte de diverses entreprises spécialisées dans la donnée (dont IBM, Informatica et Tableau). Ces riches expériences l’ont naturellement conduit à intervenir dans des projets de plus grande envergure autour de la gestion et de la valorisation des données, et ce principalement dans des secteurs d’activités tels que l’industrie, la grande distribution, l’assurance et la finance. Également, passionné d’IA (Machine Learning, NLP et Deep Learning), l’auteur a rejoint Blue Prism en 2019 et travaille aujourd’hui en tant qu’expert data/IA et processus. Son sens pédagogique ainsi que son expertise l’ont aussi amené à animer un blog en français (datacorner.fr) ayant pour but de montrer comment comprendre, analyser et utiliser ses données le plus simplement possible.
Tuto très intuitif.