python PR

【pythonで統計学】ヒストグラムとpythonでの作成方法〜サンプルコード多め〜

pythonヒストグラム
記事内に商品プロモーションを含む場合があります

統計学の教科書を読んでいると、一番最初に度数分布とヒストグラムなどが記載されています

どちらも統計学を学んでいく上で、大切な項目になるので、ぜひ一緒に勉強をしていきましょう

これまでの【pythonで統計学】同様、csvファイルを読み込んでヒストグラムを作成するサンプルコードもお伝えします!

pythonで統計学を学ぶ流れは以下の記事を参考にしてください

python 統計学
pythonで統計学を学ぶメリット〜実際の学習手順を紹介〜近年、データサイエンティストの需要が高まってきていますが、データサイエンティスト必須能力として、「プログラミング言語」「統計学」が挙げられています。pythonで統計学を扱えれば、データサイエンティストとしての道も開けるでしょう。今回はpythonで統計学を学ぶメリットや実際にどのように学習していくべきかを解説していきたいと思います。...

ヒストグラムとは?

ヒストグラムとは、ある特定のデータを区間ごとに区切り、各区間の個数や数値のばらつきを棒グラフ様の図で作られているグラフです

ヒストグラムを作成することで、数値で集めた度数分布表を視覚的にわかりやすく表現することができます

度数分布表とは

度数分布表とは、収集したデータをある幅ごとに区切って、その中に含まれるデータの個数を見るための数値をまとめた表です

1つの区間を階級と呼びますが、binと呼ぶこともあります

pythonのコードではbin,binsを用いています

175159178155173
176161155152172
156152173180180
155178172160168
165155180166158
178173168167151
161172158162157
169180151173174
171168157155178
180158174165155
160151180178173
166157166161172
167174155169180
162180152171168
173166180180158
168155160168151
179152166179157
166167167166174
175156162175168
172180173156179
167177180180166

上記の様な身長を集めたデータがあったとします

これだけではデータの羅列であり、このデータの特徴をパッと見ただけでは把握することができません

そこで、まずは身長が低い順番に並べ替えていきます

151157166172178
151157166172178
151158166172178
151158166172178
152158166172178
152158167173179
152159167173179
152160167173179
155160167173180
155160167173180
155161168173180
155161168173180
155161168174180
155162168174180
155162168174180
155162168174180
156165168175180
156165169175180
156166169175180
157166171176180
157166171177180

小さい順に並べ替えたら、150cm代,160cm代…というふうに分けていきます

今回の場合だと、

  • 黄色:28個
  • オレンジ:33個
  • 水色:31個
  • 白:13個

というふうになり、これをまとめると以下のようになります

階級度数
150〜15928
160〜16933
170〜17931
180〜13
合計105

階級は「データを区切る範囲」、度数は「データの個数」を表しています

このように度数分布表としてまとめることで、階級と度数の関係性がわかりやすくなります

さらにデータを加工していくと以下のようになります

階級度数累積度数相対度数累積相対度数
150〜15928280.260.26
160〜16933610.310.58
170〜17931920.290.87
180〜131050.121
合計105なし1なし

それぞれの言葉の意味は以下のようになります

  • 階級:データを区切る範囲
  • 度数:データの個数
  • 累積度数:その階級までのすべての度数の合計
  • 相対度数:それぞれの階級の度数が全体に占める割合
  • 累積相対度数:その階級までのすべての相対度数の合計

このような度数分布表だけでも、データの分散度合いや中央値を知ることができますが、ヒストグラムを作成すれば、数値だけではなく、視覚的にも理解しやすくなります

pythonでヒストグラムを作成する方法

ではここからはpythonでヒストグラムを作成する方法について解析していきたいと思います

ヒストグラムを作成する場合には、matplotlib.pyplot.histを使用します

コードはこちら

matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, 
cumulative=False, bottom=None, histtype='bar', align='mid', 
orientation='vertical', rwidth=None, log=False, color=None, 
label=None, stacked=False, *, data=None, **kwargs)

パラメータが多めです

x (必須)ヒストグラムを作成するための生データの配列。
binsビン (表示する棒) の数。階級数。(デフォルト値: 10)
rangeビンの最小値と最大値を指定。(デフォルト値: (x.min(), x.max()))
normedTrue に設定すると正規化 (合計値が 1 になるように変換) を実施。 (デフォルト値: False)
cumulativeTrue に設定すると、累積ヒストグラムを出力。 (デフォルト値: False)
bottom各棒の下側の余白を数値または配列で指定。
histtype‘bar’ (通常のヒストグラム), ‘barstacked’ (積み上げヒストグラム), ‘step’ (線), ‘stepfilled ‘ (塗りつぶしありの線) から選択。 (デフォルト値: ‘bar’)
align各棒の中心を X 軸目盛上のどの横位置で出力するか。 ‘left’, ‘mid’, ‘right’ から選択。(デフォルト値: ‘mid’)
orientation棒の方向。’horizontal’ (水平方向), ‘vertical’ (垂直方向) から選択。(デフォルト値: ‘vertical’)
rwidth各棒の幅を数値または、配列で指定。
logTrue に設定すると、縦軸を対数目盛で表示します。
colorヒストグラムの色。配列で指定し、データセット単位で色を指定することができます。
label凡例を載せる際に使用します。
stackedTrue に設定すると積み上げヒストグラムで出力します。False に設定すると、横に並べて出力します。
import numpy as np
import matplotlib.pyplot as plt
 
