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


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

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

В этом руководстве объясняются два метода выполнения стратифицированной случайной выборки в Python.

Пример 1: Стратифицированная выборка с использованием подсчета

Предположим, у нас есть следующий DataFrame pandas, который содержит данные о 8 баскетболистах из 2 разных команд:

 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

Следующий код показывает, как выполнить стратифицированную случайную выборку, случайным образом выбрав по 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: Расслоенная выборка с использованием пропорций

Давайте снова предположим, что у нас есть следующий DataFrame pandas, который содержит данные о 8 баскетболистах из 2 разных команд:

 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

Обратите внимание, что 6 из 8 игроков (75%) в DataFrame входят в команду A, а 2 из 8 игроков (25%) — в команду B.

Следующий код показывает, как выполнить стратифицированную случайную выборку, чтобы доля игроков в выборке из каждой команды соответствовала доле игроков из каждой команды в более крупном DataFrame:

 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%) соответствует доле игроков команды А в более крупном DataFrame.

Аналогично, доля игроков команды B в стратифицированной выборке (75%) соответствует доле игроков команды B в более крупном DataFrame.

Дополнительные ресурсы

В следующих руководствах объясняется, как выбирать другие типы образцов с помощью pandas:

Как выполнить кластерную выборку в Pandas
Как проводить систематический отбор проб среди панд

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *