ブートストラップの可視化

Pythonでデータ可視化を磨く

Nick Strayer

Instructor

下限・上限を矢印で示した単純な信頼帯

Pythonでデータ可視化を磨く

釣鐘形の曲線(ベルカーブ)

Pythonでデータ可視化を磨く

多数の白黒の点から母集団。そこから小さな標本を抽出

Pythonでデータ可視化を磨く

少数の白黒の点からなる標本を、同サイズで何度も再サンプリングして新しいデータ集合を作る図

Pythonでデータ可視化を磨く

複数の白黒の点集合が、それぞれの黒白比に対応する推定値の配列を指す図

Pythonでデータ可視化を磨く
denver_may = pollution.query("city == 'Denver' & month == 8")

# ベクトルのブートストラップ平均を計算
def bootstrap(data, n_boots): 
    return [np.mean(np.random.choice(data,len(data))) 
            for _ in range(n_boots) ]

# ブートストラップ標本を1,000回生成
boot_means = bootstrap(denver_may.NO2, 1000)


# 95%区間の下限・上限を取得 lower, upper = np.percentile(boot_means, [2.5, 97.5]) # 区間の背景を淡い灰色で塗る plt.axvspan(lower, upper, color='grey', alpha=0.2)
# 標本のヒストグラムを描画 sns.histplot(boot_means, bins = 100)
Pythonでデータ可視化を磨く

細かなビンのヒストグラム。x軸の一帯が薄い灰色で強調表示

Pythonでデータ可視化を磨く
# ブートストラップしたデータのDataFrameを作成
denver_may_boot = pd.concat([
    denver_may.sample(n=len(denver_may), replace=True).assign(sample=i) 
    for i in range(100)])

# 各標本の回帰を描画
sns.lmplot('CO', 'O3', data=denver_may_boot, scatter=False,

# 各再標本ごとに回帰直線を描くよう指定 hue='sample',
# 線をオレンジ・半透明に設定 line_kws = {'color': 'coral', 'alpha': 0.2},
# 信頼区間なし ci=None, legend = False)
Pythonでデータ可視化を磨く

緩やかに右下がりの直線が多数並ぶ図

Pythonでデータ可視化を磨く
aug_pol = pollution.query("month == 8")

# ブートストラップ標本の入れ物DataFrame
city_boots = pd.DataFrame()

for city in ['Denver', 'Long Beach', 'Houston', 'Indianapolis']:
    # 都市ごとのNO2に絞り込み
    city_NO2 = aug_pol[aug_pol.city == city].NO2
    # 各都市のNO2を100回ブートストラップしDataFrame化
    cur_boot = pd.DataFrame({ 'NO2_avg': bootstrap(city_NO2, 100), 
                              'city': city })
    # 他の都市の結果に追加
    city_boots = pd.concat([city_boots,cur_boot])

# ビースウォームでブートストラップ標本を可視化
sns.swarmplot(y="city", x="NO2_avg", data=city_boots, 

# すべて同じ色に設定 color='coral')
Pythonでデータ可視化を磨く

4つのビースウォーム。あるグループが他より明確にx軸の右側に位置

Pythonでデータ可視化を磨く

再サンプリングを始めましょう

Pythonでデータ可視化を磨く

Preparing Video For Download...