Seaborn ヒストグラム:Pythonで分布プロットを作成する
Updated on
データの分布を理解することは、統計分析と意思決定において重要です。しかし、多くのデータプロフェッショナルは、パターンや外れ値を明らかにする明確で有益な分布プロットの作成に苦労しています。汎用的なプロット作成ツールは、多くの場合、広範なカスタマイズが必要で、視覚的に魅力のない結果を生み出します。
Seabornのヒストグラム関数は、最小限のコードで美しい分布プロットを作成するための高レベルインターフェースを提供することで、この問題を解決します。ライブラリは、ビンサイズ、色、スタイリングの適切なデフォルトを自動的に選択し、必要に応じて細かい制御を提供します。
このガイドでは、基本的なプロットから高度なカスタマイズ技術まで、seabornでヒストグラムをマスターするために必要なすべてをカバーします。sns.histplot()とsns.displot()の使用方法、ビニング戦略の制御、KDE曲線の重ね合わせ、複数の分布の比較、よくある落とし穴の回避方法を学びます。
ヒストグラムとは?
ヒストグラムは、データ範囲をビンに分割し、各ビン内の観測数をカウントすることで、連続変数の分布を表示します。各バーの高さは、そのビン範囲内のデータポイントの頻度または密度を表します。
ヒストグラムは以下を特定するのに役立ちます:
- 中心傾向(ほとんどの値がクラスタリングされる場所)
- データの広がりと変動性
- 歪度と外れ値
- マルチモーダル分布(複数のピーク)
Seabornは、ヒストグラムを作成するための2つの主要な関数を提供しています:軸レベルプロット用のhistplot()と、自動ファセット化サポートを備えた図レベルプロット用のdisplot()です。
sns.histplot()による基本的なヒストグラム
histplot()関数は、seabornでヒストグラムを作成するための主要なツールです。強力なカスタマイズオプションを備えたシンプルなインターフェースを提供します。
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータを生成
np.random.seed(42)
data = np.random.normal(100, 15, 1000)
# 基本的なヒストグラムを作成
sns.histplot(data=data)
plt.title('基本的なSeabornヒストグラム')
plt.xlabel('値')
plt.ylabel('カウント')
plt.show()これは、詳細とノイズのバランスをとるFreedman-Diaconisルールに基づいて自動的に決定されたビンサイズでヒストグラムを作成します。
DataFrameのデータの場合:
import pandas as pd
# DataFrameを作成
df = pd.DataFrame({
'values': np.random.normal(100, 15, 1000),
'category': np.random.choice(['A', 'B', 'C'], 1000)
})
# DataFrameからヒストグラムをプロット
sns.histplot(data=df, x='values')
plt.show()ビンの制御:サイズ、数、範囲
ビンの選択は、ヒストグラムがパターンを明らかにする方法に劇的に影響します。ビンが少なすぎると分布が過度に単純化され、ビンが多すぎるとノイズが発生します。
ビン数の指定
# 30個のビンでヒストグラムを作成
sns.histplot(data=data, bins=30)
plt.title('30個のビンを持つヒストグラム')
plt.show()ビン幅の設定
# 特定のビン幅を設定
sns.histplot(data=data, binwidth=5)
plt.title('ビン幅 = 5のヒストグラム')
plt.show()ビンエッジの定義
# カスタムビンエッジ
bin_edges = [70, 80, 90, 100, 110, 120, 130]
sns.histplot(data=data, bins=bin_edges)
plt.title('カスタムビンエッジを持つヒストグラム')
plt.show()ビン範囲の制御
# ヒストグラム範囲を制限
sns.histplot(data=data, binrange=(80, 120))
plt.title('制限された範囲のヒストグラム(80-120)')
plt.show()KDEオーバーレイの追加
カーネル密度推定(KDE)は、確率密度関数の滑らかな推定を提供し、分布の全体的な形状を確認するのに役立ちます。
# KDEオーバーレイ付きヒストグラム
sns.histplot(data=data, kde=True)
plt.title('KDEオーバーレイ付きヒストグラム')
plt.show()KDE曲線のみを表示することもできます:
# KDEのみ(ヒストグラムバーなし)
sns.kdeplot(data=data)
plt.title('KDE曲線のみ')
plt.show()または、複数の可視化を組み合わせることができます:
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# ヒストグラムのみ
sns.histplot(data=data, ax=axes[0])
axes[0].set_title('ヒストグラムのみ')
# KDEのみ
sns.kdeplot(data=data, ax=axes[1])
axes[1].set_title('KDEのみ')
# 両方を組み合わせ
sns.histplot(data=data, kde=True, ax=axes[2])
axes[2].set_title('ヒストグラム + KDE')
plt.tight_layout()
plt.show()statパラメータの理解
statパラメータは、各ビンに対して計算される統計を制御し、y軸の解釈に影響します。
| stat値 | 説明 | 使用例 |
|---|---|---|
count | 観測数(デフォルト) | 絶対頻度を表示 |
frequency | countと同じ | countの別名 |
density | 面積が1になるように正規化 | 異なるサンプルサイズの分布を比較 |
probability | 高さの合計が1になるように正規化 | ビンの確率を表示 |
percent | パーセンテージとしての確率 | 確率よりも直感的 |
fig, axes = plt.subplots(2, 3, figsize=(15, 8))
stats = ['count', 'frequency', 'density', 'probability', 'percent']
for idx, stat_type in enumerate(stats):
ax = axes[idx // 3, idx % 3]
sns.histplot(data=data, stat=stat_type, kde=True, ax=ax)
ax.set_title(f'stat="{stat_type}"')
# 追加のサブプロットを削除
fig.delaxes(axes[1, 2])
plt.tight_layout()
plt.show()異なるサンプルサイズの分布を比較する場合はdensityを使用します。これにより、総面積が1になるようにヒストグラムが正規化されます。
hueによる複数の分布の比較
hueパラメータを使用すると、1つのプロット内で異なるカテゴリ間の分布を比較できます。
# マルチカテゴリデータを作成
df = pd.DataFrame({
'values': np.concatenate([
np.random.normal(90, 10, 500),
np.random.normal(105, 12, 500),
np.random.normal(100, 8, 500)
]),
'group': ['A'] * 500 + ['B'] * 500 + ['C'] * 500
})
# hueでプロット
sns.histplot(data=df, x='values', hue='group', kde=True)
plt.title('グループ別の複数の分布')
plt.show()multipleによるオーバーレイ動作の制御
multipleパラメータは、複数の分布をどのように表示するかを決定します:
| multiple値 | 説明 | 使用時期 |
|---|---|---|
layer | 透明度でオーバーレイ(デフォルト) | 形状と重なりを比較 |
dodge | バーを並べて配置 | ビンごとの違いを強調 |
stack | バーを垂直に積み重ね | 合計と割合を表示 |
fill | 正規化された高さで積み重ね | 割合に焦点を当てる |
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
multiple_types = ['layer', 'dodge', 'stack', 'fill']
for idx, mult_type in enumerate(multiple_types):
ax = axes[idx // 2, idx % 2]
sns.histplot(data=df, x='values', hue='group',
multiple=mult_type, ax=ax)
ax.set_title(f'multiple="{mult_type}"')
plt.tight_layout()
plt.show()図レベルプロット用のsns.displot()の使用
histplot()は軸レベル関数ですが、displot()は自動ファセット化などの追加機能を提供する図レベル関数です。
# 基本的なdisplot(図全体を作成)
sns.displot(data=df, x='values', hue='group', kde=True)
plt.show()displot()の利点
colおよびrowパラメータによる自動ファセット化- サブプロット間の一貫したサイズ設定
- デフォルトでプロットの外側の凡例
- ヒストグラム、KDE、ECDFの間の簡単な切り替え
# ファセット化次元を追加
df['dataset'] = np.random.choice(['Train', 'Test'], len(df))
# ファセット化されたプロットを作成
sns.displot(data=df, x='values', hue='group',
col='dataset', kde=True, height=4, aspect=1.2)
plt.show()kindでプロットタイプを切り替え
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# ヒストグラム
sns.displot(data=df, x='values', kind='hist', kde=True)
plt.title('kind="hist"')
# KDE
sns.displot(data=df, x='values', kind='kde')
plt.title('kind="kde"')
# ECDF(経験的累積分布関数)
sns.displot(data=df, x='values', kind='ecdf')
plt.title('kind="ecdf"')
plt.tight_layout()
plt.show()関数比較表
| 機能 | histplot() | displot() | distplot() (非推奨) | matplotlib hist() |
|---|---|---|---|---|
| レベル | 軸レベル | 図レベル | 軸レベル | 軸レベル |
| ファセット化 | いいえ | はい(col/row) | いいえ | いいえ |
| KDEサポート | はい | はい | はい | いいえ(手動) |
| Hueサポート | はい | はい | 制限あり | いいえ |
| 複数の分布 | layer/dodge/stack/fill | layer/dodge/stack/fill | いいえ | いいえ |
| Statオプション | 5つのオプション | 5つのオプション | 制限あり | 制限あり |
| デフォルトスタイル | モダン | モダン | モダン | 基本 |
| ステータス | 現行 | 現行 | 非推奨 | 標準 |
| 最適な用途 | サブプロット、統合 | 独立したプロット、ファセット化 | レガシーコード | 基本的なプロット |
推奨事項:plt.subplots()で複数のサブプロットを作成する場合はhistplot()を使用します。独立した可視化やファセット化が必要な場合はdisplot()を使用します。
histplot()パラメータリファレンス
| パラメータ | タイプ | デフォルト | 説明 |
|---|---|---|---|
data | DataFrame | None | 入力データ構造 |
x, y | ベクトル/文字列 | None | xおよびy軸の変数 |
hue | ベクトル/文字列 | None | 色のグループ化変数 |
weights | ベクトル/文字列 | None | 観測の重み |
stat | 文字列 | "count" | 計算する統計(count/frequency/density/probability/percent) |
bins | int/ベクトル | "auto" | ビンの数またはビンエッジ |
binwidth | float | None | ビンの幅 |
binrange | タプル | None | ビンの範囲(min, max) |
discrete | bool | None | 変数を離散として扱う |
cumulative | bool | False | 累積分布を計算 |
common_bins | bool | True | すべてのhueレベルで同じビンを使用 |
common_norm | bool | True | すべてのhueレベルで同じ正規化を使用 |
multiple | 文字列 | "layer" | 複数の分布をプロットする方法(layer/dodge/stack/fill) |
element | 文字列 | "bars" | 視覚的表現(bars/step/poly) |
fill | bool | True | バー/ポリゴンを塗りつぶす |
shrink | float | 1 | バー幅をスケール |
kde | bool | False | KDE曲線を追加 |
kde_kws | dict | None | KDEの追加パラメータ |
line_kws | dict | None | KDEラインのパラメータ |
thresh | float | 0 | ビンを削除するしきい値 |
pthresh | float | None | 割合としてのしきい値 |
pmax | float | None | 表示する最大割合 |
cbar | bool | False | カラーバーを追加(二変量用) |
cbar_ax | Axes | None | カラーバー用の軸 |
cbar_kws | dict | None | カラーバーパラメータ |
palette | 文字列/リスト | None | カラーパレット |
hue_order | リスト | None | hueレベルの順序 |
hue_norm | タプル | None | hueの正規化 |
color | 色 | None | すべての要素の単一色 |
log_scale | bool/タプル | False | 軸に対数スケールを使用 |
legend | bool | True | 凡例を表示 |
ax | Axes | None | プロットするmatplotlib軸 |
高度なカスタマイズ
カスタム色とスタイリング
# 各カテゴリのカスタム色
custom_palette = {'A': '#FF6B6B', 'B': '#4ECDC4', 'C': '#45B7D1'}
sns.histplot(data=df, x='values', hue='group',
palette=custom_palette, alpha=0.6,
edgecolor='black', linewidth=1.5)
plt.title('カスタム色のヒストグラム')
plt.show()エッジカラーと透明度
# ビンエッジを強調
sns.histplot(data=data, bins=20, edgecolor='black',
linewidth=2, alpha=0.7, color='skyblue')
plt.title('目立つエッジを持つヒストグラム')
plt.show()対数スケール
複数の桁にまたがるデータの場合、対数スケールを使用します:
# 対数正規データを生成
log_data = np.random.lognormal(3, 1, 1000)
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# 線形スケール
sns.histplot(data=log_data, ax=axes[0])
axes[0].set_title('線形スケール')
# 対数スケール
sns.histplot(data=log_data, log_scale=True, ax=axes[1])
axes[1].set_title('対数スケール')
plt.tight_layout()
plt.show()累積分布
累積ヒストグラムは、各ビンまでの観測の累積合計を表示します:
# 累積ヒストグラム
sns.histplot(data=data, cumulative=True, stat='density',
element='step', fill=False)
plt.title('累積分布')
plt.ylabel('累積密度')
plt.show()これは、パーセンタイルを決定し、分布を比較するのに便利です。
視覚要素の変更
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
elements = ['bars', 'step', 'poly']
for ax, elem in zip(axes, elements):
sns.histplot(data=data, element=elem, kde=True, ax=ax)
ax.set_title(f'element="{elem}"')
plt.tight_layout()
plt.show()二変量ヒストグラム(2Dヒストグラム)
Seabornは、2つの変数の結合分布を可視化するために2Dヒストグラムを作成できます:
# 相関のある2Dデータを生成
np.random.seed(42)
x = np.random.normal(100, 15, 1000)
y = x + np.random.normal(0, 10, 1000)
# 2Dヒストグラム
sns.histplot(x=x, y=y, bins=30, cbar=True)
plt.title('2Dヒストグラム(二変量分布)')
plt.show()二変量分析のためのKDEとの組み合わせ
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 2Dヒストグラム
sns.histplot(x=x, y=y, bins=30, cbar=True, ax=axes[0])
axes[0].set_title('2Dヒストグラム')
# KDE等高線プロット
sns.kdeplot(x=x, y=y, fill=True, cmap='viridis', ax=axes[1])
axes[1].set_title('2D KDEプロット')
plt.tight_layout()
plt.show()Hueを使用した二変量
# カテゴリを追加
categories = np.random.choice(['グループ1', 'グループ2'], 1000)
sns.histplot(x=x, y=y, hue=categories, bins=20)
plt.title('Hue付き2Dヒストグラム')
plt.show()よくある間違いとその回避方法
間違い1:ビンが多すぎるまたは少なすぎる
問題:過度の平滑化はパターンを隠し、ビンが多すぎるとノイズが発生します。
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# ビンが少なすぎる
sns.histplot(data=data, bins=5, ax=axes[0])
axes[0].set_title('ビンが少なすぎる(5) - 過度に平滑化')
# 適切な数
sns.histplot(data=data, bins=30, ax=axes[1])
axes[1].set_title('適切なビン(30)')
# ビンが多すぎる
sns.histplot(data=data, bins=100, ax=axes[2])
axes[2].set_title('ビンが多すぎる(100) - ノイズが多い')
plt.tight_layout()
plt.show()解決策:自動ビン選択から始めて、データの特性に基づいて調整します。正規分布にはSturgesのルール(bins = log2(n) + 1)を、歪んだデータにはFreedman-Diaconisルールを使用します。
間違い2:異なるサンプルサイズの分布を比較
問題:生のカウントでは、総観測数が異なる分布を比較することが困難です。
# 異なるサンプルサイズ
small_sample = np.random.normal(100, 15, 200)
large_sample = np.random.normal(100, 15, 2000)
df_samples = pd.DataFrame({
'value': np.concatenate([small_sample, large_sample]),
'sample': ['小(n=200)'] * 200 + ['大(n=2000)'] * 2000
})
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# 間違い:countを使用
sns.histplot(data=df_samples, x='value', hue='sample',
stat='count', ax=axes[0])
axes[0].set_title('間違い:Count(比較が困難)')
# 正解:densityを使用
sns.histplot(data=df_samples, x='value', hue='sample',
stat='density', common_norm=False, ax=axes[1])
axes[1].set_title('正解:Density(比較が容易)')
plt.tight_layout()
plt.show()解決策:stat='density'またはstat='probability'を使用し、common_norm=Falseを設定します。
間違い3:重なり合う分布を無視
問題:高い不透明度のデフォルトレイヤーモードは、重なりを見えなくします。
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# 悪い:不透明なバーが重なりを隠す
sns.histplot(data=df, x='values', hue='group',
alpha=1.0, ax=axes[0])
axes[0].set_title('悪い:不透明なバー')
# 良い:透明度が重なりを表示
sns.histplot(data=df, x='values', hue='group',
alpha=0.5, ax=axes[1])
axes[1].set_title('良い:透明なバー')
plt.tight_layout()
plt.show()解決策:透明度にはalpha=0.5を使用するか、バーを並べて配置するにはmultiple='dodge'を使用します。
間違い4:軸のラベルを適切に付けない
問題:特に異なるstat値を使用する場合、y軸が何を表しているかが不明確です。
# 良い実践:明確なラベル
sns.histplot(data=data, stat='density', kde=True)
plt.title('値の分布')
plt.xlabel('値')
plt.ylabel('密度')
plt.show()解決策:stat='density'またはstat='probability'を使用する場合は、特にy軸のラベルを常に明確に付けます。
間違い5:非推奨のdistplot()を使用
問題:古いコードはdistplot()を使用していますが、これは非推奨で柔軟性に欠けます。
# 古い方法(非推奨)
# sns.distplot(data) # これは使用しないでください
# 新しい方法
sns.histplot(data=data, kde=True)
plt.show()解決策:ヒストグラムにはhistplot()に、KDE曲線にはkdeplot()に移行します。
PyGWalkerでデータをインタラクティブに可視化
seabornは優れた静的ヒストグラム可視化を提供しますが、PyGWalkerは動的に分布を探索できるインタラクティブな代替手段を提供します。PyGWalkerは、pandas DataFrameをインタラクティブなTableau風のインターフェースに変換し、コードを書かずにヒストグラムを作成し、ビニングを調整し、可視化タイプを切り替えることができます。
import pygwalker as pyg
import pandas as pd
import numpy as np
# サンプルデータを作成
df = pd.DataFrame({
'values': np.random.normal(100, 15, 1000),
'category': np.random.choice(['A', 'B', 'C'], 1000),
'score': np.random.uniform(0, 100, 1000)
})
# インタラクティブエクスプローラーを起動
pyg.walk(df)ヒストグラム分析のためのPyGWalkerの利点:
- ドラッグアンドドロップインターフェース:変数をシェルフにドラッグしてヒストグラムを作成
- 動的ビニング:スライダーでビンカウントをインタラクティブに調整
- 多変数探索:変数を素早く切り替えて分布を比較
- エクスポート機能:インサイトを画像として保存したり、インタラクティブレポートを共有
- コーディング不要:技術者以外のチームメンバーが独立してデータを探索可能
インタラクティブなデータ可視化を始めるにはgithub.com/Kanaries/pygwalker (opens in a new tab)をご覧ください。
実世界の例:試験スコアの分析
ヒストグラム技術を適用して、異なるクラスの試験スコア分布を分析しましょう:
# 現実的な試験データを生成
np.random.seed(42)
n_students = 500
exam_data = pd.DataFrame({
'score': np.concatenate([
np.random.normal(75, 10, 200), # クラスA
np.random.normal(68, 15, 150), # クラスB
np.random.normal(82, 8, 150) # クラスC
]),
'class': ['クラスA'] * 200 + ['クラスB'] * 150 + ['クラスC'] * 150,
'study_hours': np.random.uniform(0, 40, n_students)
})
# スコアを有効範囲にクリップ
exam_data['score'] = exam_data['score'].clip(0, 100)
# 包括的な可視化を作成
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# KDE付き全体分布
sns.histplot(data=exam_data, x='score', kde=True,
bins=30, ax=axes[0, 0])
axes[0, 0].set_title('全体的なスコア分布')
axes[0, 0].axvline(exam_data['score'].mean(), color='red',
linestyle='--', label=f'平均: {exam_data["score"].mean():.1f}')
axes[0, 0].legend()
# クラスを比較
sns.histplot(data=exam_data, x='score', hue='class',
stat='density', common_norm=False,
alpha=0.5, bins=25, ax=axes[0, 1])
axes[0, 1].set_title('クラス別スコア分布')
# 割合のための積み重ねビュー
sns.histplot(data=exam_data, x='score', hue='class',
multiple='stack', bins=25, ax=axes[1, 0])
axes[1, 0].set_title('積み重ね分布(総カウント)')
# 累積分布
sns.histplot(data=exam_data, x='score', hue='class',
stat='density', element='step', fill=False,
cumulative=True, common_norm=False, ax=axes[1, 1])
axes[1, 1].set_title('クラス別累積分布')
plt.tight_layout()
plt.show()
# 要約統計を印刷
print(exam_data.groupby('class')['score'].describe())この例では以下を示します:
- 平均参照線を使用した全体分布分析
- 異なるクラスサイズに対して正規化された密度比較
- 各クラスの貢献を示す積み重ねビジュアライゼーション
- パーセンタイル分析のための累積分布
FAQ
ヒストグラムに適切なビン数を選択するにはどうすればよいですか?
最適なビン数は、データサイズと分布に依存します。Seabornの自動ビン選択(Freedman-Diaconisルールに基づく)は、ほとんどの場合でうまく機能します。手動選択の場合、正規分布にはSturgesのルールを使用します:bins = log2(n) + 1(1000サンプルの場合、通常10-20ビン)、または一般的なデータには平方根ルール:bins = sqrt(n)を使用します。さまざまな値を試して、過度のノイズを作成せずにパターンを明らかにするものを選択してください。比較のために複数のプロットで一貫したビンサイズが必要な場合は、binsの代わりにbinwidthを使用してください。
seabornのhistplotとdisplotの違いは何ですか?
histplot()は、特定のmatplotlib軸オブジェクトにプロットする軸レベル関数で、plt.subplots()で複雑なマルチプロット図を作成するのに適しています。displot()は、図全体を作成し、colおよびrowパラメータで自動ファセット化をサポートする図レベル関数です。複数のサブプロットを持つ既存のmatplotlib図にヒストグラムを統合する場合はhistplot()を使用します。独立した可視化や、複数のカテゴリ変数にわたってファセット化されたプロットを作成する必要がある場合はdisplot()を使用します。両方の関数は、ビン、KDE、hue、統計を制御するための同じコアパラメータをサポートしています。
ヒストグラムにstat='density'とstat='probability'のどちらを使用すべきですか?
ヒストグラムの面積を1にする必要がある場合はstat='density'を使用します。これにより、確率密度関数と比較可能になり、理論的分布を重ねるのに理想的です。y軸を各ビン内のデータの割合として解釈したい場合はstat='probability'(またはstat='percent')を使用します。すべてのビンの高さの合計が1(または100%)になります。異なるサンプルサイズの分布を比較する場合や統計分析を行う場合はstat='density'を選択します。プレゼンテーションでより直感的な解釈が必要な場合や、技術者以外の聴衆に結果を説明する場合はstat='probability'を選択します。
複数の重なり合う分布を持つヒストグラムを作成するにはどうすればよいですか?
hueパラメータを使用して、データをグループに分割するカテゴリ変数を指定します。multipleパラメータでオーバーレイ動作を制御します:'layer'(デフォルト)を透明な重なり合うバーに使用、'dodge'をバーを並べて配置するために使用、'stack'を合計を示す垂直に積み重ねられたバーに使用、または'fill'を割合を示す正規化された積み重ねバーに使用します。重なり合う領域を見えるようにするにはalpha=0.5を設定します。異なるサンプルサイズの分布を比較する場合は、公正な比較を保証するために常にstat='density'またはstat='probability'をcommon_norm=Falseとともに使用します。各分布の全体的な形状を強調するには、kde=TrueでKDE曲線を追加します。
seabornのdistplotが非推奨なのはなぜですか、代わりに何を使用すべきですか?
Seabornは、バージョン0.11.0でdistplot()を非推奨にしました。これは、パラメータの命名が一貫していない単一の関数に複数の機能を組み合わせていたためです。置き換え関数は、より明確なインターフェースとより多くの柔軟性を提供します:ヒストグラムにはhistplot()、カーネル密度推定にはkdeplot()、経験的累積分布関数にはecdfplot()、ラグプロットにはrugplot()を使用します。これらの新しい関数は、より良いパラメータ名、より多くのカスタマイズオプション、hueベースのグループ化のネイティブサポート、および他のseaborn関数との一貫した動作を提供します。古いコードを移行するには、最も一般的な使用例の場合、sns.distplot(data)をsns.histplot(data, kde=True)に置き換えます。
結論
Seabornヒストグラムは、最小限のコードでデータ分布を可視化する強力で柔軟な方法を提供します。histplot()関数は、ビニング、統計、グループ化に対する細かい制御を提供し、displot()はファセット化された可視化を簡素化します。bins、stat、hue、multipleなどのパラメータをマスターすることで、パターン、外れ値、グループ間の違いを明らかにする出版品質の分布プロットを作成できます。
重要なポイント:
- 初期探索には自動ビン選択を使用し、その後明確性のために調整します
- 異なるサンプルサイズの分布を比較する場合は
stat='density'を適用します hueおよびmultipleパラメータを活用して、複数の分布を効果的に比較します- 滑らかな分布形状を示すためにKDEオーバーレイを追加します
- matplotlibサブプロットとの統合には
histplot()を選択し、独立したファセット化されたプロットにはdisplot()を選択します
試験スコア、科学的測定、ビジネスメトリクスを分析する場合でも、seabornヒストグラムは、データ分布を理解し、インサイトを効果的に伝えるのに役立ちます。包括的な探索的データ分析のために、これらの技術をPyGWalkerのようなインタラクティブツールと組み合わせます。