COMPANY

PAGE TOP

BLOG

“RapidMiner vs Python”データ分析初心者はどちらを勉強すべき?

みなさんこんにちは。
KSKアナリティクスの北野です。

昨今はデータ分析と言えばPython!という風潮もあるように感じますが、私はその風潮にちょっと待って!と言いたいと思います。

というのも、データ分析を始めるならPythonよりもRapidMinerのほうが良いと思うためです。

そこで今回はRapidMiner vs Pythonと題しまして、それぞれどのような特徴があるのか比較してみたいと思います。

具体的には、両方のツールを用いて実際にモデルを作成してみて、RapidMinerとPython、それぞれ比較してみたいと思います。

  

「データ分析」と言えば Python?本当に?

「うちの部署でもデータ分析をしよう!」と調べてみると、どこかで必ずPythonというワードが出てくると思います。

Pythonについて調べてみると以下のように出てきます。

Python(パイソン)は、汎用のプログラミング言語である。コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある
By wikipesia

「お!コードがシンプルで扱いやすい!それなら簡単かも!」と思うかもしれませんが、
Pythonはプログラミング言語の一種です。

プログラミングになじみのある方はすぐに習得できるかもしれません。
しかし、プログラミングなんてしたことがない方には非常にハードルが高いのではないでしょうか。

例えばPythonの言語は以下のようなものです。
コードが読めない私のような人には、まるで呪文のように感じるのではないでしょうか。

from sklearn import tree
clf = tree.DecisionTreeClassifier(max_depth=3)
clf = clf.fit(train ,train_label)

import pydotplus
dot_data = tree.export_graphviz(clf,
                                out_file = None, 
                                filled = True, 
                                rounded = True,
                                feature_names= train.columns.values, 
                                class_names= ['no','yes'] )
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png("Python_Tree.png")

Pythonは実際のデータ分析の現場やデータ分析コンペでも使われている言語です。
習得すれば必ずプラスになるでしょう。

しかし、データ分析をしたいからと言って、すぐにPythonを勉強するのは少し待って頂きたいのです。

わざわざ難しいPythonに挑戦し、難しい機械学習を勉強して苦労する前に、
まずは簡単なツールで機械学習を勉強し、データを分析すれば良いのではありませんか?

今回はそんなお話です。
なお、似たお話がこちらのブログでもされているので、ぜひご覧ください。

  

RapidMinerって?

実際のデータ分析コンペでも広く使われているPythonですが、実はもっと簡単で、同じことができるツールがあります。

それがRapidMinerです。

RapidMinerはデータの前処理、可視化、モデル作成、評価、運用までを全て一つのプラットフォームで行うことができます。

しかも、難しいプログラミングは不要で、マウスの操作で分析を行うことができます。

あまり説明すると長くなるため、RapidMinerについての詳細はこちらをご覧ください。

  

RapidMinerとPython早見表

RapidMiner Python
①初心者の扱いやすさ ×
②データの読み込み
③前処理
④可視化 ◎(簡単) 〇(種類の豊富さ)
⑤モデル 〇(設定の簡単さ) 〇(モデルの種類)
⑥モデルの適用・評価
⑦拡張機能

RapidMinerとPython、それぞれの強み・弱みを表にしました。
どちらも良い点、悪い点があります。

これらの詳細を、これから見ていきたいと思います。

  

①初心者の扱いやすさ

今回のサンプルプロセスです。
RapidMinerとPythonでどちらも同じ処理を行っています。

RapidMiner

  
Python

# ファイルの読み込み
import pandas as pd
golf = pd.read_csv('golf.csv',sep=',')

#データの確認
golf

#行数、列数の確認
golf.shape

#列の確認
golf.columns

#型の確認
golf.dtypes

#基本統計量の確認
golf.describe()

#欠損値の確認
golf.isnull().sum()

#処理しやすいようにデータとラベルを分ける
train = golf.drop('Play',axis=1)
train_label = golf['Play']

