Pythonを使ったデータ分析の学習 - その5(箱ひげ図、欠損値の処理)
巷で評判の良いPythonオンライン教材、『【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門 | Udemy』を購入し、学習してみた。
セクション3: まずデータに向き合おう(続き)
グラフを描いてみよう(箱ひげ図) - Section3_3.ipynb (教材PART3) -
早速資料に沿って学習していく。
箱ひげ図とは…
・データ分布を確認するための図
・英語ではBoxplot
・最大値、最小値、中央値、上側ヒンジ、下側ヒンジがわかる
上側ヒンジ:大きい順に並べた時の上25%にある数字
下側ヒンジ:小さい順に並べた時の下25%にある数字
早速描いていく。
# yとweekの関係を調べる為に、箱ひげ図を描く train[["y","week"]].boxplot(by="week")
このように表示される。
Matplotlibの設定が不正だから曜日の表示がお豆腐(白いしかく)になってるが、今はスルー・
・曜日の順番はぐちゃぐちゃ
・何曜日が売れたか視覚的にわかりやすい
・月曜日には最も売れた日が含まれている
ここから実習。
# 1.trainのtemperatureの折れ線グラフを描いてみよう。タイトルとx軸、y軸にもそれぞれ名前をつけよう # x軸とy軸に名前を付ける為に、グラフは一旦変数axに代入しよう # タイトル名は「気温」、x軸は「time」、y軸は「temperature」としよう ax = train["temperature"].plot(title="気温") ax.set_xlabel("time") ax.set_ylabel("temperature") # 2.trainのkcalのヒストグラムを描いてみよう。trainのkcalの平均を表す赤線も入れよう plt.axvline(x=train["kcal"].mean(),color="red") train["kcal"].plot.hist() # 3.trainのyとweatherとの関係を調べる為に、箱ひげ図を描いてみよう # x軸はweatherにしましょう train[["y","weather"]].boxplot(by="weather")
それぞれこのように表示される。
1・
2・
3・
折れ線グラフ、ヒストグラム、箱ひげ図。グラフの可視化についてはここまで。
欠損値を調べてみよう
続いて欠損値を調べる。
使用するデータは例によって train.csv。
気がついたのだけど、データがしっかりとCSVで保管されているのであれば、データ分析は容易なのだろう。
# おまじない import pandas as pd import numpy as np from matplotlib import pyplot as plt %matplotlib inline # データ読み込み train = pd.read_csv("train.csv") # trainの先頭行の確認(データ読み込みが正しいかのチェック) train.head()
ここまではいつもどおりなので画面ショットは割愛。
ここから欠損値を取り扱う。
まず、各値が欠損値か否かを出力する。
・欠損とは、何らかの理由で、データの値が入っていない状態のこと
・データ分析において欠損がある場合の対応はとても重要である
・欠損の有無を確認する為にはisnull関数を使う
・欠損値の時、Trueと表示される
train.isnull()
このように表示される。
Trueの箇所が欠損値であることがわかる。
(欠損値の定義をしなくていいのは捗る)
しかしこれでは見づらいので、各列(カラム)にTrueが1つ以上あるかないかを確かめてみる。
・isnull関数のあとにany関数を付け加える。
・付け加える時はドット(.)で繋ぐ。
・1つ以上欠損値を含んでいる場合、Trueと表示される。
train.isnull().any()
このように表示される。
次に具体的に各列(カラム)に欠損値が幾つあるか数える。
・isnull関数のあとにsum関数を付け加える
train.isnull().sum()
このように表示される。
kcal,remarks,eventあたりは欠損値だらけであるとがわかったので、続けて欠損値の処理をする。
・欠損値の処理は別のなんらかの値を代入(補間)するか、欠損値を含む行を削除するかで対応する
・ここではまず、欠損値を0で補間する
・補間にはfillna関数を使う
train.fillna(0)
確かにさっきまで NaN だった欄に 0 が補間された。
続いて欠損値を削除してみる。
・dropna関数を使う
・ある列に欠損値があった場合のみ、その行を削除したい場合はオプションとしてsubset=[ ]を使う
train.dropna()
このように表示される。
確かにkcalに欠損値がある行が削除されている!
最後にprecipitationには本当に欠損値がないか確認する
・行の中の値がそれぞれ幾つあるかを確認したい場合は、value_counts関数を使う
train["precipitation"].value_counts()
このように表示される。
欠損値が169個あることがわかった。
欠損値についてはここまで、次回は相関関係を見ていく。
# ここまでで セッション3.39 欠損値を調べてみよう まで終わり。