こんにちは。Deckです。
データを取り込むとき、
ある程度のまとまりでデータをクラス分けすると分析がしやすくなるときがあります。
下のテーブルを見てください。
例えば年齢については10歳刻みで「年代」としたり、獲得ポイント数によっては特別なフラグを付ける必要があるかもしれません。(○○ポイント以上の会員にだけDMを送るなどが考えられますね)
この記事では下の3つの方法でデータのクラス分けを扱います。
Floor関数やClass関数を使うときは一定値ごとに区切りをつけたいとき、If関数はしきい値が決まっているときに使います。
Floor関数は数値を切り捨てる関数です。
数値を一定間隔で区切るときにはFloor関数を使います。
Class関数はほぼFloor関数と同様に使えますが、結果としてクラスの下限・上限が表示されます。
たとえば数値「180」を100ごとに区切りをする場合、それぞれの関数は以下のように値を表示します。
Floor → 「100」
Class →「100 <= x <200」
If関数は一定間隔ではないクラスをしきい値にして分類を行います。
クラス分けのルールを1つ1つ書き込むため煩雑な数式になりますがその分しきい値を細かく制御することができます。
新規アプリを作成し、「データ ロード エディタ」を開きます。
データ接続を作成します。「接続の新規作成」→「フォルダ」をクリックします。
データのあるフォルダに移動し、接続に名前をつけて「作成」をクリックします。
作成したデータ接続から「データを選択」をクリックします。
ファイルを選択し、「選択」をクリックします。
プレビューが表示されますがそのまま「スクリプトを挿入」をクリックしてください。
自動生成のスクリプトが表示されます。
このスクリプトに手を加えてクラス分けされた項目を追加します。
続いて、実際にクラス分けを行ってみましょう。
ここまでの記事ではFloor、Class、If関数それぞれの性質の解説とサンプルデータの指定までを行いました。
引き続き、実際にスクリプトを編集してクラス分けを行ってみましょう。
前回の記事で生成したスクリプトを以下のように編集します。
下線を引いた部分を追加します。
Floor(年齢,10) & '代' as 年代_Floor,
Class(年齢,10) as 年代_Class,
If(獲得ポイント数 >=10000,'ゴールド会員',If(獲得ポイント数>=5000,'シルバー会員',If(獲得ポイント数>=1000,'ブロンズ会員'))) as ランク
それぞれの数式を解説します。
Floor(数値, 数値間隔 [ , オフセット ])
数値間隔は任意の値を指定できます。オフセットを指定すると開始位置を変更することができ、例えば「5から数え始め、10刻みでクラス分けする」ことが可能です。
class(数値, 数値間隔 [ , ラベル [ , オフセット ]])
Floor関数と同様、数値間隔やオフセットは任意の値を指定できます。
ラベルはClass関数の結果として表示される「5000 <= x <10000」のxの部分を変更できます。
If(条件式, 条件が満たされたときの数式 [ , 条件が満たされないときの数式 ])
今回はIf関数を入れ子になるように使い、「獲得ポイント数>=10000ならゴールド会員」→「獲得ポイント数>=5000ならシルバー会員」→「獲得ポイント数>=1000ならブロンズ会員」の順で判別しています。
条件の順番を逆にするとゴールドになるはずの会員がブロンズ会員になってしまうこともあるので注意して数式を組み立ててください。
上のスクリプトをロードするとクラス分けが行われます。
このように、Qlik Senseでクラス分けを行うときは適切な関数を使い分けましょう。