COMPANY

PAGE TOP

BLOG

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/

==========================================

$$ \begin{aligned} \newcommand\argmin{\mathop{\rm arg~min}\limits} \boldsymbol{\beta}_{\text{ridge}} & = \argmin_{\boldsymbol{\beta} \in \mathcal{R^p}} \biggl[ ||\boldsymbol{y}-\boldsymbol{X\beta}||^2 + \lambda ||\boldsymbol{\beta}||^2 \biggr] \\ & = (\boldsymbol{X}^T\boldsymbol{X} + \lambda\boldsymbol{I_{p+1}})^{-1}\boldsymbol{X}^T\boldsymbol{y} \end{aligned} $$
PAGE TOP