LoginSignup
52
51

More than 1 year has passed since last update.

Kaggleの初期装備〜高い頻度で利用するコードをまとめたひとつのセル〜

Last updated at Posted at 2019-11-30

KaggleのNotebookで英語版を公開しました!(2021/03/11)

はじめに

データサイエンスのコンペティションプラットフォームであるKaggle1に取り組むとき、実行環境であるNotebook2(もしくはJupyter Notebook3やGoogle Colaboratory4)で記述するPython5の“高い頻度で利用するコード”があるかと思います。これを再利用できるように、どうせならコピーアンドペーストが容易な形式として、ひとつのセルにまとめて紹介します。このセルの中身を再利用することで、Kaggleにおけるデータ分析の効率を高めることができたら幸いです。(これぞ“Kaggleの初期装備”!)

※本記事は、Kaggler(Kaggleの参加者)の先人たちが公開しているNotebookや、書籍6などを参考にしています。しかし、あくまで2019年12月時点での個人の主観です。それゆえ、ご参考までにご覧ください。

結論

Kaggleの初期装備とは…ズバリ…

このセルだ!

Kaggleの初期装備〜高い頻度で利用するコードをまとめたひとつのセル〜.py
# 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など)。InteractiveShell7を利用することで、以上の記述をすることによりセルの途中で出力を試みたすべての図表が出力されます。ただし、出力を試みるセルとは別のセルで事前に実行しておく必要があります。つまり、このセルを実行した場合、他のセルで適応されます。

便利なもの

import tqdm
import warnings
warnings.simplefilter('ignore')

データ分析では、多くの時間を必要とする処理があります。tqdm 8を利用することにより、プログレスバーで処理の進捗を確認できます。
また、実行に影響のない警告が表示されることがあります。これを無視するために、警告の表示を扱うモジュールwarnings9を利用します。warnings.simplefilter('ignore')と記述することによって警告を表示させません。

データ操作

import numpy as np
import pandas as pd
pd.set_option('display.max_columns', None)

​KaggleのNotebookでデフォルトとして記述されているコードです。データ分析における2つの必須モジュール、数値計算を行うnumpy10、行列を扱うpandas11を利用します。また、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_profiling12 を扱うことにより、各特徴量のデータ型や分布、欠損値や相関係数などをまとめて出力できます。探索的データ解析(EDA)に役立ちます。
matplotlib13は、グラフの描画に利用するライブラリであり、そのラッパーとして動作する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

前処理の中でも、SimpleImputer15を利用することで欠損値を平均値(mean)、中央値(median)、最頻値(mode)のいずれかで埋めることができます。

また、前処理について実装されているモジュールとしてsklearn.preprocessing 16 が存在します。それらに属するメソッドで、数値の前処理として、StandardScaler 17 を利用することで、特徴量の尺度を標準化できます。MinMaxScaler18 を利用することで特徴量の尺度を正規化します。カテゴリ変数の前処理として、LabelEncoder 19 を利用することで文字列を数値で表現されるIDに変換できます。OneHotEncoder20を利用することでベクトルに変換できます。

交差検証

from sklearn.model_selection import StratifiedKFold 

モデルの過学習を防ぐ(汎化性能を高める)ために交差検証はなされます。層化K分割交差検証が実装されているStratifiedKFold21を利用する事によって、分布の比率を維持したまま、データを訓練用とテスト用に分割してモデルの精度を検証できます。

定数の定義

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日追記)
以下の記事に掲載していただきました!ありがとうございます!

  1. https://www.kaggle.com/

  2. https://www.kaggle.com/docs/kernels

  3. https://jupyter.org/

  4. https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja

  5. https://www.python.org/

  6. https://www.amazon.co.jp/o/ASIN/4297108437/gihyojp-22

  7. https://ipython.readthedocs.io/en/stable/api/generated/IPython.core.interactiveshell.html

  8. https://tqdm.github.io/

  9. https://docs.python.org/ja/3/library/warnings.html

  10. https://numpy.org/

  11. https://pandas.pydata.org/

  12. https://pandas-profiling.github.io/pandas-profiling/docs/

  13. https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.html

  14. https://seaborn.pydata.org/

  15. https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html

  16. https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing

  17. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

  18. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html

  19. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

  20. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

  21. https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html

52
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
51