【Python】 確率密度を図示

■確率密度を図示

以下のデータを使用して、ヒストグラムの作成および確率密度を図示する。

SampleData.csv

size
1
2
2
3
3
3
4
4
4
4
5
5
5
5
5
6
6
6
6
7
7
7
8
8
9

■サンプルコード

【ライブラリのインポート】

import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
from matplotlib import pyplot as plt
import seaborn as sns

【サンプルデータの取得および表示】

# サンプルデータを取得(read_csvファイル読み込み)
sample_data = pd.read_csv("SampleData.csv")

# サンプルデータを表示
print(sample_data)

・実行結果

    size
0      1
1      2
2      2
3      3
4      3
5      3
6      4
7      4
8      4
9      4
10     5
11     5
12     5
13     5
14     5
15     6
16     6
17     6
18     6
19     7
20     7
21     7
22     8
23     8
24     9

【サンプルデータの平均・標準偏差の取得および表示】

# 平均を算出(numpyの関数を使用)
mean_value = np.mean(sample_data)

# 標準偏差を算出(numpyの関数を使用)
sd_value = np.std(sample_data)

# 平均と標準偏差を表示
print('平均:' + str(mean_value))
print('標準偏差:' + str(sd_value))

・実行結果

平均:size    5.0
標準偏差:size    2.0

【サンプルデータのヒストグラムを表示】

# グラフのデザイン変更
sns.set()

# ヒストグラムをセット
sns.distplot(sample_data, bins = 9, kde = False, color = 'blue')

# グラフを表示
plt.show()

・実行結果

【サンプルデータの確率密度を表示】

ヒストグラムの累計値を1にする場合は、norm_hist = Trueを使用する。

確率密度の計算は、stats.norm.pdf関数を使用する。
なお、stats.norm.pdf関数の引数は以下の通り。
x :サンプルデータ
loc:平均の値
scale:標準偏差の値

# ヒストグラムの累計値を1にしてセット
sns.distplot(sample_data, bins = 9, norm_hist = True, kde = False, color = 'blue')
# 確率密度をセット
plt.plot(sample_data, stats.norm.pdf(x = sample_data, loc = mean_value, scale = sd_value))

# グラフを表示
plt.show()

・実行結果