kaggleは以前から知っていたものの、操作手順や使い方が分からず、あまり触っていませんでした。
今回Udemyで基礎から学べたので、書き残しておきます。
参考にした講座
https://www.udemy.com/course/kagglepython-ai/
学んだこと
- データ分析の手順
- ノートブックの作成方法
- データの加工・抽出方法
- 成果物の提出方法
データ分析の手順
講座の「No.52 モデル作成の流れ」より、大まかなモデルを作成するまでの流れを学びました。
1. パッケージ、ライブラリのインポート
データ加工や抽出をする際、KaggleではさまざまなPythonライブラリやパッケージを用いるため、先にインポートしておきます。
2. データを読み込む
Kaggle側からCSVデータが提供されているため、それをまずは読み込みます。
3. EDA(探索的データ分析)
ヒストグラムやその他のライブラリを使って、データを可視化したり、データそのものの傾向や特徴を把握します。
4. 特徴量エンジニアリング
制度の良いモデルを作成するために、提供されているデータを加工します。
5. アルゴリズムの学習
アルゴリズムにもさまざまな種類があるため、適切なアルゴリズムを選定し、実際にモデルを作成していきます。
6.予測
提供されているテストデータを使って、作成したモデルから予測します。
以上が作成したモデルを提出するまでの流れです。
ノートブックの作成方法
講座の「No.51 Kaggleの基本操作を確認しよう③」から学びました。
ノートブックはコンペに参加した後、コンペ画面のCodeタブから「New Notebook」を選択して、作成することができます。
データの加工・抽出方法
パッケージの読み込み
データ分析の手順にもあるように、まずはパッケージの読み込みをしていきます。
#パッケージの読み込み
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import pyplot as plt
それぞれのライブラリの意味は下記の通りです。
- Numpy
- Pythonで数値計算を効率的に行うためのライブラリ
- ベクトル(1次元配列)や行列(2次元配列)などの多次元配列を作ることができます
- Pythonで数値計算を効率的に行うためのライブラリ
- Pandas
- データ解析を容易にする機能を提供するPythonのデータ解析ライブラリ
- Pythonでデータ解析をする際に、データの前処理の工程を実施できます
- データ解析を容易にする機能を提供するPythonのデータ解析ライブラリ
- Matplotlib
- Pythonのグラフ描画のためのライブラリ
- 折れ線グラフ、ヒストグラムや散布図などグラフ描画する事が可能です
- Pythonのグラフ描画のためのライブラリ
- Seaborn
- Matplotlibと同様に図を描くことができますが、 より少ないコードで図が描けます
CSVデータの読み込み
そして、提供されたCSVファイルを読み込みます。
講座の「No.53 Lesson1:データを読み込んでみよう」を見ました。
#データの読み込みはPandasの「read_csv()」
data_train = pd.read_csv('../input/titanic/train.csv')
data_test = pd.read_csv('../input/titanic/test.csv')
data_gender_submission = pd.read_csv('../input/titanic/gender_submission.csv')
train.csv
トレーニングデータとなります。トレーニングデータとは、AIモデルや機械学習アルゴリズムが適切な判断を導くことができるように意味付けされたデータです。
test.csv
作成したモデルから「どれくらい正しく予測できているか」を確認するためのデータ。
gender_submission.csv
提出形式で格納されたサンプルデータです。
データの加工の下準備
モデル作成のデータの加工は非常に重要で、1つ1つのデータを加工してくので、コード量も増えていきます。
基本的には以下を行なっています。
- 訓練データとテストデータを結合
- データの種類分だけ列を展開し、0か1で表現するOne-Hotエンコーディングを行う
- 欠損地を何らかの数値に置き換える
- 今回の説明変数(分析対象データの中の、予測の手掛かりとなる変数)は削除
#訓練データとテストデータ、双方にエンジニアリングを行うため、一旦1つに結合
data_all = pd.concat([data_train, data_test], sort=False)
#Sexの値を数値に置き換え
data_all['Sex'].replace(['male', 'female'], [0,1], inplace=True)
#Embarkedの欠損地を補完し、数値に置き換える
data_all['Embarked'].fillna('S', inplace=True)
data_all['Embarked'].replace(['S', 'C', 'Q'], [0, 1, 2], inplace=True)
#FareとAgeの欠損値を平均値で補完する
data_all['Fare'].fillna(np.mean(data_all['Fare']), inplace=True)
data_all['Age'].fillna(np.mean(data_all['Age']), inplace=True)
#影響の少なそうな説明変数は一旦削除する
drop_columns = ['PassengerId', 'Name', 'Parch', 'SibSp', 'Ticket', 'Cabin']
data_all.drop(drop_columns, axis=1, inplace=True)
結合したデータの分離
結合したデータを、再度教師データとテストデータに分離しました。
先頭行から訓練データ分のデータを抜き出し、それ以外のデータは別の変数に入れました。
目的変数は、今回の予測の対象となるSurvived(生き残った人)となります。
# 訓練データとテストデータに分離
data_train = data_all[:len(data_train)]
data_test = data_all[len(data_train):]
#説明変数と目的変数を分離
y_data_train = data_train['Survived']
#目的変数はSurvivedだけ削除。axis=1は列を削除
X_data_train = data_train.drop('Survived', axis=1)
X_data_test = data_test.drop('Survived', axis=1)
モデルの作成
今回はランダムフォレストアルゴリズムを使って、モデルを作成しました。
ランダムフォレストとは、は簡単に言うと沢山の決定木を作成してその多数決をとるアルゴリズムです。
from sklearn.ensemble import RandomForestClassifier
#n_estimators:決定木の本数
#max_depth:階層。条件をどこまで深掘りするか
#random_state:乱数の指定
clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)
作成したモデルで予測
#predictの閾値は0.5がデフォルトなので,0.5以上を1、未満を0として返す
y_data_pred = clf.predict(X_data_test)
このようにして、データの加工・抽出を行い、モデルを作成していきます。
成果物の提出方法
提出用のCSVファイルを作成します。
提供されていたdata_gender_submission
のSurvivedの列に、今回作成した予測結果をデータとして取り込みます。
そして、別のCSVファイルに変換します。
submit = data_gender_submission
submit['Survived'] = list(map(int, y_data_pred))
submit.to_csv('randomForest_submit.csv', index=False)
作成できたら右側に記載されているsubmitを押して、提出します。
これでコンペ参加から成果物の提出までが完了しました。
まとめ
今回はKaggle初心者ということで、まずはKaggleの操作方法を学びつつ、有名なタイタニックのコンペに参加しました。
Kaggleでの基本的な使い方を学んだので、これからも別のコンペに参加していきます。
コラム
今回タイタニックをやってみて印象に残ったことは、簡単にモデルの作成ができることです。
ライブラリが優秀すぎて、これほど簡単とは思いませんでした。もちろん、まだどんなことをしているかは分からないですが、何を意図したライブラリなのかは最低限知っておくようにしたいです。
ここでは記載しませんでしたが、profile_report
もすごかったです。
これほど賢くデータを加工・抽出して、レポートとして表示され、非常に驚かされました。
奥深いデータサイエンスを小さく学んでいきます。