【アンケートデータ可視化】データ加工をやってみた ~Tableau Prep編~
データアナリティクス事業本部 BIチームの投埜です。
BIチームでは、アンケートデータの可視化をテーマにブログリレーを行っています。
私の記事ではTableau Prepを用いてアンケートデータの加工を行います。
使用するデータについて
東京都の丸の内仲通りで、自動運転バス走行実証実験が実施されています。
実証実験の詳細に関してはこちらをご覧ください。
実証実験の結果がオープンデータとして公開されていますので、今回はその中から以下のデータを使用します。
アンケート結果(歩行者)のデータ例はこちらです。 赤枠内に質問が記載されており、質問ごとに1列を使用しています。
アンケート結果(試乗体験者)のデータ例はこちらです。 歩行者と同様に、質問ごとに1列を使用していますが、質問の数が異なります。
取得したい結果
「使用するデータ」から以下のレイアウトになるようにデータを加工していきます。具体的には歩行者、試乗体験者で分かれている2ファイルを合わせていきます。
2つのファイルを合わせるときに「試乗体験者」か「歩行者」を判定できるように「回答者ID」を追加しています。(★は元々のデータには列としては存在しない項目です。)
- 質問(★)
- 回答(★)
- 回答者フラグ(★):歩行者 or 試乗体験者のどちらか
- 回答者ID(★):回答ID&回答者フラグを組み合わせた、回答者を一意に特定するもの
- 会員No
- 回答ID:回答者が増える度に採番されるID。歩行者、試乗体験者それぞれで採番される
- 年齢
- 性別
- 職業
- 登録日
加工後のレイアウトイメージはこちらです。レイアウトの異なる歩行者と試乗体験者のアンケートを、同じレイアウトに変換しています。
Tableau Prepで行っていくこと
Tableau Prepでは画像のフローを作成していきます。
このフローでは以下のことを試乗体験者と歩行者のファイルに行っています。
(上の画像では青色が試乗体験者、オレンジが歩行者になります。)
1.データの接続
ファイルをTableau Prepに接続しデータを読み込みます。
「Source Row Number」がありますが、これはTableau Prepが自動で行に番号を振ったものになります。
今回は使用しないので「削除」します。「Source Row Number」にマウスを当てると複数のアイコンが表示されるので「削除」を選択します。
2.回答者を特定できるようにカラムを追加
アンケートデータから試乗体験者と歩行者を特定できるようにカラムを追加していきます。
処理を行う理由としては、「試乗体験者」と「歩行者」のデータを最終的に1つに統合したときにどちらの回答IDなのか特定できるようにするためです。
※Prepでの処理中のデータでは「試乗体験者」と「歩行者」で同じ回答ID「100」の人を見ると別の人物ということがわかります。
【試乗体験者の回答ID100】
【歩行者の回答ID100】
まずは各データに試乗体験者のデータに「回答者フラグ」として"試乗体験者"という値が入ったカラムを追加します。
「計算フィールドの作成」から「回答者フラグ」を作成します。
同様に歩行者のデータにも「回答者フラグ」として'歩行者'の値を追加して計算フィールドを作成します。
3.複数回答を単一項目に分割
今回のアンケートデータを見ると「試乗体験者」では3つの質問で複数回答があり、「歩行者」では2つの複数回答があります。
<試乗体験者の複数回答の質問>
<歩行者の複数回答の質問>
1つの質問に対して複数の値が格納されている状態なのでこのままでは、Tableau Desktopで集計することはできません。
なので1つのカラムに対して1つの値が格納されるように加工を行います。
複数回答の質問に対して「値の分割」=>「カスタム分割」のメニューを開きます。
区切り文字の使用を「;」に、分割を「すべて」に設定します。
すると1つの質問に複数の回答が格納された回答が、分割され1カラムに1つの値が格納されるようになりました。
これで複数の回答を単一項目に分割することができました。
ほかの複数回答の質問と、歩行者の複数回答の質問にも同様の処理を行います。
4.ピボットを用いて「質問」と「回答」カラムを作成(横持ちデータから縦持ちデータに変換)
つぎのステップとしては現状のアンケートデータの質問項目を「質問」と「回答」に分けていきます。
現状は質問ごとに横にカラムが追加される横持ちの状態ですが、質問を1列に回答を1列にした縦持ちの状態にしていきます。
クリーニングステップから「ピボット」を選択します。
その後ピボットしていきたいフィールドを「ここにフィールドをドロップしてピボットする」に追加します。
今回はすべての質問をピボットしていくためドラッグアンドドロップで「ここにフィールドをドロップしてピボットする」に追加します。
※カスタム分割で使用したフィールドはピボットを行わないので注意してください。
ピボット後に「ピボット1の名前」と「ピボット1の値」が作成されています。
「ピボット1の名前」にはもともとのカラム名が入り、「ピボット1の値」には各カラムに格納された値が格納されます。
歩行者のフローも同様にすべての質問をピボットしていきます。
5.カラム名・質問を整理
次にカラム名を修正していきます。
<試乗体験者>
【⑧年齢】:年齢
【⑨性別】:性別
【⑩職業】:職業
<歩行者>
【⑤年齢】:年齢
【⑥性別】:性別
【⑦職業】:職業
項目名をダブルクリックすることで名前の編集が可能です。
続いて質問の中にある元々複数回答だった質問の値を修正していきます。
まずは試乗体験者100の5-bの質問を確認しましょう。
カスタム分割を行った影響で質問分に「-分割済み 1」「-分割済み 2」が追加されています。
これは複数回答の最大回答数分「分割済み」のフィールドが生成されます。
現状のデータでは元々1つの質問だったものが7つに増えてしまっているので、「質問」の「分割済み1」から「分割済み2」までを1つの質問にグループ化していきます。
まとめたい質問をctrlキーを押しながら選択します(macの場合はcommandキー)
まずは「5-b. (5-a.にて「はい」と回答された方) 今後、アプリ上で連携されると便利な機能について教えてください。(複数選択)」の分割済み1~7までを複数選択
その後複数選択している場所を右クリックして「値のグループ」を選択します。
その後質問のグループ化が完了したので、グループ化した項目を右クリックし、「値の編集」で元の質問文に変更します。
ほかの複数回答の質問と歩行者も同様の処理を行います。
6.試乗体験者と歩行者のデータを一つにまとめる
ここまでで試乗体験者と歩行者のデータ加工が終了しました。
ここから2つのテーブルを1つにするユニオンを行います。歩行者のフローをドラッグアンドドロップで試乗体験者のフローの上に重ねます。すると「ユニオン」のオプションが表示されるので「ユニオン」に歩行者のフローを落とします。
これでユニオンが作成され、2つのテーブルを1つにすることができました。
7.Nullの置き換え・不要なカラムの削除・回答者IDの追加
ここでは分析で不要なカラムの削除と、試乗体験者と歩行者を区別するために「回答者ID」を追加します。
ユニオンを行うと自動生成されるTable Namesを選択し削除します。
同様の操作でカスタム分割の分割もとになった質問項目を削除します。
年齢、性別、職業を見るとNullが含まれています。
このNullを「未回答」に変更します。
「Null」を右クリック=>「値の編集」から「未回答」を入力
ここから回答IDを作成していきます。
「計算フィールド」を作成し「回答者フラグ」と「回答ID」を文字列連結させた「回答者ID」を作成します。
「回答ID」は整数型になっているため計算フィールドのSTRで文字列に変換しています。
[回答者フラグ]+STR([回答ID])
8.ファイルの出力
最後に加工したファイルを出力します。
クリーニングステップから「出力」を選択します。
その後「参照」から保存先を選択し、「フローの実行」を行えば完了です。
まとめ
今回はTableau Prepによるアンケートデータの加工のフローをご紹介しました。
Tableau Desktopだけではなく、Prepも利用することでデータ分析を楽にできる場面があるかと思います。
最後までご覧いただきありがとうございました。