0kaggleで何する?

testとtrainのデータを比較する。

二つのデータで大きな差がなければ、より適当な予測ができますね。

差異が大きければ、それだけズレるでしょう。

 

train_df.dtypes

でデータの型を見てみます。

タイタニックのデータを例にします。

#データの型
train_df.dtypes

  • intは整数(数値)
  • floatは小数(数値)
  • objectは文字列

をそれぞれ表します。

 

値がobjectのデータを見比べる。

House Prices – Advanced Regression Techniques

というコンペのデータを使っていた時、objectが多すぎてびっくりしました。

というわけで。

調べた結果。

 

#objectなcolumnを抽出する。

train_df.select_dtypes(include=object)

 

#データ型objectであるcolumのリストが欲しい。

list(train_df.select_dtypes(include=object).columns)

たどり着いたのがこのコード

for col in list(train_df.select_dtypes(include=object).columns):
  print(train_df[col].value_counts())
  print(test_df[col].value_counts())

もっとシンプルにtrainとtestを見比べられたらいいのだけれど。

例えばNoSeWaはtrainデータにはあるがtestデータにはない。どうする?

(機械学習の仕組みが今だにわからないので扱い方がふめい)

こちらも結構偏りが。(偏りの程度をどのように評価するかが問題だが機械学習の仕組みがわからないからなんとも言ない)

groupbyを使ってこんな情報も得られるようですが不明。

数値なのにobject?

そんなデータセットもあるそうです。

df[‘object型で書かれた数値を表すのコラム’] = df[‘object型で書かれた数値を表すのコラム’].astype(int)

 

to_numericというメソッドを使ってもできるそうです。

 

値が数値のデータを比較する

for col in list(train_df.select_dtypes(include=int).columns):
  print(train_df[col].describe())
  print(test_df[col].describe())

LotAreaの最大値がかなり偏っている。

この偏りあるデータが機械学習のプロセスでどのように処理されるのか、仕組みが知りたい。

データを整える。

 

データの欠損値をどうにかする。

欠損値があると機械学習してくれないから「適切な値で補う」。

欠損値が多すぎるcolumnsは「削除する」こともあり。

欠損値の存在を知る。

all_df.isnull().sum()

columが多いととんでもない数が出て、「全部なんとかしないとダメなのか」と思う。

House Prices – Advanced Regression Techniquesの欠損の一部を紹介。

データがないのか、それとも意味のあるNANなのかを判断する。

 

 

House Prices – Advanced Regression Techniquesのデータの中にあるdata_description.txtに

と書かれており、PoolQCのNAは欠損ではなく、「プールありません」の意味だという。

 

削除する

例えば

Titanic – Machine Learning from DisasterのCabinは欠損が多く含まれています。

この「値なし」は「未知」「わからない」「データがない」という意味です。

Pclassがわかっていたらいい、Cabinの情報はいらないと判断すれば、消してしまいましょう。

all_df.drop(columns=['Name','Ticket','Cabin'], inplace=True)

他にも消したい列があればここで。

ヘンテコなパラメータを置き換えて、消す?

# それぞれのカラムに ? が何個あるかカウント
auto = auto[[‘price’, ‘horsepower’, ‘width’, ‘height’]]
auto.isin([‘?’]).sum()
# ‘?’をNaNに置換して、NaNがある行を削除
auto = auto.replace(‘?’, np.nan).dropna()

 

平均値で埋め合わせる

タイタニックのFareを平均値で埋めるのはアリですが、平均値で埋める以外の、もっと妥当な理屈で欠損値を埋めたほうが気持ちがいいですね。

all_df['Fare'].fillna(fare_calc['Fare'].mean(),inplace=True)

文字列を数値に変換する

replace

データが文字列で表されていたら、機械は学習してくれないそうです。

all_df['Sex'].replace(['male','female'],[0,1], inplace=True)

これでSexの中身が変化します

inplace=Trueは上書きです。

Pandasで欠損値処理 - Qiita
はじめにpandasでデータ分析を行うとき、分析したいデータが欠損している場合があります。データの欠損を放置したまま分析を行うと、おかしな分析結果が導かれてしまう可能性があります。そこで、この記事…

 

get_dummies

別の方法で、pandasのメソッドを使うと。

all_df = pd.get_dummies(all_df, columns=["Embarked"])

 

all_df =の件は、未確定です。

dtypeを調べたらこうなった。categoryというタイプにはならなかった。

mapを使う

mushroom_dummy[‘flg’] = mushroom[‘classes’].map(lambda x: 1 if x ==’p’ else 0)
これで中身がpなら1を代入し、それ以外なら0を代入してくれます。

数値がカテゴリーを表すかどうかを判断する。

カテゴリーを表す数値(特定の値しか取らない)なのか、比例尺度を表す数値(例えば金額や年齢)なのか。

文字列を数値に変換したので、なんのことかわかりますね。

グループを表す数値なのか、どうか。

データを取得したコンペのページのDataタブを開くとData Dictionaryにパラメータの意味が載っています。

columnを500こ表示させたいなら

pd.set_option('display.max_columns', 500)

 

外れ値を除外する(視覚化する)

 

機械学習の色々なアルゴリズムの中身がわからないとなぁ。

コメント