Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

公開日 : 2018-03-04

Python 機械学習のためのデータ処理:AV女優2609件のデータから、欠損値を処理する

このエントリーをはてなブックマークに追加
Pythonを利用して、取得したAV女優2609件のデータに欠損値が含まれていたので、pandasで欠損値の前処理を行った。




#前回までの流れ


AV女優の詳細情報を取得した。

  • 名前
  • 画像(あるアダルトサイトから)
  • DMMからの画像
  • 身長
  • 誕生日
  • カップ数
  • バスト
  • ウエスト
  • ヒップ



IDnameimagedmmimageheightbirthdaycupbustwaisthip
1215志紋ELLEhttp://images16.wav.tv/115/5b1890b0cc3535.jpghttp://pics.dmm.co.jp/mono/actjpgs/simon_elle.jpg152Q1125283
983紺野美奈子http://images16.wav.tv/114/5ad9f47afcc29c.jpghttp://pics.dmm.co.jp/mono/actjpgs/konno_minako.jpg1591985-02-14P5885
2135真中ゆうきhttp://images15.wav.tv/115/5b09083cf99d47.jpghttp://pics.dmm.co.jp/mono/actjpgs/manaka_yuuki.jpg160O13783121
1271城エレンhttp://images15.wav.tv/692/0280ec1e76b07428.jpghttp://pics.dmm.co.jp/mono/actjpgs/jyou_eren.jpg1651971-07-15N1246590
995西條るりhttp://images15.wav.tv/114/5af64f2a485270.jpghttp://pics.dmm.co.jp/mono/actjpgs/saizyou_ruri.jpg1990-03-01M1115785
373市来美保http://images16.wav.tv/687/03477a950069d3a7.jpghttp://pics.dmm.co.jp/mono/actjpgs/itiki_miho.jpg165M1055687
374いちごhttp://images16.wav.tv/114/5b2cfc60ec3ebd.jpghttp://pics.dmm.co.jp/mono/actjpgs/itiki_miho.jpg165M1055687
810きみの奈津http://images15.wav.tv/115/63bb63d0dbd212.jpghttp://pics.dmm.co.jp/mono/actjpgs/kimino_natu.jpg1571995-12-18L1105784
1855ひなた結衣http://wav.tv/images/no-photo.pnghttp://pics.dmm.co.jp/mono/actjpgs/hinata_yui.jpg1521989-12-06L1055983
2094松坂南http://images16.wav.tv/691/0277f1901d2a515d.jpghttp://pics.dmm.co.jp/mono/actjpgs/matuzaka_minami.jpg1651984-02-07L1155885

#今回やりたいこと


AV女優全体のデータの全体像を見たい。なので、二つの画像を排除した。その結果の
AV女優のデータは、こんな感じ。


IDnameheightcupbustwaisthip
1215志紋ELLE152Q1125283
983紺野美奈子159P5885
2135真中ゆうき160O13783121
1271城エレン165N1246590
995西條るりM1115785
373市来美保165M1055687
374いちご165M1055687
810きみの奈津157L1105784
1855ひなた結衣152L1055983
2094松坂南165L1155885
1123漣ゆめ165L11069100
1513富沢みすず152L1238196
1698星野来夢L1006090
2503結城モナ160L1246898
1908深田ナナ165K1076395
1656新月さなえ151K986090
1664新山らん155K1106294
1205澁谷果歩150K935887
1101さくら柚希157K1156894


さらっとデータを見ている感じ、以下の問題点がある。
以下の値に、かなりの欠損値がある。


  • height
  • cup
  • bust
  • waist
  • hip


欠損値の処理方針


ということで、これらの値の欠損値について、処理していこうと思う。
考えられるオプションは以下の通り。


方法詳細メリットデメリット
①欠損値の行をまるごと削除欠損値が存在するので、その行をすべて削除する存在しない値を含まないので、より正確なデータを利用できるデータの全数が減る
②欠損値を平均で埋める欠損値の平均値を代入するデータの全数が減らないので、データの数を担保できる分散が大きい値だと、正確な予測値を利用できなくなる
③欠損値を重回帰で埋める欠損値を重回帰分析の結果を代入するデータの全数が減らないので、データの数を担保できる変数間の相関関係が見えない場合、予測値として利用することが難しい

①欠損値の行をまるごと削除する場合、データの全数が少なくなるが、より正確な分析を行うことができる。


②欠損値を平均で埋める場合、データの数は減らないが、分散が大きい変数の場合、実際の値を大きくずれることがある


③重回帰分析で埋める場合、データの数が減らず、かつ分散に関係なく、より近似値を得ることができるが、変数間に相関関係が存在しない場合使えない


今回の場合は、データ数が十分にありそうなので、先に①欠損値の行をまるごと削除を行った後に、変数間に相関関係が存在する場合は、③重回帰分析で得た値から変数で補い、もしそれで関係が見られなかったら②欠損値を平均で埋めるという方法を取得することを考えたい。




Python Pandasでデータの前処理を行う


Pythonで前処理を行う。シート4 画像データ削除後前処理前データから、欠損値を全て削除する。今回はbefore.csvという名前で保存する。
今回は可視化しやすいようにJupiter Notebookを利用するが、別にコンソールからでもできるのでインストールしてない人でもできます。


Pandasでデータの読み込み


  • pandasを入れて、read_csvで読み込む
    • すでにindex(ID)が振られている場合は、そのindexが存在する列番号を記述する(index_col=0)
  • df.head()でデータの先頭列を取得できる


import pandas as pd
df = pd.read_csv("before.csv",index_col=0) #0行目がindexだよ~
df.head()

Pandasで欠損値が存在する列名を特定する

  • isNull().anyでデータフレームの中に欠損値が存在するか取得する。
  • nameとcup以外は欠損値が存在することが判明
#nullの値が存在するか確認する
df.isnull().any()



Pandasでいらない欠損値を削除する


  • dropna()で欠損値を含む行をすべて削除
  • その削除後の値をみる(len)


#null、NAの値をすべて表から外す
droppeddf = df.dropna()

#再度全数を調べる
len(droppeddf)





  • 欠損値を削除後のデータは22%がなくなった。結構なくなったけど、これで正確になるのならよいかな。


-クリーニング前クリーニング後
件数26092037
割合100%78%

pandasでCSVに出力


  • その結果をCSVにアウトプット


#欠損値を抜いた後の結果を、CSVに出力
droppeddf.to_csv("after.csv")










スポンサーリンク