#Pythonで決定木をする際は、ダミー変数にする必要がある
train = pd.get_dummies(train)

#可視化
import matplotlib.pyplot as plt
plt.bar(['yes','no'],train_label.value_counts())
#plt.savefig('plot_label') #画像の保存

#モデルの構築(決定木)
from sklearn import tree
clf = tree.DecisionTreeClassifier(max_depth=3)
clf = clf.fit(train ,train_label) #説明変数と目的変数をセット

#モデルの可視化
import pydotplus
dot_data = tree.export_graphviz(clf,
                                out_file = None, 
                                filled = True, #分岐して、どれに多く分類されたのか色で示してくれる
                                rounded = True, #ノードの角を丸く描画する
                                feature_names= train.columns.values, #何で分類されたのか名前を表示する
                                class_names= ['no','yes'] )#何に分類されたのか名前を表示する
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png("Python_Tree.png")

#モデルをテストデータに適用する
#テストデータの読み込み
golf_test = pd.read_csv('Golf-Test.csv',sep=',')

#データとラベルの分離
test = golf_test.drop('Play',axis=1)
test_label = golf_test['Play']

#ダミー変数化
test = pd.get_dummies(test)

#可視化
plt.bar(['yes','no'],test_label.value_counts())
#plt.savefig('plot_test_label') #画像の保存

#モデルの適用
from sklearn.metrics import confusion_matrix
pred = clf.predict(test) #モデルに適用して予測
confusion_matrix(test_label,pred).T #混同行列を出力。RapidMinerの結果と合わせるため、.T で転置させています。

こういうものを見ると、初心者が扱いやすいのはRapidMinerではないでしょうか。

もちろん、Pythonもコードを読み解けば何を行っているのかがわかります。
しかし、ぱっと見て何を行っているのかはRapidMinerのほうがわかりやすいのではないでしょうか。

②データの読み込み

次に、データ分析で必ず行うデータの読み込みです。
RapidMinerでは、Read CSVを使ってマウスで簡単にデータを読み込むことができます。
なお、データはSamples>dataにあるGolfデータセットを用いています。

Read CSVオペレータをプロセスに配置し、ポートを繋ぎます。
「設定ウィザードインポート」をクリックします。

あとはファイルの選択やフォーマットを3ステップで設定します。
基本的にはRapidMinerが自動で文字や数字を判定してくれるため、そのままクリックするだけで直感的にデータを読み込めます。

またデータの型や基本統計量、欠損値の数に分布まですぐに確認することができます。


  

一方Pythonでは以下のようになります。
データの読み込み自体は2行で終わりますが、データの名前やパスを自分で入力しなければなりません。

# ファイルの読み込み
import pandas as pd
golf = pd.read_csv('golf.csv',sep=',')
golf
     Outlook  Temperature  Humidity   Wind Play
0      sunny           85        85  False   no
1      sunny           80        90   True   no
2   overcast           83        78  False  yes
3       rain           70        96  False  yes
4       rain           68        80  False  yes
5       rain           65        70   True   no
6   overcast           64        65   True  yes
7      sunny           72        95  False   no
8      sunny           69        70  False  yes
9       rain           75        80  False  yes
10     sunny           75        70   True  yes
11  overcast           72        90   True  yes
12  overcast           81        75  False  yes
13      rain           71        80   True   no

また、データの行数や型の確認、基本統計量は以下のように確認できます。

# 行数、列数の確認
golf.shape
(14, 5)

# 型の確認
golf.dtypes
Outlook        object
Temperature     int64
Humidity        int64
Wind             bool
Play           object
dtype: object

# 基本統計量の確認
golf.describe()
       Temperature   Humidity
count    14.000000  14.000000
mean     73.571429  80.285714
std       6.571667   9.840486
min      64.000000  65.000000
25%      69.250000  71.250000
50%      72.000000  80.000000
75%      78.750000  88.750000
max      85.000000  96.000000

