KaggleのNotebookで英語版を公開しました!(2021/03/11)
はじめに
データサイエンスのコンペティションプラットフォームであるKaggle1に取り組むとき、実行環境であるNotebook2(もしくはJupyter Notebook3やGoogle Colaboratory4)で記述するPython5の“高い頻度で利用するコード”があるかと思います。これを再利用できるように、どうせならコピーアンドペーストが容易な形式として、ひとつのセルにまとめて紹介します。このセルの中身を再利用することで、Kaggleにおけるデータ分析の効率を高めることができたら幸いです。(これぞ“Kaggleの初期装備”!)
※本記事は、Kaggler(Kaggleの参加者)の先人たちが公開しているNotebookや、書籍6などを参考にしています。しかし、あくまで2019年12月時点での個人の主観です。それゆえ、ご参考までにご覧ください。
結論
Kaggleの初期装備とは…ズバリ…
このセルだ!
# Notebookの表示
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
# 便利なもの
import tqdm
import warnings
warnings.simplefilter('ignore')
# データ操作
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', None)
# データ可視化
import pandas_profiling as pdp
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set()
# 前処理
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# 交差検証
from sklearn.model_selection import StratifiedKFold
# 定数の定義
SEED = 2019
N_FOLDS = 10
# inputとして与えられたファイル名の一覧を出力
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
解説
上記のセルについて、各ポイントを解説します。
Notebookの表示
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Notebookではセルの途中で出力を試みた図表は出力されません(例えば、pandasのDataFrameなど)。InteractiveShell
7を利用することで、以上の記述をすることによりセルの途中で出力を試みたすべての図表が出力されます。ただし、出力を試みるセルとは別のセルで事前に実行しておく必要があります。つまり、このセルを実行した場合、他のセルで適応されます。
便利なもの
import tqdm
import warnings
warnings.simplefilter('ignore')
データ分析では、多くの時間を必要とする処理があります。tqdm
8を利用することにより、プログレスバーで処理の進捗を確認できます。
また、実行に影響のない警告が表示されることがあります。これを無視するために、警告の表示を扱うモジュールwarnings
9を利用します。warnings.simplefilter('ignore')
と記述することによって警告を表示させません。
データ操作
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', None)
KaggleのNotebookでデフォルトとして記述されているコードです。データ分析における2つの必須モジュール、数値計算を行うnumpy
10、行列を扱うpandas
11を利用します。また、set_option('display.max_columns', None)
という記述により全ての列を常に表示する設定がなされます。
データ可視化
import pandas_profiling as pdp
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set()
pandas_profiling
12 を扱うことにより、各特徴量のデータ型や分布、欠損値や相関係数などをまとめて出力できます。探索的データ解析(EDA)に役立ちます。
matplotlib
13は、グラフの描画に利用するライブラリであり、そのラッパーとして動作するseaborn
14と組み合わせて利用することで美しいグラフ描画できます。
以上のようなデータの可視化はデータの全体像を理解するために重要です。
前処理
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
前処理の中でも、SimpleImputer
15を利用することで欠損値を平均値(mean)、中央値(median)、最頻値(mode)のいずれかで埋めることができます。
また、前処理について実装されているモジュールとしてsklearn.preprocessing
16 が存在します。それらに属するメソッドで、数値の前処理として、StandardScaler
17 を利用することで、特徴量の尺度を標準化できます。MinMaxScaler
18 を利用することで特徴量の尺度を正規化します。カテゴリ変数の前処理として、LabelEncoder
19 を利用することで文字列を数値で表現されるIDに変換できます。OneHotEncoder
20を利用することでベクトルに変換できます。
交差検証
from sklearn.model_selection import StratifiedKFold
モデルの過学習を防ぐ(汎化性能を高める)ために交差検証はなされます。層化K分割交差検証が実装されているStratifiedKFold
21を利用する事によって、分布の比率を維持したまま、データを訓練用とテスト用に分割してモデルの精度を検証できます。
定数の定義
SEED = 2019
N_FOLDS = 10
あらかじめ、擬似乱数のシード(SEED
)を固定し、交差検証の分割数(N_FOLDS
)を設定しておきます。これらを交差検証が実装されている関数であるStratifiedKFold
に代入することで、検証の再現性を保ちます。以下に例を示します。
skf = StratifiedKFold(n_splits=N_FOLDS, random_state=SEED)
※交差検証の分割数については10が多いという主観や自分自身もまずは10に設定していることから、N_FOLDS = 10
としています。
inputとして与えられたファイル名の一覧を出力
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
KaggleのNotebookにおいてデフォルトで記述されているコードです。これにより、まずは与えられたファイル名を確認します。
おわりに
本記事では、“Kaggleの初期装備”としてNotebookで“高い頻度で利用するコード”をまとめ、ひとつのセルとして紹介しました。そして、ポイントの解説をしました。もしご指摘や助言などありましたら気兼ねなくいただけますと幸いです。
(2019年12月03日追記)
以下の記事に掲載していただきました!ありがとうございます!
- 【Python】Qiita 週間ストック数ランキング【自動更新】(2019年12月01日 13時00分更新 )
- Python記事まとめ(毎日自動更新)(2019年12月02日 18時00分更新 )
-
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja ↩
-
https://ipython.readthedocs.io/en/stable/api/generated/IPython.core.interactiveshell.html ↩
-
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.html ↩
-
https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html ↩
-
https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing ↩
-
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html ↩
-
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html ↩
-
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html ↩
-
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html ↩
-
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html ↩