ysk_son’s diary

勉強の記録

Pythonを使ったデータ分析の学習 - その4(視覚化の基礎、ヒストグラム)

巷で評判の良いPythonオンライン教材、『【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門 | Udemy』を購入し、学習してみた。

前回エントリ(Pythonの基礎,データを詳しく見てみる)はこちらから。

セクション3: まずデータに向き合おう(続き)

簡単なグラフを描いてみよう - Section3_3.ipynb (教材PART3) -

早速資料に沿って学習していく。
データ読み込みまでは例によっておなじないとして。

# おなじない
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

# データ読み込み
train = pd.read_csv("train.csv")

# データ読み込みが正しくできているか確認
train.head()

ここで以下のように表示されればOK。
f:id:ysk_son:20180205154055p:plain

さて、ここから早速グラフを描いていく。
折れ線グラフを描くにはplot関数を使う。
とても簡単でいい。

train["y"].plot()

そうするとこのように表示される。
f:id:ysk_son:20180205154419p:plain

意図した表示と異なる。
とりあえずグラフは表示されているので今は無視してすすめる。

次にグラフのサイズを大きくする。
figsize オプションでサイズを指定してあげる。

train["y"].plot(figsize=(12,4))

そうするとこのように表示される。
f:id:ysk_son:20180205154725p:plain

ピンク色の警告文は依然表示されているが、表示は正しくされているので無視して進める。
確かにグラフのサイズはさきほどよりも大きくなっている。

このグラフはお弁当の売り上げを表しており、X軸は時間、Y軸は売り上げを表しているので、
・時間が経つにつれてお弁当の売れ行きが下がっている
・時系列に関係なく、時々売り上げに関係する何者かによって、時々スパイク(売り上げが急増)している
ということがわかる。
ふむ。分析している感する。

続いてグラフにタイトルをつけてみる。
以下のように記載。

train["y"].plot(figsize=(12,4),title="グラフ")

このように表示される。
f:id:ysk_son:20180205155235p:plain

タイトルが「グラフ」と表示されない!
日本語化がうまくいかない場合、以前行ったmatplotlibの設定が正しく行われていない可能性があるらしい。
matplotlibにて日本語化の設定をやり直す必要があるということだが、今はこのまま続ける。


次にグラフのx軸とy軸に名前を付けてみる。
これが意外と面倒くさい。

このような手順で行う。
1・plot関数の結果を別の変数(ax)に代入
2・set_xlabel関数を使ってx軸のラベル付け
3・set_ylabel関数を使ってy軸のラベル付け

早速描いてみる。

ax = train["y"].plot(figsize=(12,4),title="グラフ")
ax.set_xlabel("time")
ax.set_ylabel("y")

このように表示される。
ピンク色の警告文は日本語化の設定不良によるものなので今は無視して進める。
f:id:ysk_son:20180205160123p:plain

よし。
ちゃんとラベルに名前がついている。
ということで次へ進む。

グラフを描いてみよう(ヒストグラム) - Section3_3.ipynb (教材PART3)続き -

ヒストグラムについて

折れ線グラフに続いてヒストグラムについて学習する。

ヒストグラムとは】
・縦軸と横軸で帯状
・横軸は階級と呼ばれ、数値の幅がどのくらいなのかを表す
・縦軸は度数と呼ばれ、数値の頻度がどのくらいなのかを表す

以下が代表的な4つのヒストグラムの形状。
f:id:ysk_son:20180205163239p:plain

1:山が一つのグラフ(左上)
・非常にきれいなデータの形状といえる
正規分布とかガウス分布などといわれる
・真ん中の平均が一番高いグラフとなる

1:山が複数あるグラフ(右上)
・できる集団とできない集団とに別れた場合に見られるグラフ
・難しいテストの時などに見受けられる
・こういったデータを処理する場合は「このグラフ中には2種類の集団がいるな」と考えられる

1:山が偏っているグラフ(左下)
ロングテールでだんだん数が減っていく
・Webのログデータなどに見られる
・べき乗分布と呼ばれる
・このデータの平均値は40~60あたりを指すことが多いが、ボリュームゾーンは20あたりを指すことが多い
・データの分布と平均値が一致しない代表的なヒストグラム
・平均値だけを追っているとデータの実際のかたちとアンマッチを起こしてしまう
ヒストグラムを書くことが大切を思わせられるかたち

1:外れ値があるグラフ(右下)
・外れ値を放置すると想定と異なる結果が返ってくることがある
・「外れ値がある」と発見することが大切
・外れ値を正しく処理することが大切
・データの処理の中でも外れ値の取り扱いは大切であり、難しい


以上がそれぞれのヒストグラムの特徴である。
総じて言えることは「グラフにして可視化することで、データの形状を把握することが大切」ということである。

ヒストグラムを描いてみる

ここからヒストグラムの作成に入る。
ヒストグラムの作成はplot.hist関数を使う。

train["y"].plot.hist()

このように表示される。
f:id:ysk_son:20180205170216p:plain


簡単に書けた。
とても便利でいい。

続いて見やすくするためにグリット線を表示させる。
グリット線を表示させるためにはカッコの中にオプションとして、grid=Trueと書く。

train["y"].plot.hist(grid=True)

このように表示される。
f:id:ysk_son:20180205170524p:plain

こうすることで40-60がボリュームゾーンだとわかる。
次に、「山が偏っている場合は平均値がグラフの山の盛り上がっている箇所と異なる場合がある」ので、平均線を赤く指定して入れて見やすくする。

平均値を入れる関数はplt.axvline(x=NUMBER, color="red") を使う。
まずはx=2のところに赤線を入れてみる。

plt.axvline(x=2, color="red")

こうなる。
f:id:ysk_son:20180205170942p:plain

使い方がわかったところで、先程のグラフと合体させる。

plt.axvline(x=train["y"].mean(), color="red")
train["y"].plot.hist()

こうなる。
f:id:ysk_son:20180205171353p:plain

「グラフ上の山の盛り上がったところが平均ではない」ことが確認できた。
最後にこのグラフを保存する。
その際はサイズを大きくして、タイトルをヒストグラムとして、pngファイルとして保存する。

その際の注意点は
1・plt.savefig("FILE_NAME.拡張子")を一番最後に書く
2・ファイル名は「sample_fig.png」とする
とある。
早速描いてみる。

plt.axvline(x=train["y"].mean(), color="red")
train["y"].plot.hist(figsize=(12,4),title="ヒストグラム")
plt.savefig("sample_fig.png")

こうなる。
f:id:ysk_son:20180205171737p:plain

# タイトルがお豆腐(白い□)になっているのはmatplotlibの設定が正しくないため
# 正しく処理されている場合はマイドキュメント直下に指定したファイルが作成されている

f:id:ysk_son:20180205172027p:plain
ちゃんと作成できてる!


ヒストグラムのセッションはここで終わり。
今回はここまで。
次回は次のグラフ(箱ひげ図)について学習する。

だんだん分析っぽくなってきていて楽しい。