# 欠損値の確認
golf.isnull().sum()
Outlook        0
Temperature    0
Humidity       0
Wind           0
Play           0
dtype: int64

Pythonでももちろん確認できるのですが、RapidMinerと比べるとわかりづらいです。
また、Pythonに慣れていないとコードを調べる手間もかかるため、同じことをするのに余計な時間がかかってしまいます。

  

③前処理

次に、前処理についてです。

RapidMinerでは、ラベルを設定するのにSet Roleを用います。
Play属性をlabelに設定してください。

一方、Pythonでは以下のようになります。
Pythonでは、データとラベルを分けた後、使うアルゴリズムの問題でダミー変数にしなければなりません。
そのため、RapidMinerに比べてひと手間増えます。

#処理しやすいようにデータとラベルを分ける
train = golf.drop('Play',axis=1)
train_label = golf['Play']

#Pythonで決定木をする際は、ダミー変数にする必要がある
train = pd.get_dummies(train)

前処理については、RapidMinerのほうが直感的に作業を行うことができます。
そのため、時間も短く済み、コードのミスも起こりにくくなります。

もちろん、Pythonでも同様の処理を行うことができます。
が、コードなので、少しややこしいです。

しかし、Pythonのほうが細かな点まで作業を行うことができると考え、前処理の項目はどちらも〇にしています。
  

④可視化

次に、データの可視化についてです。
RapidMinerでは基本統計量の画面やVisualizationの画面で様々なグラフを作ることができます。
試しにラベルの棒グラフを出力してみましょう。

  
もちろん、棒グラフ以外にもヒストグラムや散布図など、基本的な図はどれも簡単に出力可能です。

一方、Pythonでは以下で画像の出力が可能です。

#可視化
import matplotlib.pyplot as plt
plt.bar(['yes','no'],train_label.value_counts())

Pythonも図を出すことは可能ですが、あまりすぐに結果を表示することができません。
また設定が煩雑でミスをしやすいです。

そのため、RapidMinerは直感的に図を出力できるということで◎にしています。
一方Pythonはグラフの出力まで手間がかかりますが、グラフに関する様々なパッケージがあります。
それらを用いればRapidMinerでは出せないあらゆる図を出力することができるため、
図の出力がしづらいですが種類でカバーできると考えPythonを〇にしています。

  

⑤モデル

データの前処理、可視化ときたので、いよいよモデルの作成に入りましょう。

RapidMinerではDecision Treeを用います。

できたモデルを見ると、きれいに分類できていることがわかります。

一方、Pythonでは以下でモデルの作成が可能です。

#モデルの構築(決定木)
from sklearn import tree
clf = tree.DecisionTreeClassifier(max_depth=3)
clf = clf.fit(train ,train_label) #説明変数と目的変数をセット

#モデルの可視化
import pydotplus
dot_data = tree.export_graphviz(clf,
                                out_file = None, 
                                filled = True, #分岐して、どれに多く分類されたのか色で示してくれる
                                rounded = True, #ノードの角を丸く描画する
                                feature_names= train.columns.values, #何で分類されたのか名前を表示する
                                class_names= ['no','yes'] )#何に分類されたのか名前を表示する
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png("Python_Tree.png")

同じ決定木でも、RapidMinerとPythonでは実装されているアルゴリズムが少し異なるため、できたモデルも少し異なります。

なお、モデルを作成する際、本来ならパラメータを設定する必要があります。

RapidMinerのDecision Treeのパラメータ

RapidMinerでは設定するパラメータが見えているため、この値を変えるだけで変更することができます。

一方、Pythonではパラメータ名を指定し、値を設定する必要があります。

clf = tree.DecisionTreeClassifier(max_depth=3)

パラメータの設定の観点では、RapidMinerのほうが容易でしょう。

しかし、基本的なアルゴリズムはRapidMinerにもありますが、Pythonでは実装されているのにRapidMinerには実装されていないアルゴリズムも存在します。

