Histogram & Q-Q plot

2025-03-31 公開 / 2025-03-31 更新

正規分布していないデータに対して標準偏差を当たり前のように使うのは、どうも気持ち悪いといつも感じています。そこで、データの分布形状を前提としないメジアン(中央値)を利用した統計量を使い始めています。そのため、必ずデータの分布を明かにするようにしています。

毎週末の日経平均株価のまとめで、ヒストグラムと Q-Q プロットの作成に使用しているコードをベースにした JupyterLab 向けのサンプルを紹介します。

下記の OS 環境で動作確認をしています。

Fedora Linux 41 Workstation x86_64
Python 3.13.2
jupyterlab 4.3.5
matplotlib 3.10.1
pingouin 0.5.5
seaborn 0.13.2

JupyterLab を起動して、最初に必要なサンプルをインポートします。

import matplotlib.pyplot as plt
import pingouin as pg
import seaborn as sns
import yfinance as yf

過去 3 年分の週足データを取得します。

code = 'N225'
symbol = '^%s' % code
ticker = yf.Ticker(symbol)
 
# 週足で過去 3 年分のデータを取得
df = ticker.history(period='3y', interval='1wk')

ヒストグラムと Q-Q プロットを横に並べてプロットします。

fig, axes = plt.subplots(1, 2, figsize=(12, 5))
 
# ヒストグラム
sns.histplot(
    df['Close'],
    kde=True,
    ax=axes[0]
)
 
axes[0].set_xlabel("Close")
axes[0].set_ylabel("count")
axes[0].grid(axis = 'y')
axes[0].set_title('Histogram')
 
# Q-Q プロット
pg.qqplot(df['Close'], s=10,  ax=axes[1])
axes[1].set_title('Q-Q plot')
axes[1].grid()
 
plt.suptitle('Weekly data for %s (%s), n = %d' % (ticker.info['longName'], symbol, len(df)))
plt.savefig('0_report_weekly_histogram_qqplot_%s.png' % code)
plt.show()

下記のようなプロットが表示されます。

関連サイト

  1. 私の株日記: 標準偏差を使う気持ち悪さ [2025-03-16]
  2. seaborn.histplot — seaborn documentation
  3. pingouin.qqplot — pingouin documentation

0 件のコメント:

コメントを投稿