単純無作為抽出と系統抽出

Pythonで学ぶサンプリング

James Chapman

Curriculum Manager, DataCamp

単純無作為抽出

くじ瓶から折りたたんだ紙を引く手。

転がる宝くじボール。

Pythonで学ぶサンプリング

コーヒーの単純無作為抽出

行と列に並んだコーヒー豆。

行と列に並んだコーヒー豆の一部がグレーアウト。

Pythonで学ぶサンプリング

pandasでの単純無作為抽出

coffee_ratings.sample(n=5, random_state=19000113)
     total_cup_points         variety country_of_origin  aroma  flavor  \
437             83.25            None          Colombia   7.92    7.75   
285             83.83  Yellow Bourbon            Brazil   7.92    7.50   
784             82.08            None          Colombia   7.50    7.42   
648             82.58         Caturra          Colombia   7.58    7.50   
155             84.58         Caturra          Colombia   7.42    7.67  

     aftertaste  body  balance  
437        7.25  7.83     7.58  
285        7.33  8.17     7.50  
784        7.42  7.67     7.42  
648        7.42  7.67     7.42  
155        7.75  8.08     7.83 
Pythonで学ぶサンプリング

系統抽出

行と列に並んだコーヒー豆。

行と列に並んだコーヒー豆。対角線上のみグレーアウトされていない。

Pythonで学ぶサンプリング

系統抽出 ― 間隔の設定

sample_size = 5

pop_size = len(coffee_ratings)
print(pop_size)
1338
interval = pop_size // sample_size

print(interval)
267
Pythonで学ぶサンプリング

系統抽出 ― 行の選択

coffee_ratings.iloc[::interval]
      total_cup_points  variety country_of_origin  aroma  flavor  aftertaste  \
0                90.58     None          Ethiopia   8.67    8.83        8.67   
267              83.92     None          Colombia   7.83    7.75        7.58   
534              82.92  Bourbon       El Salvador   7.50    7.50        7.75   
801              82.00   Typica            Taiwan   7.33    7.50        7.17   
1068             80.50    Other            Taiwan   7.17    7.17        7.17   

      body  balance  
0     8.50     8.42  
267   7.75     7.75  
534   7.92     7.83  
801   7.50     7.33  
1068  7.17     7.25  
Pythonで学ぶサンプリング

系統抽出の落とし穴

coffee_ratings_with_id = coffee_ratings.reset_index()
coffee_ratings_with_id.plot(x="index", y="aftertaste", kind="scatter")
plt.show()

後味スコアとインデックスの散布図。

この散布図にパターンが見られない場合のみ、系統抽出は安全です

Pythonで学ぶサンプリング

系統抽出を安全に行うには

shuffled = coffee_ratings.sample(frac=1)

shuffled = shuffled.reset_index(drop=True).reset_index()
shuffled.plot(x="index", y="aftertaste", kind="scatter") plt.show()

データセットをシャッフル後の後味スコアとインデックスの散布図。

行をシャッフルしてから系統抽出すれば、単純無作為抽出と同等です

Pythonで学ぶサンプリング

Passons à la pratique !

Pythonで学ぶサンプリング

Preparing Video For Download...