そのため、より高度な分析をする際はPythonを使う必要があるかもしれません。

RapidMinerのほうが直感的であるため〇、しかしPythonにしかないアルゴリズムも存在するという点でPythonも〇にしています。

⑥モデルの適用・評価

モデルを作成できれば、モデルを新規データに適用し評価しましょう。

新規データ(Golf-Testset)を読み込み、Apply ModelとPerformanceオペレータをプロセスに追加します。

  

  
一方、Pythonでは以下のようになります。

#モデルをテストデータに適用する
#テストデータの読み込み
golf_test = pd.read_csv('Golf-Test.csv',sep=',')

#データとラベルの分離
test = golf_test.drop('Play',axis=1)
test_label = golf_test['Play']

#ダミー変数化
test = pd.get_dummies(test)

#可視化
plt.bar(['yes','no'],test_label.value_counts())
#plt.savefig('plot_test_label') #画像の保存

#モデルの適用
from sklearn.metrics import confusion_matrix
pred = clf.predict(test) #モデルに適用して予測
confusion_matrix(test_label,pred).T #混同行列を出力。RapidMinerの結果と合わせるため、.T で転置させています。
array([[1, 1],
       [4, 8]], dtype=int64)

RapidMinerと比べると分かりづらいですが、Pythonの混同行列を出力させました。
Pythonの混同行列は本来、RapidMinerと逆に表示されていますが、比較しやすいように転置させてRapidMinerと合わせています。

モデルがRapidMinerと異なるため結果も少し異なります。

モデルの適用・評価に関してはRapidMinerのほうが簡単に、また結果がわかりやすいため
RapidMinerを◎、Pythonを△にしています。

  

⑦拡張機能

最後に、拡張機能についてです。
RapidMinerでは主にマーケットプレイスで、Pythonではpipなどを用いて拡張機能をインストールすることができます。

どちらも様々な拡張機能がありますが、自由度がより高いのはPythonでしょうか。
これはPythonがプログラミング言語であるため、開発がしやすくなっていることも影響しているかもしれません。

そのためRapidMinerを〇、Pythonを◎にしています。

  

まとめ

7つの点でRapidMinerとPythonの強み・弱みを見てきました。
もちろん、どちらも習得し、お互いの強みを活かせるのが一番ですが、初めにデータ分析をするのならRapidMinerを強くお勧めいたします。

その理由は、設定の容易さです。
分析をするにあたって、RapidMinerではすぐに実装できることもPythonではつまりやすくなります。

一方、容易さゆえにRapidMinerでは届かない、細かな点までPythonはカバーしてくれます。
しかし、初心者がするには、まずRapidMinerで基礎を学んだ後、足りない点はPythonを勉強すれば良いのではないでしょうか

実際に、RapidMinerとPythonの連携は容易ですし、近頃結びつきも強くなっています。
(RapidMinerとPythonの連携についてはこちらをご覧ください。)
  
分析の際、欲しいのは結果のはずです。
結果を得るために、わざわざ時間をかけるよりも、短く済む方が良いのは当然でしょう。
そのため、初めにデータ分析をするならRapidMiner強くをおすすめいたします。
そして、足りない点はPythonを後から勉強すれば良いのではないでしょうか。
  

ここまでお読みいただきありがとうございます。
弊社ではRapidMiner以外にも、RapidMinerを使った教育も行っておりますので
ご興味のある方は以下のリンクよりご参加ください。

=========================================
▼セミナーのお申し込みはこちら▼
https://www.ksk-anl.com/event/

▼早速使ってみたい!RapidMinerの体験版の無償DL▼
https://www.rapidminer.jp/download/

▼RapidMiner ブログ
https://www.ksk-anl.com/blog/rapidminer/

▼RapidMinerをもっと知りたい方はこちら▼
https://www.rapidminer.jp/

▼導入を検討中!わかりやすい詳細なQ&A▼
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