Стратифікована вибірка у панд (з прикладами)


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

Зазвичай використовуваним методом вибірки є стратифікована випадкова вибірка , за якої генеральну сукупність поділяють на групи, і певну кількість членів кожної групи випадковим чином відбирають для включення у вибірку.

Цей посібник пояснює два методи виконання стратифікованої випадкової вибірки в Python.

Приклад 1: стратифікована вибірка з використанням підрахунків

Припустімо, що у нас є такий фрейм даних 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

Зауважте, що частка гравців команди A у стратифікованій вибірці (25%) відповідає частці гравців команди A у більшому DataFrame.

Подібним чином частка гравців команди B у стратифікованій вибірці (75%) відповідає частці гравців команди B у більшому DataFrame.

Додаткові ресурси

У наступних посібниках пояснюється, як вибрати інші типи зразків за допомогою панд:

Як виконати кластерну вибірку в Pandas
Як проводити систематичний відбір проб серед панд

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *