RapidMiner
RapidMinerで簡単にデータ変換!縦長横長へ
R言語のgather/spread と RapidMinerのpivot/depivotの比較
こんにちは、株式会社KSKアナリティクスの周です。
今からプログラミングを勉強して
データの前処理にチャレンジしようという人向けに
より簡単にできるRapidMinerの機能を紹介します!
例えば、R言語を使っているデータ分析者たちは
必ずtidyer+dplyrを熟知しているでしょう、
データの前処理でとても便利なライブラリーです。
gather/spreadを使って縦長・横長・入れ子に変形・整形することが楽にできます。
しかし、プログラミングを上手く書けない人は、
同じようなデータ処理をしたい場合はどうすればいいでしょう。
EXCELのピボットテーブルでも同様の処理を行うことはできます。
しかし、EXCELではそのまま高度な分析に入ることはできませんよね?
そこで、RapidMinerを使うと、
データの変換も、さらには高度な分析まで素早く行うことができます。
では、RapidMinerでどのように操作するのかを一緒に見てみましょう。
なお、ここでは比較のために、
R言語でする場合とRapidMinerでの操作方法を
比べながら、説明していきたいと思います。
例でR言語に標準で用意されているデータセットtreesを使用します。
このデータセットは31本の材木の
直径(Girth)、高さ(Height)、体積(Volume)を表しています。
(Girthは本来の意味では「周囲の長さ」というですが
Rのドキュメントによると「直径」を表しているとのことです。)
では、まずデータを見ましょう。
# ライブラリーを呼び出す。
> library(tidyr)
# dfを作成する。
> df <- trees[c(1:5),]>
> num <- nrow(df)
# カラムidを付け、id_1~31という形で木材のidを作成する。
> df$id <- c(paste("id_",1:num))
# dfを確認する。
> df
Girth Height Volume id
1 8.3 70 10.3 id_ 1
2 8.6 65 10.3 id_ 2
3 8.8 63 10.2 id_ 3
4 10.5 72 16.4 id_ 4
5 10.7 81 18.8 id_ 5
後でRapidMinerの説明をするために、ローカルにcsvファイルをアウトプットします。
> write.csv(df, "/trees.csv")
gather()で並び替えます。分析対象が増えても、行だけが増えるようにデータの構造を変更します。
> df_gather <- gather(data = df,
key = measurements,
value = value,
Girth,Height,Volume)
> df_gather
id measurements value
1 id_ 1 Girth 8.3
2 id_ 2 Girth 8.6
3 id_ 3 Girth 8.8
4 id_ 4 Girth 10.5
5 id_ 5 Girth 10.7
6 id_ 1 Height 70.0
7 id_ 2 Height 65.0
8 id_ 3 Height 63.0
9 id_ 4 Height 72.0
10 id_ 5 Height 81.0
11 id_ 1 Volume 10.3
12 id_ 2 Volume 10.3
13 id_ 3 Volume 10.2
14 id_ 4 Volume 16.4
15 id_ 5 Volume 18.8
spread()で元に戻ります。
> df_spread <- spread(data = df_gather,
key = measurements,
value = value)
> df_spread
id Girth Height Volume
1 id_ 1 8.3 70 10.3
2 id_ 2 8.6 65 10.3
3 id_ 3 8.8 63 10.2
4 id_ 4 10.5 72 16.4
5 id_ 5 10.7 81 18.8
では、RapidMinerの操作方法を見ましょう。
まず作ったデータをインポートします。
Read CSVなどを使って読み込みましょう。
インポートする際に、このまま読み込むと、行番号まで入ってしまったので、削除します。
またHeightの部分をinteger型からreal型に変換します。
(赤い線のところで削除、数値型の変換ができます。)
読み込むと以下のようになります。
そして、オペレーターのDe-Povitをデータセットの後ろにドラッグして、
画面右側のパラメータを編集しましょう。
create nominal indexにチェックを、
index attributeにmeasurementsを入れます。
attribute nameの隣のEdit Listをクリックすると、以下の画面が出てきます。
attribute nameの空欄にvalueというカラム名を入れ、 attributesの欄に縦長したいカラムを選びましょう
赤丸のボタンをクリックして下の画面が出てきます。
三つのカラムを使いたいため、Girth|Height|Volumeと入力してください。
Regular Expressionの使い方についてここで詳しく紹介しませんが、また今後のブログで説明させて頂きます。
下の画面が出てきたら、右下のApplyをクリックしましょう。
以下のような画面になっているでしょうか?
実行すると、上で説明したdf_gatherと同じような変換ができましたね。
もう一度、最初の形に戻す場合はどうすればいいでしょうか?
オペレーターのPivotを使ってみましょう。
Pivotを先ほどのプロセスの後ろに置いて、パラメータを編集しましょう。
group by attributes の
をクリックし、idを選択、Applyします。Select Attributes
そして、column grouping attributeのmeasurementsを選び、
aggregation attributesの
をクリックすると、Edit List
aggregation attributeのvalueを,
aggregation function のfirstを選択し、
Applyしましょう。
全てのオペレーターを繋げて
実行!
また元に戻りましたね。
だけど、RapidMinerがデータを元に戻した時に、
各カラム名の前にfirst(value)_
がついてしまっています。修正したい場合は、オペレーターのRenameを使ってください。
今回のblogは以上になりますが、RapidMinerのPivotとDe-pivotを上手く使えば、データを縦長と横長の変換はすぐできますね。
どうですか?とても簡単でしょう、ワクワクしませんか?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
もしRapidMinerに興味を持ちましたら、
是非今度のハンズオンに参加してみましょう!
またご質問とかありましたら、下の連絡先まで連絡してください。
☞ https://ksk-anl.smktg.jp/public/application/add/43
1日で機械学習の基礎が学べる!無償ハンズオンセミナー随時開催中
☞ https://www.ksk-anl.com/event/
RapidMinerをもっと知りたい方はこちら
☞ https://www.rapidminer.jp/
早速使ってみたい!RapidMinerの体験版の無償DL
☞ https://www.rapidminer.jp/download/
導入を検討中!わかりやすい詳細なQ&A
☞ https://www.rapidminer.jp/faq/