Machine Learning
Pandas, NumPy, scikit-learn など
機械学習
目的
- 分類分けされた答えを探すことを Classification という。
- 特に、A か B かという 2 パターンに分ける場合を Binary classification という。
Tips
- 説明変数と目的変数に相関があるか確認し、あれば学習データに含める
Pandas
pd.read_csv
--- CSV のインポート
# 自動生成される数値連番を行ラベルとして設定したい場合
df = pd.read_csv('../train.csv')
# 1列目の値を行ラベルとしてCSVファイルを読み込みたい場合
df = pd.read_csv('../train.csv', index_col=0)
# インデックス列についた列ラベルを削除する
df.index.name = None
# エンコーディングの指定(UTF-8, Latin-1, Windows-1252など、読めるまで試す)
df = pd.read_csv('../train.csv', encoding='UTF-8')
pd.DataFrame()
--- DataFrame を作る
pd.DataFrame({
'SomeId': some_array_or_series,
'SomeSolumn': some_array_or_series,
})
pd.concat()
--- 複数の Dataframe をマージする
pd.concat([df1, df2], axis=1)
pd.cut()
--- 数値データを categorical に変換する
cut_points = [0, 18, 60, 100]
label_names = ['Teenager', 'Adult', 'Senior']
df['Age_categories'] = pd.cut(
df['Age'],
cut_points,
labels=label_names
)
Dataframe
- API
- 表、行、列の操作は Numpy の ndarray とほぼ同じ。下記のように対応していると思ってよい。
Pandas | Numpy |
---|---|
DataFrame | 2d-ndarray |
Series | 1d-ndarray |
- Numpy の ndarray と比べたっときの dataframe の特徴
- 軸ラベルに文字列を使える
- 同じ列内に複数のデータ型を保持できる
- 列の選択
やりたいこと | Explicit Syntax | Common Shorthand |
---|---|---|
Series を取得 | df.loc[:,列名] | df[列名] |
Dataframe を取得(配列を使う) | df.loc[:,列名のArray] | df[列名のArray] |
Dataframe を取得(スライスを使う) | df.loc[:,列名:列名] | (省略形は存在しない) |
- 行の選択
行を選択したときの Series は基本的に混合型なので、dtype はobject
になることが多い。
やりたいこと | Explicit Syntax | Common Shorthand |
---|---|---|
Series を取得 | df.loc[キー] | (省略形は存在しない) |
Dataframe を取得(配列を使う) | df.loc[キーのArray] | (省略形は存在しない) |
Dataframe を取得(スライスを使う) | df.loc[キー:キー] | df[キー:キー] (ただし、インデックスが INT 型だと iloc の動作になるので注意) |
Dataframe を取得(スライスを使う) | df.iloc[数値:数値] | df[数値:数値] |
Dataframe を取得(Boolean Masks を使う) | df.loc[bool_masks] | df[bool_masks] |
- 特定のセルの選択
df.at['index', 'column']
- Boolean Masks (Boolean Arrays)
df[列名] == 'some_value'
- 各行が条件に合致するかを表す Boolean で構成された Series のこと
male = df['Sex'] == 'male'
survived = df['Survived'] == 1
# Boolean masksはフィルタ条件として使用できる
df[male]
# Boolean masks同士で演算ができる
df[male & survived]
df[male | survived]
df[male & ~survived] # ~は否定
# 中間変数を使わない場合はカッコを忘れずに
df[(df['Sex'] == 'male') & (df['Survived'] == 1)]
- 値の代入 --- 基本的に numpy と同じ
# ある列の値が〇〇である場合に何かをする、というパターン。よく使う。
df.loc[df['age'] == 0, 'age'] = 10
# NaN を意図的に代入するときは`np.nan`を使う。
df.loc[df['age'] == 0, 'age'] = np.nan
# 存在しない列名を指定すると、新しい列が作られる
df['new_column'] = 'new value'
df.sort_values(カラム名)
--- 指定したカラムで並べ替えるdf.pivot_table()
--- ピボットテーブルを Dataframe として取得する
df.pivot_table(index="Sex", values=["Survived"])
df.to_csv('filename.csv', index=False)
--- CSV を作成する。index が数値型の自動連番の場合はindex=False
を忘れずに。
df.to_csv('./result.csv', index=False)