LoginSignup
5
4

More than 3 years have passed since last update.

【初心者向けハンズオン】kaggleの「住宅価格を予測する」を1行ずつ読み解く(第4回:欠損値の補完(完))

Posted at

お題

 有名なお題であるkaggleの「House Price」問題にみんなでチャレンジしていくことになったハンズオンの内容をメモしていく企画の第4回。解説というよりはメモのまとめだったりもしますが、どこかの誰かのためになれば幸いです。4回目にもなると徐々に徐々に溜まってきたなあという印象。

本日の作業

欠損値の補完(今週こそここやる)

前回まででやったのは、「欠損値を含むindexを配列で取得する」というやつでした。
(そういえば「pythonって配列の概念が色々あってめんどくさいな」ていうのをぼやいた気がします)

# データ型に応じて欠損値を補完する
# floatの場合は0
# objectの場合は'NA'
na_float_cols = alldata[na_col_list].dtypes[alldata[na_col_list].dtypes=='float64'].index.tolist() #float64
na_obj_cols = alldata[na_col_list].dtypes[alldata[na_col_list].dtypes=='object'].index.tolist() #object
# float64型で欠損している場合は0を代入
for na_float_col in na_float_cols:
    alldata.loc[alldata[na_float_col].isnull(),na_float_col] = 0.0
# object型で欠損している場合は'NA'を代入
for na_obj_col in na_obj_cols:
    alldata.loc[alldata[na_obj_col].isnull(),na_obj_col] = 'NA'

数値型で欠損値を持つindexたち

※これの詳細は第3回でやったので割愛。

alldata[na_col_list].dtypes[alldata[na_col_list].dtypes=='float64'].index.tolist()
スクリーンショット 2020-06-15 11.52.37.png

カテゴリカル変数で欠損値を持つindexたち

※これの詳細は第3回でやったやつとほぼ同じなので割愛。

alldata[na_col_list].dtypes[alldata[na_col_list].dtypes=='object'].index.tolist()
スクリーンショット 2020-06-15 11.55.30.png

数値型の欠損値を代入

for na_float_col in na_float_cols:
    alldata.loc[alldata[na_float_col].isnull(),na_float_col] = 0.0

今更だけど繰り返しfor in について

今更forについてちゃんと読んでみる。PHPで記述するのと変数とオブジェクトの順番が逆(言い方正しいか不明)なんですね。
* forに関する参考:https://udemy.benesse.co.jp/development/web/python-for.html
* 今回の変数:no_float_col
* 今回の繰り返し内のオブジェクト:no_float_cols

しつこいけど.isnull()

na_float_colalldata[na_float_col]を出力してみる。中身をとりあえず見てみるのは、繰り返し処理の動作確認をする上での鉄板ですね。

  • na_float_colの1回目
    「欠損値が含まれるindex」の名称が出てますね。
    スクリーンショット 2020-06-15 12.06.08.png

  • alldata[na_float_col]の1回目
    「欠損値が含まれるindex」の値の配列が出てきますね。
    スクリーンショット 2020-06-15 12.07.19.png

  • .isnull()の結果
    isnull()を使って各値がnullかどうかを判定しています。
    alldata[na_float_col].isnull()を出力
    スクリーンショット 2020-06-15 12.09.05.png

.locについて

alldata.loc[alldata[na_float_col].isnull(),na_float_col]
* .log:どうやら行列的に、行・列で値を見たり出力したりするのに使える様子
* .locの参照:https://note.nkmk.me/python-pandas-at-iat-loc-iloc/
* alldata.loc[alldata[na_float_col].isnull(),na_float_col]の出力結果
スクリーンショット 2020-06-15 12.13.04.png

欠損値に値を設定

行列的に指定して、欠損値のところだけ「0.0」を入れる。
alldata.loc[alldata[na_float_col].isnull(),na_float_col] = 0.0

カテゴリカル変数の欠損値の補完

※ほぼ同じなので割愛します。

欠損値の補完結果

1つずつの項目は細かすぎて見れないけど、これで行けているはず。

alldataの出力結果
スクリーンショット 2020-06-15 12.17.07.png

カテゴリカル変数のダミー化

を、やろうと思いましたが時間切れなったので、「カテゴリカル変数のダミー化」の予習にして終わりたいと思います。解析できるように数値化する的な感じか。。。?

おしまい。

欠損値の補完、、思ったより読み解きに時間がかかってしまいました。これが1行に処理を何でも詰め込むPythonの罠かと(なれてくれば罠でも何でもなくなればいいんですが)。

そろそろ実際の処理が近づいていて着ている匂いがしてきてワクワクしてきます。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4