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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *