Échantillonnage stratifié chez les pandas (avec exemples)
Les chercheurs prélèvent souvent des échantillons dans une population et utilisent les données de l’échantillon pour tirer des conclusions sur la population dans son ensemble.
Une méthode d’échantillonnage couramment utilisée est l’échantillonnage aléatoire stratifié , dans lequel une population est divisée en groupes et un certain nombre de membres de chaque groupe sont sélectionnés au hasard pour être inclus dans l’échantillon.
Ce didacticiel explique deux méthodes pour effectuer un échantillonnage aléatoire stratifié en Python.
Exemple 1 : Échantillonnage stratifié à l’aide de décomptes
Supposons que nous ayons le DataFrame pandas suivant qui contient des données sur 8 joueurs de basket-ball de 2 équipes différentes :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]}) #view DataFrame df team position assists rebounds 0 A G 5 11 1 A G 7 8 2 A F 7 10 3 A G 8 6 4 B F 5 6 5 B F 7 9 6 B C 6 6 7 B C 9 10
Le code suivant montre comment effectuer un échantillonnage aléatoire stratifié en sélectionnant au hasard 2 joueurs de chaque équipe à inclure dans l’échantillon :
df.groupby('team', group_keys=False).apply(lambda x: x.sample(2)) team position assists rebounds 0 A G 5 11 3 A G 8 6 6 B C 6 6 5 B F 7 9
Notez que deux joueurs de chaque équipe sont inclus dans l’échantillon stratifié.
Exemple 2 : échantillonnage stratifié à l’aide de proportions
Supposons encore une fois que nous ayons le DataFrame pandas suivant qui contient des données sur 8 joueurs de basket-ball de 2 équipes différentes :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]}) #view DataFrame df team position assists rebounds 0 A G 5 11 1 A G 7 8 2 A F 7 10 3 A G 8 6 4 B F 5 6 5 B F 7 9 6 B C 6 6 7 B C 9 10
Notez que 6 des 8 joueurs (75 %) du DataFrame font partie de l’équipe A et 2 des 8 joueurs (25 %) sont de l’équipe B.
Le code suivant montre comment effectuer un échantillonnage aléatoire stratifié de telle sorte que la proportion de joueurs dans l’échantillon de chaque équipe corresponde à la proportion de joueurs de chaque équipe dans le DataFrame plus grand :
import numpy as np #define total sample size desired N = 4 #perform stratified random sampling df.groupby('team', group_keys=False).apply(lambda x: x.sample(int(np.rint(N*len(x)/len(df))))).sample(frac=1).reset_index(drop=True) team position assists rebounds 0 B F 7 9 1 B G 8 6 2 B C 6 6 3 A G 7 8
Notez que la proportion de joueurs de l’équipe A dans l’échantillon stratifié (25 %) correspond à la proportion de joueurs de l’équipe A dans le DataFrame plus grand.
De même, la proportion de joueurs de l’équipe B dans l’échantillon stratifié (75 %) correspond à la proportion de joueurs de l’équipe B dans le DataFrame plus grand.
Ressources additionnelles
Les didacticiels suivants expliquent comment sélectionner d’autres types d’échantillons à l’aide de pandas :
Comment effectuer un échantillonnage de cluster dans Pandas
Comment effectuer un échantillonnage systématique chez les pandas