Исследователи часто берут образцы из населения и используют данные из выборки, чтобы сделать выводы о населении в целом.
Одним из широко используемых методов выборки является стратифицированная случайная выборка , при которой население разбивается на группы, и определенное количество членов из каждой группы случайным образом отбирается для включения в выборку.
В этом руководстве объясняются два метода выполнения стратифицированной случайной выборки в Python.
Пример 1: Стратифицированная выборка с использованием счетчиков
Предположим, у нас есть следующий кадр данных pandas, который содержит данные о 8 баскетболистах из 2 разных команд:
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
В следующем коде показано, как выполнить стратифицированную случайную выборку путем случайного выбора 2 игроков из каждой команды для включения в выборку:
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
Обратите внимание, что в стратифицированную выборку включены по два игрока из каждой команды.
Пример 2: Стратифицированная выборка с использованием пропорций
Еще раз предположим, что у нас есть следующий кадр данных pandas, который содержит данные о 8 баскетболистах из 2 разных команд:
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
Обратите внимание, что 6 из 8 игроков (75%) в DataFrame входят в команду A, а 2 из 8 игроков (25%) — в команду B.
В следующем коде показано, как выполнить стратифицированную случайную выборку, чтобы доля игроков в выборке из каждой команды соответствовала доле игроков из каждой команды в большем кадре данных:
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
Обратите внимание, что доля игроков из команды А в стратифицированной выборке (25%) совпадает с долей игроков из команды А в более крупном кадре данных.
Точно так же доля игроков из команды B в стратифицированной выборке (75%) соответствует доле игроков из команды B в более крупном DataFrame.
Дополнительные ресурсы
В следующих руководствах объясняется, как выбрать другие типы образцов с помощью панд:
Как выполнить кластерную выборку в Pandas
Как выполнить систематическую выборку в Pandas