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-learn
のcross_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章楽しみながら学習しています。