Amostragem estratificada em pandas (com exemplos)
Os pesquisadores geralmente coletam amostras de uma população e usam os dados da amostra para tirar conclusões sobre a população como um todo.
Um método de amostragem comumente utilizado é a amostragem aleatória estratificada , na qual uma população é dividida em grupos e um certo número de membros de cada grupo são selecionados aleatoriamente para inclusão na amostra.
Este tutorial explica dois métodos para realizar amostragem aleatória estratificada em Python.
Exemplo 1: Amostragem estratificada usando contagens
Suponha que temos o seguinte DataFrame do pandas que contém dados de 8 jogadores de basquete de 2 times diferentes:
import pandas as pd #createDataFrame 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
O código a seguir mostra como realizar uma amostragem aleatória estratificada selecionando aleatoriamente 2 jogadores de cada equipe para incluir na amostra:
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
Observe que dois jogadores de cada equipe estão incluídos na amostra estratificada.
Exemplo 2: Amostragem Estratificada Usando Proporções
Vamos supor novamente que temos o seguinte DataFrame do pandas que contém dados de 8 jogadores de basquete de 2 times diferentes:
import pandas as pd #createDataFrame 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
Observe que 6 dos 8 jogadores (75%) no DataFrame estão no Time A e 2 dos 8 jogadores (25%) estão no Time B.
O código a seguir mostra como realizar uma amostragem aleatória estratificada de modo que a proporção de jogadores na amostra de cada equipe corresponda à proporção de jogadores de cada equipe no DataFrame maior:
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
Observe que a proporção de jogadores do Time A na amostra estratificada (25%) corresponde à proporção de jogadores do Time A no DataFrame maior.
Da mesma forma, a proporção de jogadores do Time B na amostra estratificada (75%) corresponde à proporção de jogadores do Time B no DataFrame maior.
Recursos adicionais
Os tutoriais a seguir explicam como selecionar outros tipos de amostra usando pandas:
Como realizar amostragem por cluster no Pandas
Como realizar amostragem sistemática entre pandas