x = np.random.normal(50, 10, 1000)
plt.hist(x)
python ヒストグラム

seabornを使用してヒストグラムを作成する方法

matplotlibでヒストグラムを作成するのもいいですが、seabornを使用するとより綺麗なグラフを作成することができます

コードはこちら

seaborn.distplot(a=None, bins=None, hist=True, kde=True, rug=False, 
fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, 
color=None, vertical=False, norm_hist=False, axlabel=None, label=None, 
ax=None, x=None)

パラメーターが多いですが、覚えておきたいのは以下の数種類

オプション説明
dataSeriesまたは1d-array、listのみ
bins等級値(x軸の刻み目)の数。
color色の指定
label凡例の指定。plt.legend()必須。
kdeTrue:密度近似関数の描画
rugTrue:実数値の描画
fitnorm:正規分布の描画

それ以外は公式サイトを参考にしてください

seaborn.distplot

#seabornをインポート.sns.set()はグラフを綺麗にするおまじない
import seaborn as sns; sns.set()

seabornにはあらかじめ用意されているデータがあり、ここからはそちらを使っていきたいと思います

#あらかじめ用意されているirisのデータを使用
iris = sns.load_dataset('iris') 
irisのデータ
sns.distplot(
    iris['sepal_width'], bins=13, label='data',
    kde=False,
    rug=False
)
plt.legend() # 凡例を表示
plt.show()   # ヒストグラムを表示
seabornヒストグラム
#色の指定なしのヒストグラム
from matplotlib import pyplot as plt
import seaborn as sns; sns.set()
iris = sns.load_dataset('iris') 
sns.distplot(
    iris['sepal_width'], bins=13, label='data',
    kde=False,
    rug=False
)
plt.legend() # 凡例を表示
plt.show()   # ヒストグラムを表示
seabornヒストグラム1
#別色ヒストグラム
from matplotlib import pyplot as plt
import seaborn as sns; sns.set() 
iris = sns.load_dataset('iris') 
sns.distplot(
    iris['sepal_width'], bins=13, color='#A0522D',label='data',
    kde=False,
    rug=False
)
plt.legend() # 凡例を表示
plt.show()   # ヒストグラムを表示
seaborn ヒストグラム2

seabornで色を変える場合には、以下のサイトを参考にしてみてください

Choosing color palettes

seabornのヒストグラムに正規分布を加える

seabornにfit=normを加えることで、正規分布を描画することができます

from matplotlib import pyplot as plt
import seaborn as sns; sns.set() 
from scipy.stats import norm

iris = sns.load_dataset('iris') 
sns.distplot(
    iris['sepal_width'], bins=13, color='#A0522D',label='data',
    kde_kws={'label': 'kde','color':'k'},
    fit=norm,fit_kws={'label': 'norm','color':'red'},
    rug=False
)
plt.legend() # 凡例を表示
plt.show()   # ヒストグラムを表示
ヒストグラム+正規分布

csvから読み込んだデータでヒストグラムを作る

from matplotlib import pyplot as plt
import seaborn as sns; sns.set() 
from scipy.stats import norm
import os
from tkinter import filedialog 

type = [("all file","*")] 
file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())  
stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)
A_list=stasticsdata.iloc[:,2]
iris=list(A_list)

sns.distplot(
    iris['sepal_width'], bins=13, color='#A0522D',label='data',
    kde_kws={'label': 'kde','color':'k'},
    fit=norm,fit_kws={'label': 'norm','color':'red'},
    rug=False
)
plt.legend() # 凡例を表示
plt.show()   # ヒストグラムを表示

読み込みたいcsvデータを選択し、選択したcsvデータの好きな列(今回の場合は3列目)をirisとして代入すれば、同じようなグラフを描画することができます

まとめ

  • ヒストグラムは度数分布の視認性を高める
  • グラフを描画する場合にはmatplotlibもしくはseaborn
  • seabornは簡単に綺麗なグラフを作成できる
  • ヒストグラム+正規分布も可能

統計学やpythonについて学んだ書籍一覧

pythonの書籍を読むならkindleがおすすめ

Python学習を進めていく上で、

「ひとまず何かしらの書籍に目を通したい」

「webで調べても全くわからない」

という状況が何度も何度でも出てくるかと思います。

そういう時に便利なのが、kindleとテラテイルです。

Kindleはご存知の通り、電子書籍です。

Kindleには多くのpython学習本が用意されており、無料で読むことができます。(たまに有料もあります)

ひとまずどういった書籍があるのか?

もしものために、書籍に目を通しておこう

という場合には、kindleの利用がおすすめです。

kindleでpythonの書籍を無料で読んでみる

おすすめプログラミングスクール

DMMWEBCAMP
  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう
WEBCAMPの公式ページはこちら WEBCAMPの口コミ・評価はこちら
テックアカデミー  
  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める
テックアカデミーの公式ページはこちら テックアカデミーの口コミ・評価はこちら
キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる
キカガクの公式ページはこちら キカガクの口コミ・評価はこちら
Aidemy Premium
  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい
Aidemy Premiumの公式ページはこちら Aidemy Premiumの口コミ・評価はこちら
My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.