ヒストグラムは、棒グラフで値の頻度を表すものだ。

以前、統計学の記事で詳細を取り上げたので、ヒストグラムが分からない方は先に見ておいてほしい。

サンプルデータセットの用意

今回ヒストグラムを作成するにあたり、サンプルとして平均0、分散1の正規分布した1000の乱数を用意した。

%matplotlib notebook
import matplotlib as plt
import pandas as pd
import numpy as np

data = pd.Series(np.random.randn(1000))

ヒストグラムを描く

pandasのplot.histメソッドを使うと、ヒストグラムを描くことができる。

data.plot.hist()

サイコロの出目の分布をヒストグラムで表す

ヒストグラムは値の頻度を表すグラフだ。
つまり、確率を視覚化する際によく使われる。

確率の代表的なものとしてサイコロの出目が挙げられる。

次の例では、サイコロをx回振った時の出目の確率をヒストグラムを使って表していこう。

data2 = pd.Series(np.random.randint(1, 7) for _ in range(10))

for文を使って、サイコロを10回振った時の出目をdata2変数に格納した。

これをヒストグラムへプロットすると次のとおりとなる。

data2.plot.hist(bins=6)

binsオプションは、ヒストグラムの階級の数(つまり棒の数)を任意で指定するオプションだ。
※デフォルトは10に設定されている。

サイコロは振る回数が少ないと、当然出目の数にバラツキが目立つ。

次は思い切って1,000,000回振った場合のヒストグラムを見てみよう。

data2 = pd.Series(np.random.randint(1, 7) for _ in range(1000000))
data2.plot.hist(bins=6)

だいぶ出目の確率が均一化された。

二つのサイコロを振った場合

今度は二つのサイコロを振った出目の合計をヒストグラムへプロットする。

サンプルデータの生成はNumpyを使えば簡単だ。

data3 = pd.Series(
    (np.random.randint(1, 7) + np.random.randint(1, 7))
    for _ in range(10000))

1〜6のサイコロをそれぞれ振った出目を合計する処理を、for文を使って10000回実行し、結果として得られた値をdata3変数に格納した。

これをプロットすると次の結果となる。

data3.plot.hist(bins=11)

サイコロを二つ振った時の出目の合計は、7が一番多く、両端にいくにしたがって出る頻度は下がっていくことが分かった。

このように確率や頻度を視覚化する上で有用なツールがヒストグラムだ。