Стратифицированная выборка в Pandas (с примерами)


Исследователи часто берут образцы из населения и используют данные из выборки, чтобы сделать выводы о населении в целом.

Одним из широко используемых методов выборки является стратифицированная случайная выборка , при которой население разбивается на группы, и определенное количество членов из каждой группы случайным образом отбирается для включения в выборку.

В этом руководстве объясняются два метода выполнения стратифицированной случайной выборки в 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.