こんにちは、Tamagoです。機械学習の勉強中です。
学習している書籍のアウトプットとして、今回は「sklearn」の「train_test_split」を使ってCSVデータを分割します。
この、「train_test_split」を使うことによって、CSVファイルの行を一定の割合で分割することが出来ます。
対象レベル
Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。
詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。
サンプルソースを読むうえで理解しておきたいこと
基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。
sklearnのインストール
sklearnはインストールが必要なので以下のコマンドを叩いてインストールしてください。
pip install sklearn
使用するCSVファイル
今回使用するCSVファイルです。
少し見ずらいのですが「 Japanese 」、「 Mathematics 」、「English」と「国語」、「数学」、「英語」3教科の点数を想定したファイルを作りました。
ファイルの作り方は「Pythonで機械学習用のCSVファイルを作成する」の記事で紹介しています。
train_test_splitの使い方
「train_test_split」の使い方は初めにインポート、分割対象のデータとパラメータを設定します。
あとで、細かく説明しますが、「分割するデータ」を「学習データ」と「テストデータ」の二つに分割します。
分割の割合は「train_size」と「test_size」を設定することによって変更できます。以下のサンプルの場合は学習データが8割、テストデータが2割で分割されます。
また、「train_test_split」のデフォルトの設定で分割する際にはCSVファイルをシャッフルして分割します。
from sklearn.model_selection import train_test_split学習データ, テストデータ, = train_test_split(分割するデータ, train_size=0.8, test_size=0.2)
行を分割 train_test_split(data, train_size=0.8, test_size=0.2)
以下のサンプルは「train_test_split」の基本的な使い方で
実行した場合は、行データをシャッフルして、8対2の割合で分割します。
分割したデータは「 x_train 」と「 x_test 」に設定されています。

行を分割(shuffleなし)train_test_split(data, train_size=0.8, test_size=0.2, shuffle=False)
先ほど、少し触れましたが、
「train_test_split」のパラメータ「shuffle」はデフォルトは「True」です。
「shuffle」を「False」にすることでCSVデータをシャフルしないで分割することができます。

列も分割 train_test_split(data1, data2, train_size=0.8, test_size=0.2)
pandasで列を分割したデータに対しても分割が可能です。
データを十文字に切るようなイメージですね。
下のサンプルソースでは、5行目、6行目で「国語」、「数学、英語」に分割したデータを分割します。
戻ってきた値は2×2で4つの値が返されます。
引数と戻り値の関係はこんな感じで「引数」のかたまりで「学習データ」と「テストデータ」が返されます。
スポンサーリンク
- japanese ⇒ j_train j_test
- other ⇒ o_train o_test


複数列を分割 train_test_split(data1, data2, data3, train_size=0.8, test_size=0.2)
列が3つ以上でも分割は可能です。以下のサンプルソースでは、「国語」、「数学」、「英語」の3教科をバラバラにしてから行単位で分割しています。



