パンダでの層別サンプリング (例あり)


研究者は多くの場合、母集団からサンプルを採取し、そのサンプルのデータを使用して母集団全体についての結論を導き出します。

一般的に使用されるサンプリング方法は、層化ランダムサンプリングです。このサンプリングでは、母集団をグループに分割し、各グループから一定数のメンバーがサンプルに含められるようランダムに選択されます。

このチュートリアルでは、Python で層化ランダム サンプリングを実行する 2 つの方法について説明します。

例 1: カウントを使用した層別サンプリング

2 つの異なるチームの 8 人のバスケットボール選手に関するデータを含む次のパンダ データフレームがあるとします。

 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 人のプレーヤーが層別サンプルに含まれていることに注意してください。

例 2: 比率を使用した層別サンプリング

もう一度、2 つの異なるチームの 8 人のバスケットボール選手に関するデータを含む次のパンダ データフレームがあると仮定してみましょう。

 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

DataFrame の 8 人のプレーヤーのうち 6 人 (75%) がチーム A に所属し、8 人のプレーヤーのうち 2 人 (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

層別サンプルにおけるチーム A プレーヤーの割合 (25%) は、より大きなデータフレームにおけるチーム A プレーヤーの割合と一致することに注意してください。

同様に、層別サンプルにおけるチーム B プレーヤーの割合 (75%) は、より大きなデータフレームにおけるチーム B プレーヤーの割合と一致します。

追加リソース

次のチュートリアルでは、パンダを使用して他のサンプル タイプを選択する方法を説明します。

Pandas でクラスター サンプリングを実行する方法
パンダ間で系統的にサンプリングを行う方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です