統計 SciPy

統計

統計に関する問題をSciPyを使用して解いて、その結果をグラフ化します。

以下は、あるデータセットを使って簡単な統計的な問題を解決し、その結果をグラフ化する例です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

# サンプルデータ生成
np.random.seed(0)
data = np.random.normal(loc=5, scale=2, size=1000) # 平均=5, 標準偏差=2の正規分布からのサンプルデータ

# データの基本的な統計量計算
mean = np.mean(data)
std_dev = np.std(data)
median = np.median(data)

# 正規分布の確率密度関数の作成
x = np.linspace(np.min(data), np.max(data), 100)
pdf = norm.pdf(x, mean, std_dev)

# グラフ化
plt.figure(figsize=(10, 6))

# ヒストグラム
plt.hist(data, bins=30, density=True, alpha=0.5, label='Histogram')

# 正規分布の確率密度関数
plt.plot(x, pdf, 'r', label='Normal Distribution')

# 平均と中央値の縦線
plt.axvline(mean, color='green', linestyle='dashed', linewidth=2, label='Mean')
plt.axvline(median, color='orange', linestyle='dashed', linewidth=2, label='Median')

plt.title('Histogram and Normal Distribution of Data')
plt.xlabel('Values')
plt.ylabel('Density')
plt.legend()
plt.grid(True)
plt.show()

# 統計量の表示
print(f"平均: {mean}")
print(f"標準偏差: {std_dev}")
print(f"中央値: {median}")

このコードは、平均・標準偏差・中央値の計算、データのヒストグラム正規分布の確率密度関数のグラフ表示を行います。

また、平均中央値を縦線で示しています。

これにより、データの分布や統計的な特性を視覚化し、計算結果を表示します。

ソースコード解説

以下にソースコードの詳細を説明します。

ライブラリのインポートとサンプルデータの生成

1
2
3
4
5
6
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

np.random.seed(0)
data = np.random.normal(loc=5, scale=2, size=1000)
  • numpyは数値計算を行うためのライブラリです。
    scipy.statsからnormは正規分布を扱うための統計関数を提供します。
    matplotlib.pyplotはグラフ描画ライブラリです。
  • np.random.normal()は平均が5で標準偏差が2の正規分布から1000個のサンプルデータを生成します。

基本的な統計量の計算

1
2
3
mean = np.mean(data)
std_dev = np.std(data)
median = np.median(data)
  • np.mean()np.std()np.median()はそれぞれデータの平均、標準偏差、中央値を計算します。

正規分布の確率密度関数の作成

1
2
x = np.linspace(np.min(data), np.max(data), 100)
pdf = norm.pdf(x, mean, std_dev)
  • np.linspace()dataの最小値から最大値までの範囲を100個の等間隔な数値に分割します。
    これにより、x軸の値を作成します。
  • norm.pdf()は平均と標準偏差を指定して、正規分布の確率密度関数を計算します。

グラフ化

1
2
3
4
5
6
7
8
9
10
11
plt.figure(figsize=(10, 6))
plt.hist(data, bins=30, density=True, alpha=0.5, label='Histogram')
plt.plot(x, pdf, 'r', label='Normal Distribution')
plt.axvline(mean, color='green', linestyle='dashed', linewidth=2, label='Mean')
plt.axvline(median, color='orange', linestyle='dashed', linewidth=2, label='Median')
plt.title('Histogram and Normal Distribution of Data')
plt.xlabel('Values')
plt.ylabel('Density')
plt.legend()
plt.grid(True)
plt.show()
  • plt.figure(figsize=(10, 6))は図のサイズを設定します。
  • plt.hist()はヒストグラムを描画します。
  • plt.plot()は正規分布の確率密度関数を描画します。
  • plt.axvline()は平均と中央値を縦線で表示します。それぞれ緑とオレンジの破線で示されています。
  • plt.title()plt.xlabel()plt.ylabel()はそれぞれグラフのタイトルと軸ラベルを設定します。
  • plt.legend()は凡例を表示し、plt.grid(True)はグリッドを表示します。
  • plt.show()はグラフを表示します。

統計量の表示

1
2
3
print(f"平均: {mean}")
print(f"標準偏差: {std_dev}")
print(f"中央値: {median}")
  • 最後に、計算された平均、標準偏差、中央値を表示します。