以下のようなユーザーごとの属性データがあったとします。

ここで、interestsというユーザーの興味のあるカテゴリーに関する列があります。よく見ると、あるユーザーはTechなどとと一つしかありませんが、別のユーザーはTech, Sportsなどと複数だったりします。

今回は、これら複数の文字列を別々の列にして、それぞれのカテゴリーごとの列が0か1の値を持つ以下のようなデータに整形する方法を紹介します。

行に分割する

この複数の文字列はいつも2つだけというわけでなく、3つだったり、4つだったりと、たくさんのパターンがあります。そして、ユーザーごとにその数が違います。ですので、いきなり列に分けるのではなく、まずは行に分けます。つまり、1つの値しかないユーザーは1行になるし、3つのカテゴリーを持っているユーザーは3行になるというかんじです。

そこで、interestsの列ヘッダーメニューから、

分割 -> … で行に分割 -> コンマ

を選びます。

これで、コンマ区切りであったそれぞれの文字列はそれぞれの行に分かれました。

ピボットを使って行を列にする

次にピボットというステップを使って、先ほど行に分割されたカテゴリーの値をそれぞれの列にします。

userid 毎の行にしたいので、Rowにuseridを選び、Columnsにinterestsを選びます。Valuesは行の数である、”Number of Rows”を選びます。

実行すると以下のように、それぞれのinterestsのカテゴリーが列になったデータの形になります。

ブランチを使って元々あった列を復元する

ここで終わってもいいのですが、最後にもう一つ。

実は、ピボットのオペレーションを行うと、Rows, Columns, Valuesに指定されていない列はなくなってしまいます。しかし、この先の分析で元々あったOSやCountry(国)といった列を使いたいということはよくあるのではないでしょうか。

その場合は、ブランチという機能を使って、最初の1ユーザー、1行であった時のデータを別のデータフレームとして保存しておきます。そしてこのデータフレームを、もとのメイン・データフレームに結合することで、元々あった列を復元することが出来ます。

やってみましょう。

まずは、”ブランチの作成”というメニューを、interests列を分割する前のステップのアクションメニューから下記のように選びます。

ブランチのデータフレームの中で、必要な列のみを選びます。これは今回特に必要というわけではないですが、きれいにするためだけにやっています。

そして、ここにあるすべての列を、さきほどのピボットした列に持っていきたいので、ピボットしたメインのデータフレームに戻ります。

userid列を使ってメインとブランチのデータフレームを結合したいので、userid列より、結合(Join)を選びます。

結合のダイアログの中で、結合先のデータフレームにブランチのデータフレームを選びます。結合元の列(メインのデータフレーム)と結合先の列(ブランチのデータフレーム)は両方共useridがすでに選ばれているはずです。

実行すると、ブランチデータフレームからuserid列をのぞくすべての列が追加されました。