Pythonの学習を細々とはじめていますが、思わず「パイソンパイセン、マジパネエ。」などと(心の中で)呟く瞬間が何度もあります。

今回試してみたデータ解析ライブラリ「「パンダス(pandas)」も、はじめて使った時に思わずそんな事を呟いてしまいました。

試しに前回入力した「AIソムリエ」をpandasを利用して書き換えてみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas as pd
from sklearn import svm, metrics, cross_validation
from sklearn.ensemble import RandomForestClassifier
csv = pd.read_csv('winequality-red.csv')
csv_data = csv[["fixed acidity","volatile acidity","citric acid","residual sugar","chlorides","free sulfur dioxide","total sulfur dioxide","density","pH","sulphates","alcohol","quality"]]
csv_label = csv["quality"]
train_data, test_data, train_label, test_label = \
cross_validation.train_test_split(csv_data, csv_label)
clf = RandomForestClassifier()
clf.fit(train_data, train_label)
pre = clf.predict(test_data)
ac_score = metrics.accuracy_score(test_label, pre)
print("正解率=", ac_score)

わずか11行のスクリプトです。これを実行してみます。

1
2
$ python3 work9.py
正解率= 0.985

12次元のベクトルを「決定木」で学習し、正解率98.5%の成績を納めています。

pandas

Pytonでデータ解析を行う際、pandasという拡張モジュールを利用する事で、効果的にデータを扱えるようになります。

一次元のリストを格納した辞書型データを元に様々なデータの抽出や加工が行えます。試しに名作映画を5作データ化してみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd
tbl = pd.DataFrame({
"title": [ "12 Angry Men", "The Godfather", "The Godfather: Part II ", "The Shawshank Redemption", "The Dark Knight"],
"year": [ 1957, 1972, 1974, 1994, 2008 ],
"rating": [ 8.9, 9.2, 9.0, 9.3, 9.0 ]
})
print("映画一覧")
print(tbl[["title", "year", "rating"]])
print("---ratingが9.0以上のもの")
print(tbl[tbl.rating >= 9.0])
print("---ratingを降順でソート")
print(tbl.sort_values(by="rating", ascending=False))

実行してみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
映画一覧
title year rating
0 12 Angry Men 1957 8.9
1 The Godfather 1972 9.2
2 The Godfather: Part II 1974 9.0
3 The Shawshank Redemption 1994 9.3
4 The Dark Knight 2008 9.0
---ratingが9.0以上のもの
rating title year
1 9.2 The Godfather 1972
2 9.0 The Godfather: Part II 1974
3 9.3 The Shawshank Redemption 1994
4 9.0 The Dark Knight 2008
---ratingを降順でソート
rating title year
3 9.3 The Shawshank Redemption 1994
1 9.2 The Godfather 1972
2 9.0 The Godfather: Part II 1974
4 9.0 The Dark Knight 2008
0 8.9 12 Angry Men 1957

こんな風に簡単な記述でデータを扱えます。

scikit-learnでpandasを利用する

機械学習の元となるデータを扱う際、pasdasを扱う事でデータの読み込み、学習データ・学習ラベル、テストデータ・テストラベルを簡単な記述で行うことが出来ます。

今回は元になる赤ワインのCSVデータをカンマ区切りにしてみました。EXCELで見るとこのような感じです。

冒頭のサンプルコードではこんな風に読み込んでいます。

1
2
3
import pandas as pd
csv = pd.read_csv('winequality-red.csv')

このデータを学習用のデータとラベルを抽出します。

1
2
csv_data = csv[["fixed acidity","volatile acidity","citric acid","residual sugar","chlorides","free sulfur dioxide","total sulfur dioxide","density","pH","sulphates","alcohol","quality"]]
csv_label = csv["quality"]

これで学習データの抽出が出来ました。

以下、scikit-learncross_validation.train_test_split()メソッドを利用して学習データとテストデータを分割して学習と予測を行います。

1
2
3
4
5
6
train_data, test_data, train_label, test_label = \
cross_validation.train_test_split(csv_data, csv_label)
clf = RandomForestClassifier()
clf.fit(train_data, train_label)
pre = clf.predict(test_data)

ここでは「ランダムフォレスト」を利用しました。

学習データを利用して赤ワインの味を調べる

試しにサンプルを一つ使い、ワインの味を「AIソムリエ」に聞いてみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd
from sklearn import svm, metrics, cross_validation
from sklearn.ensemble import RandomForestClassifier
csv = pd.read_csv('winequality-red.csv')
csv_data = csv[["fixed acidity","volatile acidity","citric acid","residual sugar","chlorides","free sulfur dioxide","total sulfur dioxide","density","pH","sulphates","alcohol","quality"]]
csv_label = csv["quality"]
train_data = csv_data
train_label = csv_label
test_data = [[7.4,0.7,0,1.9,0.076,11,34,0.9978,3.51,0.56,9.4,5]]
test_label = [5]
clf = RandomForestClassifier()
clf.fit(train_data, train_label)
pre = clf.predict(test_data)
ac_score = metrics.accuracy_score(test_label, pre)
print("テストラベル=", test_label)
print("解析結果=", pre)
print("正解率=", ac_score)

実行してみます。

1
2
3
4
$ python3 work10.py
テストラベル= [5]
解析結果= [5]
正解率= 1.0

正しく味を判別できました。

まとめ

Pythonは機械学習をはじめとしたデータ解析に優れていると話には聞いていましたが、使いやすいライブラリが充実している事もその理由の一つなのかな。などと初心者ながらに思いました。

そして心の中でこう呟きます。

「パイソンパイセン、マジパネエ。」

参考書籍

Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう

クジラ飛行机先生のPython本の続編が出たの購入してみました。内容が盛り沢山で1章1章楽しみながら学習しています。