RapidMiner
python-rapidminerでpythonからRapidMinerを呼び出す
みなさんこんにちは!
KSKアナリティクスの岡地です。
今回は、PythonからRapidMinerを呼び出す
「python-rapidminer」をご紹介いたします!
python-rapidminerとは?
python-rapidminerとは、2019年5月にRapidMiner社が作成した
pythonとRapidMinerをつなぐためのpythonライブラリです。
python-rapidminerができることは以下の3つです。
・RapidMinerにあるデータをpythonで読み込む
・pythonからRapidMinerにデータを出力する。
・pythonからRapidMinerのプロセスを実行して結果をpythonで受け取る。
今回はGitHubにpython-rapidminerのチュートリアルが上がっているので
それを参考に簡単に使ってみます。
python-rapidminerのインストール
python-rapidminerのインストールは以下のコマンドで簡単にできます。
■pipを使用する場合
pip install git+https://github.com/rapidminer/python-rapidminer.git
■git cloneを使用する場合
git clone https://github.com/rapidminer/python-rapidminer.git
cd python-rapidminer
python setup.py install
ただし、以下の点に気をつけてください。
・RapidMinerのバージョンが9.3.0以上であること
・RapidMinerにPython Scriptingエクステンション 9.3.0がインストールされていること
使用する場合は、まずConnectorオブジェクトを作成する必要があります。
>>> import rapidminer
>>> connector = rapidminer.Studio(“/path/to/your/studio/installation”)
“/path/to/your/studio/installation”にはRapidMiner Studioのロケーションを入力します。
Windowsの場合:”C:¥Program Files¥RapidMiner¥RapidMiner Studio”
Macの場合:”/Applications/RapidMiner Studio.app/Contents/Resources/RapidMiner-Studio”
RapidMinerにあるデータをpythonで読み込む
RapidMinerからpythonへデータを読み込む場合は以下のコードを実行します。
>>> df = connector.read_resource("//Samples/data/Iris")
>>> df.head(5)
a1 a2 a3 a4 id label
5.1 3.5 1.4 0.2 id_1 Iris-setosa
4.9 3.0 1.4 0.2 id_2 Iris-setosa
4.7 3.2 1.3 0.2 id_3 Iris-setosa
4.6 3.1 1.5 0.2 id_4 Iris-setosa
5.0 3.6 1.4 0.2 id_5 Iris-setosa
Note that each Studio method starts a Studio instance in the background and stops it when it is done.
とGitHubに書かれている通り、Studioメソッドを使用する度にRapidMiner Studioを起動し、
処理が終われば停止するみたいです。したがって、上記のコードの実行には少し時間がかかります。
複数のデータを読み込む場合は、
>>> iris, deals, golf = connector.read_resource(["//Samples/data/Iris", "//Samples/data/Deals", "//Samples/data/Golf"])
のようにリストで複数のパスを指定すると、何度もRapidMinerを起動せずに済みます。
pythonからRapidMinerへデータを書き出す
まず、python側でデータを準備します。
>>> import pandas as pd
>>> from sklearn.datasets import load_iris
>>> sklearn_iris = load_iris()
>>> iris = pd.DataFrame(sklearn_iris["data"], columns=sklearn_iris["feature_names"])
>>> iris["target"] = sklearn_iris["target"]
>>> iris.head(5)
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
0 5.1 3.5 1.4 0.2 0
1 4.9 3.0 1.4 0.2 0
2 4.7 3.2 1.3 0.2 0
3 4.6 3.1 1.5 0.2 0
4 5.0 3.6 1.4 0.2 0
pythonからRapidMinerへデータを書き出す場合は以下のコードを実行します。
>>> connector.write_resource(iris, "//Local Repository/data/sklearn_iris")
すると、以下のようにRapidMinerでデータを読み込むことができます。
データを書き出す場合も、パスを複数指定することによって、
複数のデータをRapidMinerに書き出すことができます。
>>> from sklearn.datasets import load_wine
>>> sklearn_wine = load_wine()
>>> wine = pandas.DataFrame(sklearn_wine["data"], columns=sklearn_wine["feature_names"])
>>> wine["target"] = sklearn_wine["target"]
>>> connector.write_resource([iris, wine], ["//Local Repository/data/Iris", "//Local Repository/data/Wine"])
pythonからRapidMinerのプロセスを実行する
まず、pythonから実行するプロセスを表示します。
このプロセスは”//Samples/processes/02_Preprocessing/01_Normalization”です。
これをpythonから実行する場合は以下のコードを実行します。
>>> normalized_iris = connector.run_process("//Samples/processes/02_Preprocessing/01_Normalization")
また、run_processは引数inputとoperatorを指定することによって、
pythonからデータを渡し、RapidMinerのオペレータを実行することができます。
pythonから渡すデータはwineデータです。
以下のコードでは、相関の高い変数をわざと作成しています。
>>> from sklearn.datasets import load_wine
>>> wine = pandas.DataFrame(sklearn_wine["data"], columns=sklearn_wine["feature_names"])
>>> wine["target"] = sklearn_wine["target"]
>>> wine["correlated1"] = wine["alcohol"]*2
>>> wine["correlated2"] = wine["alcohol"]+wine["magnesium"]
>>> list(wine.columns.values)
['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline', 'target', 'correlated1', 'correlated2']
wineデータに対し、01_RemoveCorrelatedFeaturesプロセスにあるRemoveCorrelatedFeatures(Remove Correlated Attributesオペレータ)を適用します。
01_RemoveCorrelatedFeaturesプロセスは以下のようになっています。
>>> removeCorrelated_wine, original = connector.run_process("//Samples/processes/04_Attributes/01_RemoveCorrelatedFeatures", inputs=wine, operator="RemoveCorrelatedFeatures")
相関の高い変数が削除されていることがわかります。
>>> list(removeCorrelated_wine.columns.values)
['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'nonflavanoid_phenols']
RapidMinerで作成したモデルをpythonで受け取れるのか
ここまでご覧いただいた方は、RapidMinerで作成したモデルをpythonで受け取れるのか
という疑問をお持ちになったかもしれません。
私も同じ疑問を持ったので、検証してみました。
irisデータに決定木を適用し、モデルを作成するプロセスを用意しました。
このプロセスをpythonから実行して、決定木のモデルを受け取ろうとしてみます。
>>> iris_DTModel = connector.run_process("//Local Repository/processes/iris_DecisionTree")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/kskanalytics/.pyenv/versions/anaconda3-2018.12/lib/python3.7/site-packages/rapidminer/core/studio.py", line 167, in run_process
return self.__run_process_with_output_dir(path, input_files, operator, output_dir, macros, command_type="RUN_PROCESS")
File "/Users/kskanalytics/.pyenv/versions/anaconda3-2018.12/lib/python3.7/site-packages/rapidminer/core/studio.py", line 361, in __run_process_with_output_dir
result.append(self.__deserialize_from_file(output))
File "/Users/kskanalytics/.pyenv/versions/anaconda3-2018.12/lib/python3.7/site-packages/rapidminer/core/studio.py", line 447, in __deserialize_from_file
raise ValueError("Cannot handle files with '" + str(extension) + "' extension.")
ValueError: Cannot handle files with '.ioo' extension.
どうやら、拡張子.iooは扱えませんとエラーが出るようです。
現状では、RapidMinerで作成したモデルをpythonには渡せないみたいですね、、、
このあたりは今後のアップデートに期待ですね!
いかがでしたでしょうか。
みなさんも一度python-rapidminerを使ってみてください!
最後まで読んで頂き、ありがとうございました。
=========================================
▼1日で機械学習の基礎が学べる!無償ハンズオンセミナー随時開催中▼
URL: https://www.ksk-anl.com/event/
▼RapidMinerをもっと知りたい方はこちら▼
URL: https://www.rapidminer.jp/
▼早速使ってみたい!RapidMinerの体験版の無償DL▼
URL: https://www.rapidminer.jp/download/
▼導入を検討中!わかりやすい詳細なQ&A▼
URL: https://www.rapidminer.jp/faq/
==========================================