Avant de commencer, chargez les modules nécessaires :
import pandas as pd
import numpy as np
Dans le module pandas, l'objet dataframe est un tableau de données.
Un dataframe contient des colonnes, qui ont toutes la même longueur, mais qui ne sont pas nécessairement toutes du même type (à l'opposé de np.array, où tous les éléments doivent être du même type).
En statistique, les colonnes correspondent aux variables observées et les lignes aux données observées sur un individu.
Les colonnes peuvent porter des noms (aussi appelés labels).
Par défaut, les lignes sont indexées par des entiers ($0,1,\dots$), mais l'utilisateur peut définir les indices comme bon lui semble.
Voici un exemple pour définir un premier dataframe.
mon_premier_df = pd.DataFrame(np.random.rand(6,4))
mon_premier_df
Maintenant ajoutons les noms de variables :
mon_premier_df = pd.DataFrame(np.random.rand(6,4), columns=list('ABCD'))
mon_premier_df
Indexer les lignes différement. Exemple: utiliser des dates comme indice :
dates = pd.date_range('20160126', '20160131')
dates
df = pd.DataFrame(np.random.rand(6,4), index=dates, columns=list('ABCD'))
df
Une autre façon pour définir un dataframe et de nommer les colonnes :
df2 = pd.DataFrame({ 'A' : np.arange(10)*2,
'B' : pd.Timestamp('20130102'),
'C' : pd.Series(2.5,index=list(range(10))),
'D' : np.array([5,3,6,2,9] * 2,dtype='int32'),
'E' : pd.Categorical(["test","train","test","train","train","train","train","train","train","test"]),
'F' : list('wiragnuopa') })
df2
Pour obtenir les dimensions du tableau :
df2.shape
Pour obtenir une liste des noms de variables :
list(df2)
Voir les types des colonnes:
df2.dtypes
Essayer les commandes suivantes :
df2.head()
df2.tail(3)
df.index
df2.index
df.columns
df.values
df2.values
df.describe()
df2.describe()
On utilise les noms des colonnes entre crochets, pour sélectionner des colonnes :
df['C']
df[['A','C']]
On note qu'une colonne d'un dataframe est une série :
type(df['C'])
Par des entiers entre crochets ou en utilisant les indices des lignes, on accède aux lignes :
df[0:2]
df['20160126':'20160127']
df2[df2['E']=='test']
Pour une sélection plus sophistiquée d'éléments d'un dataframe, il faut utiliser les fonctions .loc, .iloc ou .ix
.loc quand on utilise les indices des lignes et les labels des colonnes
.iloc quand on utilise des entiers pour sélectionner les lignes et colonnes
.ix quand on mélange des entiers et des labels
Jouer avec les exemples suivants pour bien comprendre la différence de ces méthodes (p.ex. dans la première instruction remplacez .loc par .iloc ou .ix et vérifiez si ça marche encore).
df.loc['20160126':'20160127',['A','B']]
df2.iloc[0:2,0:2]
df.ix[0:2,['A','B']]
Les trois méthodes acceptent également un masque booléan (de True/False) pour la sélection.
df.loc[df['A']>.6,['B','D']]
df2.loc[df2['E']=='test','A']
df
df['K'] = np.pi
df
df2.sort_index(axis=0, ascending=False)
df2.sort_index(axis=1, ascending=False)
df2.sort_values(by='F')
Comme pour les séries, on utilise la fonction pd.read_csv pour importer un tableau de données.
Pour cela, il faut que les données soient représentées sous forme d'un tablau dans le fichier csv, c'est-à-dire que les colonnes sont les variables et les lignes les observations sur différents individus.
Le premier argument de la fonction pd.read_csv est le chemin vers le fichier ou l'URL.
Si le symbole qui sépare les valeurs dans le fichier n'est pas la virgule, il faut précsier le séparateur dans l'appel de pd.read_csv. P. ex. si le séparateur est la tabulation, il faut écrire
pd.read_csv(filepath, sep='\t')
Nous allons analyser des données sur des poussins. Il s'agit de poussins qui suivent différents régimes alimentaires et qui sont pesés régulièrement.
Importer les données chicken.csv disponible à l'adresse http://www.proba.jussieu.fr/pageperso/rebafka/chicken.csv
Combien de variables contient le tableau ? Déterminer le nombre de mesures effectuées et le nombre de poussins dans l'étude ? Combien de régimes y-a t'il ? Déterminer le nombre de poussins par régime. Quelle période est couverte par les observations (combien de jours) ? Est-ce que tous les poussins sont suivis jusqu'à la fin ?
Combien de poussins ont un poids final supérieur à 250g ? Inférieur à 200g ?
Déterminer le poids maximal/minimal à la naissance/au 10e jours/à la fin. Est-ce toujours le même poussin qui est le plus/moins lourd ?
Calculer le poids moyen des poussins à la naissance et à la fin (au 21e jour) (tous les poussins confondus).
Calculer le poids moyen des poussins à la naissance et à la fin (au 21e jour) par régime. Commenter les résultats.
Calculer l’écart-type du poids des poussins à la naissance et à la fin (au 21e jour) par régime. Commenter les résultats.