Alteryxで項目ごとの回答率を調べる
こんにちは、小澤です。
データを様々な形で集計したいってことは、日常でよくあるかと思います。 今回は、alteryxでデータ集計をしたくなった時に使えるテクニック満載のサンプルワークフローを紹介します。
ワークフローの中身
今回利用するのは、 Help > Sample Workflows > Clean and prepare data > Measure he quality of data となります。 このワークフローでは、ユーザ情報として設定するような各項目がどの程度の割合で実際に記載されているかを調べるものになります。
ワークフローの中身を以下のようになっています。
入力データは以下のようにユーザ情報を入力したようなものになっています。
このワークフローの出力は以下のようになります。
内容としては、
- 全体件数
- 項目名
- 記載されている件数
- 記載されている割合
がそれぞれの項目ごとに集計され表示されている状態になっています。
データ中の欠損値の割合などはBrowseツールのProfileやField Summaryツールなどでで確認することが可能ですが、このような形式の集計テクニックは他でも様々な場面で役立つものかと思います。
これを実現する手順を見ていきましょう。
データが入力されている件数の集計
まず、最初に行うのが各項目ごとのデータが入力されている件数の取得です。
ここではまず、Transposeツールを利用しています。
まずは、このツールの設定項目を見てみましょう。
Key FieldsとData Fieldsという2つの項目があり、それぞれ入力データのカラム名がリスト表示されています。 このツールでは、Data Filedsでしていしたカラムを、カラム名と値のkey-value形式に変換してくれます。
なかなかわかりづらいと思うので、例を出して解説していきます。 まず、以下のようなデータがあるとします。
id | first_name | middle_name | last_name |
---|---|---|---|
1 | じょん | [null] | すみす |
2 | たろう | A | やまだ |
3 | ゆきち | [null] | ふくざわ |
4 | じゃん | ぴえーる | ぽるなれふ |
これに対して、Data Fieldsでfirst_name, middle_name, last_nameでチェックを入れると以下のようなデータが生成されます。
Name | Value |
---|---|
first_name | じょん |
middle_name | [null] |
last_name | すみす |
first_name | たろう |
middle_name | A |
last_name | やまだ |
first_name | ゆきち |
middle_name | [null] |
last_name | ふくざわ |
first_name | じゃん |
middle_name | ぴえーる |
last_name | ぽるなれふ |
また、ここでKey Fieldsでidにチェックを入れると以下のように元のデータのidの値が追加されます。
id | Name | Value |
---|---|---|
1 | first_name | じょん |
1 | middle_name | [null] |
1 | last_name | すみす |
2 | first_name | たろう |
2 | middle_name | A |
2 | last_name | やまだ |
3 | first_name | ゆきち |
3 | middle_name | [null] |
3 | last_name | ふくざわ |
4 | first_name | じゃん |
4 | middle_name | ぴえーる |
4 | last_name | ぽるなれふ |
このような動きをするのがTransposeツールとなります。 これによって、NameやKey Fieldで指定した値で、グループ化した集計につなげるといったことが可能になります。
上記の画像のように、今回のワークフローではKey Fieldsは利用せずすべてのカラムをData Fieledに設定しています。 そのため、すべてのデータがこのNameとValueの形式に変換されています。
続いてのFomulaツールでは、以下のような設定が行われています。
ここでは、Valueに値が入っていないものをnullとして扱うための変換を行っています。
このプロセスの最後はSummarizeツールでデータを集約しています。
このツールでは、以下の設定を行っています。
この設定では、まずGroupByで指定したName列の値が同じものごとにグループ化を行います。 続いて、各グループごとにもう1つの設定であるCountNonNull、すなわちnullじゃないデータの数を数え上げています。
先ほど、Transposeツールの動きを解説したデータを例にすると以下のような動きになります。
このワークフローでの設定では、以下のような結果が出力されます。
ここまでで、各カラムごとのnullではない値の数を抽出することができました。
全レコード数を取得する
続いて、データ全体に対するnullの割合を求めるためにデータの件数を計算します。
このやりかたは、簡単です。 SummarizeツールではGroupByの値を指定しなければ、全体を1つのグループにするので、それを利用してデータ件数をカウントしています。
この設定のみで、全体のデータ件数である「370」を取得することができます。
データの結合
さて、次にこれら2つのデータを結合します。
今回は、結合のkeyとなるカラムもなければ、データ件数が一致しているわけでもないので、Joinツールが利用できません。 そのため、すべての組み合わせで結合するAppend Fieldsツールを利用します。
このツールではすべての組み合わせで結合されます。 例えば以下のような2つのテーブルがあるとします。
first_name |
---|
じょん |
やまだ |
last_name |
---|
すみす |
ふくざわ |
ぽるなれふ |
これらに対してAppend Fieldsツールを利用すると以下のような結果になります。
first_name | last_name |
---|---|
じょん | すみす |
じょん | ふくざわ |
じょん | ぽるなれふ |
やまだ | すみす |
やまだ | ふくざわ |
やまだ | ぽるなれふ |
すべての組み合わせなので、例えば100件のデータが2つでも100 x 100 = 10000と、非常に大きなデータになります。 そのため、今回の全データ件数のように1つの値を全体に追加したいといった場合などに利用するがいいでしょう。
このツールの設定はSelectツールやJoinツールのように出力に含めるデータの選択などを行えます。
出力結果は以下のようになります。
出力の整形
次に最終的な出力結果を得るために、ここまでの結果の整形を行います。
まずはFomulaツールで、nullではない件数を全データ件数で割ることで、パーセンテージを求めています。
次に、Sortツールを使って求めたパーセンテージで降順ソートすることで、最終的な出力結果を求めています。
最後に残った謎のツール
さて、ここまでで最終的な出力を得ることができました。 しかし、このワークフローにはまだもう1つツールが残っています。
これはMessageツールというもので、ワークフローの出力に影響を与えるものではなく、ワークフローのログ部分にメッセージを表示するものになります。
このツールを利用することで、以下のようなメッセージを表示しています。
ツールの設定は以下のようになっており、入力が100%になっていない項目をwarningのメッセージとして出力する設定になっています。
終わりに
今回は、サンプルワークフローでデータ分析を行う際の集計テクニックを解説しました。 このサンプルそのままの集計を行うことは少ないかもしれませんが、似たような操作でできるパターンの集計を行う機会はそれなりにあるかと思います。
Alteryxに興味をお持ちいただいた方はこちらからお問い合わせください。