サバくん
1次元データの分布を素早く把握できるヒストグラム。
pythonを使ってヒストグラムを記述する方法を記述します。
目次
まずはヒストグラムを描画するためにモジュールのインポートとサンプルデータを作成しましょう。
# import modules
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# sample data
val = np.random.randn(100)*10+50 #分散10, 平均値50
print(f"mean:{np.mean(l)}, std:{np.std(l)}")
ではこのサンプルデータを使ってヒストグラムを描画してみましょう!
これが一番簡単な方法です。早速コードを書いてみましょう。
fig = plt.figure(figsize=(16,8))
plt.hist(val)
plt.show()
階級幅を変える場合はbins=整数を引数に追加します。(その他色々な引数も追加しておきます)
fig = plt.figure(figsize=(16,8))
plt.hist(val,
bins=20, # 階級幅の変更
alpha=.5, # 半透明にします
color="orange") # ついでに色も変更
plt.show()
相対度数を表出したい場合はdensity=Trueを引数に追加します。
fig = plt.figure(figsize=(16,8))
plt.hist(val,
density=True,
edgecolor="black", # 枠の色を変更
linewidth=2) # 枠の幅を変更
plt.show()
累積度数を表出したい場合はcumulative=Trueを引数に追加します。
fig = plt.figure(figsize=(16,8))
plt.hist(val,
cumulative=True,
hatch="/", # 棒グラフの柄を変更
rwidth=.8) # 棒グラフの幅を変更
plt.show()
階級の幅を自分で定めたい場合は自分で階級ごとの度数を求める方法もあります。
ウィジットで階級幅を変更できるヒストグラムを描画するコードを以下に記述します。
from ipywidgets import interact
def plotHistgram(w =10):
r = range(0,100+1,w)
arr = [sum(np.array(val)<i) for i in r]
x = np.convolve(r,np.ones(2)/2)[1:-1]
fig = plt.figure(figsize=(16,8))
plt.bar(x,np.diff(arr),w,alpha=.5)
plt.xlim(0, 100)
plt.show()
interact(plotHistgram, w=(1,20,1))
この記事でも書いたように区切る階級を変化させるとグラフから得られる印象が変わることがわかると思います。