Python 実践 データ加工/可視化 100本ノック」を購入したので、
一通りやっているところです。今日はノック81 ノック82を行います。
資料は以下から入手できます。
Python実践 データ加工/可視化 100本ノック|サポート|秀和システム
実行環境はWindows10、Vscode+anaconda3.8.5です。
ノック81 : 機械学習で予測するデータを設定しよう
機械学習をおこなう入力データを読み込みます。
seabornライブラリを使用します。
seabornはMatplotlibの機能をより美しく、より簡単に実現するための
可視化用のライブラリです。
タイタニックのデータが用意されているのでこのデータをまずは読み込みます。
実行結果
survived pclass sex age sibsp ... adult_male deck embark_town alive alone
0 0 3 male 22.0 1 ... True NaN Southampton no False
1 1 1 female 38.0 1 ... False C Cherbourg yes False
2 1 3 female 26.0 0 ... False NaN Southampton yes True
3 1 1 female 35.0 1 ... False C Southampton yes False
4 0 3 male 35.0 0 ... True NaN Southampton no True
.. ... ... ... ... ... ... ... ... ... ... ...
886 0 2 male 27.0 0 ... True NaN Southampton no True
887 1 1 female 19.0 0 ... False B Southampton yes True
888 0 3 female NaN 1 ... False NaN Southampton no False
889 1 1 male 26.0 0 ... True C Cherbourg yes True
890 0 3 male 32.0 0 ... True NaN Queenstown no True
[891 rows x 15 columns]
891個のデータがあり、データの特長となる項目が15個あることがわかります。
一列データを抽出する場合はpopを使用します。
survivedが1が生き残ったことを表しています。
実行結果
0 0
1 1
2 1
3 1
4 0
..
886 0
887 1
888 0
889 1
890 0
Name: survived, Length: 891, dtype: int64
データはデータフレーム型なので、Survived=1の数をデータからカウントしてみます。
su1にはsuvived=1であるdatasetの情報が代入されます。
su2にはsurvived=1だるdatasetのsurvivedの列の情報が代入されます。
実行結果
survived pclass sex age sibsp ... adult_male deck embark_town alive alone
1 1 1 female 38.0 1 ... False C Cherbourg yes False
2 1 3 female 26.0 0 ... False NaN Southampton yes True
3 1 1 female 35.0 1 ... False C Southampton yes False
8 1 3 female 27.0 0 ... False NaN Southampton yes False
9 1 2 female 14.0 1 ... False NaN Cherbourg yes False
.. ... ... ... ... ... ... ... ... ... ... ...
875 1 3 female 15.0 0 ... False NaN Cherbourg yes True
879 1 1 female 56.0 0 ... False C Cherbourg yes False
880 1 2 female 25.0 0 ... False NaN Southampton yes False
887 1 1 female 19.0 0 ... False B Southampton yes True
889 1 1 male 26.0 0 ... True C Cherbourg yes True
[342 rows x 15 columns]
surveved=1(342個)のdatasetの情報が表示されます。
実行結果
0 False
1 True
2 True
3 True
4 False
...
886 False
887 True
888 False
889 True
890 False
Name: survived, Length: 891, dtype: bool
survived num= 342
survived=1に対してTrueを返してきます。
Trueの数をsum()でカウントしています。 342個であることがわかります。
ノック82 : TrainデータとTestデータに分割しよう
機械学習を行うトレーニング用のデータと、トレーニングしたデータをもとにどれくらいの精度か確認するテスト用のデータを作成します。
今回はシンプルに元データを2分割してそれぞれをTrainデータ、Testデータとしています。
トレーニングデータとテストデータの分割にはsklearnのtrain_test_splitを使用します。train_test_splitの引数は以下の通りです。
sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
arrays:第1引数には入力データを指定します。このデータをトレーニング用のデータとテスト用のデータに分割します。
test_size:テスト用のデータのサイズをしていします。デフォルトは25%です。
train_size:トレーニング用のデータサイズを指定します。デフォルトは75%です。
random_state:トレーニング用のデータとテスト用のデータを分割する際に、データをランダムに抽出します。値を設定することでランダム性に規則性をもたせることができます。random_state=2020とすると、ランダムにデータを振り分けるが、毎回その結果がおなじとなります。random_state=3と任意の別の値を設定すると、データは2020を指定した場合と異なる振り分けになりますが、3を指定し続ける限り振り分けられたデータの中身は同じとなります。
shuffle:Falseに指定するとランダムにデータを振り分けるのではなく上から順番にデータを取得して振り分けます。
stratiry:均等に分割させたいデータ(多くの場合は正解ラベル)を指定すると、そのデータの値の比率が一致するように分割されます。戻り値はトレーニング用のデータ、テスト用のデータとなります。
ここではarraysを2つ指定しているので、戻り値も4つとなっています。
test_size、train_sizeは省略していますが、test_size=0.25と記述しても同じ結果となります。
datasetを分割した戻り値はtrain_ds test_ds です。
labelを分割した戻り値はtrain_label test_label です。
実行結果
(891, 14)
(668, 14)
891個のデータに対して、891x0.75≒668個がトレーニング用に振り分けられています。(14は列の数(説明変数の数)です。survivedをpopしたので15から14になっています。)
実行結果
(891,)
(668,) (223,)
labelのデータも同様に75:25に分割されていることがわかります。