統計解析やデータ分析を行う際は「データを可視化すること」が非常に重要です。
ある変数の分布を調べたい時はヒストグラムを描くのが有効です。
それによって、平均値や中央値を見ているだけでは分からない
データがどのようにバラついているか、などを理解することができます。
今回はPythonを用いてヒストグラムを描く方法を紹介します。
まずは、Pandasライブラリを用いて、データフレームを作成しましょう。
その前に、必要なライブラリをインポートします。
import pandas as pd # データフレームを作成するライブラリ import random # 乱数を発生させるライブラリ import numpy as np #数値計算を行うためのライブラリ import matplotlib.pyplot as plt # ヒストグラムを作成するライブラリ
まずは、100人分の身長をランダムに発生させ、hというベクトルに格納しましょう。
初めの50人は男性と考えて、平均171cm、標準偏差6cmの正規分布から、
残りの50人は女性と考えて、平均158cm、標準偏差5cmの正規分布から、
データを発生させてみます。
なお正規分布については「正規分布とは何か?期待値、分散、例」で詳しく解説しています。
以下では、np.random.seed(10)を指定することにより、
毎回、同じデータが生成されるようにしました。
np.random.seed(10) h = np.round([np.random.normal(171, 6, 50)]+[np.random.normal(158, 5, 50)],1) h = h.flatten().tolist()
100個数字を発生させたので、全部は載せませんがprint()関数を用いて発生した数字を確認できます。
>>> print(h)
[179.0, 175.3, 161.7, 170.9, 174.7, 166.7, 172.6, 171.7, 171.0, 170.0, 173.6, 178.2, 165.2, 177.2, 172.4, …. ]
次にpandasのデータフレームをmydataと名付け、データフレームを作成します。
idと名付けた列は1から100までid番号を振ります。
genderと名付けた列は「男性 male」を表すMと「女性 female」を表すFを50人づつ。
そして、身長の列「height」には上で発生させた身長を入れます。
mydata = pd.DataFrame({ 'id' :list(range(1, 101)), 'gender':np.repeat(np.array(["M","F"]), [50,50]).tolist(), 'height':h })
以下のコマンドでHTML形式でデータフレームを出力することができます。
今回はhead(5)とtail(5)を利用して初めと終わりの5行づつを出力しましょう。
>>> pd.DataFrame.to_html(mydata.head(5))
>>> pd.DataFrame.to_html(mydata.tail(5))
gender | height | id | |
---|---|---|---|
0 | M | 179.0 | 1 |
1 | M | 175.3 | 2 |
2 | M | 161.7 | 3 |
3 | M | 170.9 | 4 |
4 | M | 174.7 | 5 |
gender | height | id | |
---|---|---|---|
95 | F | 162.6 | 96 |
96 | F | 155.6 | 97 |
97 | F | 158.4 | 98 |
98 | F | 162.1 | 99 |
99 | F | 148.2 | 100 |
それでは早速、ヒストグラムを描いてみます。
身長(height)のヒストグラムは以下のコマンドで描くことができます。
# column='height'で変数を指定。 # bins=10でヒストグラムの帯の数を指定。 mydata.hist(column='height', bins=10)
コード内でbins=を指定することにより、ヒストグラムの帯の数を指定できます。
もっと細かく20個の帯になるように指定してみましょう。
mydata.hist(column='height', bins=20)
また、by = mydata[“gender”]により男女別(gender別)にヒストグラムを描くことも可能です。
mydata.hist(column='height', bins=10, by = mydata["gender"])
他の手法としては、matplotlib.pyplotを利用して、
ヒストグラムを作成することも可能です。
最初に作成したベクトルhのヒストグラムを描いてみます。
# matplotlib.pyplotを利用して作成 plt.hist(h) plt.title('Height by using matplotlib.pyplot')