要素数をカウントする
df.value_counts()
変数ごとの合計数を見れる。列指定するとその列の中の変数ごとでカウント。
欠損値の合計を見る
all_df.isnull().sum()
欠損値の合計を変数ごとに表示。
データを縦持ちから横持ちに変える
unstack()
縦持ちのデータを横持ちに変換する
文字列を数値に変換する
OneHotEncoding
カテゴリ数に応じて変数ができる。例えばAge_male, Age_femaleのように。
get_dummies()
get_dummies(drop_first=True)
Objectデータを数値データに変換してくれる。
drop_first=True
オプションをつけると、1列で判別可能な場合不要な列を消してくれる。(例:女・男だけなので、女の列だけあれば判別できる)
LabelEncoding
変数の数はそのままで数値化できる。変数の選択肢をそのまま数字に置き換えてくれる。(数字の増減に意味は持たない)例えばmale=0, female=1。
欠損値があると動かないので、欠損値を埋めてから使う。fillna()でNaNを'missing'など適当な文字列に差し替えるのもOK。(FareやAgeみたいに他のデータから推測できるものはそれで埋めた方が良さそう。)
# 初期化
le = LabelEncoder()
# fitでpandasの列を学習させる
le = le.fit(all_df['Sex'])
# transformで元の列に適用
all_df['Sex'] = le.transform(all_df['Sex'])
objectの列名を変数にリストで入れておいて、for文で一括処理も可能。
# categories = ['Sex','Embarked','honorific']
for cat in categories:
le = LabelEncoder()
if all_df[cat].dtypes == 'object':
le = le.fit(all_df[cat])
all_df[cat] = le.transform(all_df[cat])
相関行列
[データフレーム名].corr()
相関行列の作成(相関係数を並べて-1〜1の度合いを見る)。相関係数が1に近いほど正の相関が高く、(比例)、-1に近いほど負の相関(反比例)が高く、0に近いのは相関がない。
データフレームを結合する
all_df = pd.concat([train_df, test_df], sort=False).reset_index(drop=True)
pd.concat()
でデータフレームを結合できる。sort=False
とすると、結合後に行の並びが変えずにできる。オプションなしだと縦方向の結合。
rest_index(drop=True)
で、インデックス番号を振り直して、元のインデックス番号は削除する。
横方向の結合
pd.concat([all_df, name_df], axis=1)
axis=1でconcatすると、横方向に結合できる。
欠損値を埋める流れ(汎用性高い版)
# on='Pclass'でall_dfとFare_meanを紐づける。how='left'は左外部結合。デフォルトは内部結合
all_df = pd.merge(all_df, Fare_mean, on='Pclass', how='left')
# Fare列がnullの行にFare_meanを挿入。all_df['Fare'].isnull())で行を指定、'Fare'で列を指定。
all_df.loc[(all_df['Fare'].isnull()), 'Fare'] = all_df['Fare_mean']
# all_dfからFare_meanのデータフレームを削除。列を削除するのでaxis=1。
# dropしないと、欠損値埋めに使った変数がそのまま残る。
all_df = all_df.drop('Fare_mean', axis=1)
左外部結合 (LEFT OUTER JOIN)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
欠損値を埋める(一部に適用版)
all_df['alone'].fillna(0, inplace=True)
'alone'列のNaNを0に置き換える処理。inplace=True
で、元データに反映される。
Pandasでnan値を削除、穴埋めするfillna、dropnaの使い方
セルを指定する方法二つ
# index番号でセルを指定する
iloc[:,0]
# 行名、列名でセルを指定
loc[(all_df['Fare'].isnull()), 'Fare']
一つのセルの文字列を分割して列として追加する
name_df = all_df['Name'].str.split('[,.]', 2, expand=True)
name_df.columns = ['family_name', 'honorific', 'name']
expand=True
で、分割した文字列を列として追加できる。手前の数字は何列で表示するか。過不足あると列にならなかったりNoneで表示されたりする。
df.columns = [文字列]
で列名を変更できる。
文字列分割したときは念の為、各列に対してstrip()
で前後の空白を消す処理を入れる。
列を指定して不要な要素を削除
非破壊的処理なので、変数を分ければ削除前のデータは残せる。
all_df = all_df.drop(['PassengerId', 'Name', 'name', 'family_name', 'Ticket', 'Cabin'], axis=1)
条件を指定して新しい列を作る
all_df.loc[all_df['family_num'] == 0, 'alone'] = 1
'family_num'が0だったら'alone'列を1にする と言う処理。alone列は自動で作られる。
以上のコードの参照元
0 件のコメント:
コメントを投稿