ヒストグラムは、特定の1次元データの変数から、様々な情報を取り出す分析手法です。いくつか使用方法はありますが、一般的には異なる複数のグループで同じ変数のヒストグラムを構成し、比較する、という分析を行います。例えば、ダイエットに効果のある薬を飲んだグループと飲んでいないグループで、1ヶ月後の体重の変動量をヒストグラムで見てみる、勉強をしなかったグループとたくさんしたグループで試験得点によるヒストグラムを構成し比較する、などです。
まず、乱数データを生成します。ここは深く考えないでコピペして構いません。1次元データのDat01とDat02が生成されます。Dat01は勉強をしなかったグループの試験得点、Dat02は勉強を良くしたグループの試験得点、だとでも思ってください。
import numpy as np
# 毎回同じ乱数を生成するためのシード設定
np.random.seed(1)
# 平均0, 標準偏差0.1に従う正規乱数の生成
Dat01=[]
Dat02=[]
for i in range(0,100):
Dat01.append(np.random.normal(30, 10))
Dat02.append(np.random.normal(60, 15))
まずは、Dat01のデータをヒストグラムにして見ます。以下のようにかけばokです。
import matplotlib.pyplot as plt
plt.hist(x=Dat01, bins=5, rwidth=0.9, color='red', label='red dat')
plt.xlabel("x-label")
plt.ylabel("y-label")
plt.title("histogram")
plt.legend()
hist関数は以下の引数を持ちます。
次に、複数のデータのヒストグラムを描いて見ます。与えるデータ列、色、ラベルなどをそれぞれリストにより渡せばokです。分析の練習のために、具体的な課題にして見ます。
import matplotlib.pyplot as plt
plt.hist(x=[Dat01, Dat02], bins=20, rwidth=0.9,
color=['red', 'blue'], label=['Not studying group', 'Hard studying group'])
plt.xlabel("Academic Score")
plt.ylabel("Number of Students")
plt.title("histogram")
plt.legend()
Dat01は勉強をしなかったグループ、Dat02が勉強をよくしたグループになります。横軸が試験得点、縦軸が学生の人数です。ヒストグラムを見てみると、勉強をしていないと、30点付近である学生が多く、最大でも50点程度しか取れないことがわかります。また、30点台に集中していることも読み取れます。一方、勉強をよくしたグループは、60から70点のとる学生が最も多く、点数の分布も広いことがわかります。このように、複数のグループの特定の変数をヒストグラム化し、比較することで、いろいろな情報を読み取ることができます。
hist関数の返り値を変数として受け取ると、ヒストグラムを構成した際の詳細なデータを知ることができます。以下のコードは、HistDatが返り値を受け取っています。
import matplotlib.pyplot as plt
HistDat = plt.hist(x=[Dat01, Dat02], bins=20, rwidth=0.9,
color=['red', 'blue'], label=['red dat', 'blue dat'])
plt.xlabel("x-label")
plt.ylabel("y-label")
plt.title("histogram")
plt.legend()
実際にHistDatの中身をみてみます。以下の情報が入っています。
print("Dat01の各ビンのデータ数: ", HistDat[0][0])
print("Dat02の各ビンのデータ数: ", HistDat[0][1])
print("各ビンの座標", HistDat[1])
11.42点以上から92.80点以下までの範囲がヒストグラム化されています。各値は区切りの値ですので、11.42点から15.49点までに、Dat01は1つ、Dat02は0つのデータがあったことを意味しています。一つだけ結果を読み取ってみると、 19.55点から23.63点の範囲にいる学生数は、勉強しないグループは7人もいるのに、勉強したグループは1人しかいません。このように、ヒストグラムを数字としてみることで、具体的な結果がわかります。