インテージテクノスフィア技術ブログ

株式会社インテージテクノスフィアの社員達がシステム開発や仕事に関する技術情報を随時掲載いたします

【Tableau】アンケートデータを Prep で加工することを諦めた

こんにちは、アイダです。Tableau Prepでのアンケート分析に苦戦しているみなさま必見です!! Tableau大好きなAI・DXビジネス本部のKさんもその一人。そのKさんの解決策とは?!

f:id:intage-tech:20210513090524j:plain

はじめに

「アンケートデータを BI ツールで扱うのはたいへん」という声をよく聞きます。
"たいへん" というのは集計分析ではなく、前処理のことを指しているのだろうと思います。 私も御多分に洩れず、一度は Tableau Prep でアンケートデータの前処理を試みた人間です。 が、私はもう Tableau Prep でそれを実現することは諦めています、少なくともローカルPCのリソースでは。 そのあたりのことを書こうと思います。

目指すデータフォーマットは決まっている

縦持ちですね。 ここでは詳しく扱いませんが、KCME さんの記事( Tableauにおけるデータの縦持ちと横持ちについて )などで感覚的につかめるかと思います。

アンケートデータは一般的に回答者ごとに1行、回答値が列方向に並ぶようなデータフォーマットになっています。

回答者ID Q1 Q2 Q3
A0001 1 3 32
A0002 3 2 21

これを縦持ちにしてしまえばいいだけの話です。

回答者ID 質問 回答値
A0001 Q1 1
A0001 Q2 3
A0001
A0002 Q1 3
A0002 Q2 2
A0002

質問ごとの集計をしたいのであれば、この縦持ちデータをそのまま使えばよいですし、 クロス集計をしたいのであれば、この縦持ちデータで自己結合をすればよいのです。

では、なにが課題なのか。
マルチアンサーの回答データの処理です。
これも同様に縦持ちにすればいいのですが、Prep だとパフォーマンス問題にぶつかりやすいのです。

マルチアンサーのデータフォーマット

アンケートデータにおいて、マルチアンサーのデータフォーマットは以下の4つをよく目にします。

セル別 0/1
回答選択肢の数だけ列を持ち、回答者が選んだ選択肢に対応する列に1を、それ以外に0がセットされます。

回答者ID Q1_1 Q1_2 Q1_3 Q1_…
A0001 1 0 1 1
A0002 0 1 1 0

セル別 選択肢ID
最大回答数の分だけ列を持ち、回答者が選んだ選択肢IDが左詰めでセットされます。

回答者ID Q1_1 Q1_2 Q1_3
A0001 1 3 4
A0002 2 3

セル内 0/1
質問ごとに1列とし、その列内の位置で回答値を表します。
先頭がゼロになる可能性があるため、数値型ではなく文字列型で扱う必要があります。

回答者ID Q1
A0001 1011
A0002 0110

セル内 選択肢ID
質問ごとに1列とし、カンマ区切りで選択肢IDがセットされます。
これも文字列型ですね。

回答者ID Q1
A0001 1,3,4
A0002 2,3

個人的なおススメは セル内 選択肢ID です。
セル別のフォーマットは、どちらもデータファイル全体の列数が巨大になりがちで、処理限界に直面しやすいです。 セル内 0/1 は先頭から何桁目かという判定処理を入れなければいけませんし、選択肢数に比べて回答値が少ない場合に非効率です。

なぜ Prep を諦めたのか

すべては処理パフォーマンスです。 機能的には Tableau Prep でも対応できるのですが、実際のアンケートデータと向き合ってみると、 マルチアンサーの質問は何個もあるし、その選択肢も100を超える場合もあります。

それに対して、Prep でワークフローを作っていくのは無謀だなと考えました。
ましてや、弊社の場合はアンケートデータはどんどん発生して、それに合わせてこのような対応方法は現実的ではない...

ということで、Python でアンケートデータの縦持ち変換処理を実装することにしました。 AWS Glue の Python shell で動かしているので、コストもたかがしれています。

その後、その Python shell でも処理しきれないデータ( MAT-kit )がでてきたので、 いまでは AWS Glue で Spark 版も用意して、データサイズによって使い分けをしています。

おわりに

大前提として、BIツールはアンケートデータに特化したツールではありません。
調査会社が提供するアンケート集計ツールには到底およびません。

しかし、さまざまなデータを1つのツールで利用できるということはデータ利用者にとってはメリットになるはずです。 過度な期待はせず / させず、うまくツールを使い分けていきましょう。