概要
Microsoft Formsで収集したアンケート結果のデータを整形し、Rのggplot2パッケージを用いて可視化する手順について解説します。
課題感
Formsではリッカート尺度は円グラフで描画されるため、個々の結果を比較するのが難しくなります。
例:回答結果が5つある場合
というわけで、ggplot2で別の可視化方法を検討します。
アンケート結果のxlsxファイルのダウンロード
Formsでアンケートを作成するとエクセルとしてデータが作成されるため、これをローカル環境にダウンロードします。
xlsxファイルの例
コード
# 必要なライブラリを読み込む
library(tidyverse) # データ操作と可視化のためのパッケージ群 (ggplot2, dplyr, tidyrなどを含む)
library(readxl) # Excelファイルを読み込むためのパッケージ
library(ggthemes) # 追加のggplot2テーマを利用するためのパッケージ
# 読み込むExcelファイルのパスを指定
file_path <- "test.xlsx"
# Excelファイルの指定したシートからデータを読み込む
survey_results <- read_excel(file_path, sheet = "Sheet1")
# グラフ作成のためのデータ前処理
prep <- survey_results %>%
# 不要な列(Id, 開始時刻など)を削除
select(-"Id", -"開始時刻", -"完了時刻", -"メール", -"名前") %>%
# データを「縦長」の形式に変換する
# 全ての列を対象に、列名を "question" 列に、その値を "answer" 列に格納する
pivot_longer(cols = everything(),
names_to = "question",
values_to = "answer") %>%
# "question" 列を因子型(カテゴリ変数)に変換
mutate(question = as.factor(question)) %>%
# "answer" 列を順序付きの因子型に変換
# レベル(順序)を指定することで、グラフの並び順を意図通りにする
mutate(answer =
factor(
answer,
levels = c("そう思う", "ややそう思う", "どちらでもない", "ややそう思わない", "そう思わない")
)
)
# ggplotを使用して積み上げ棒グラフを作成
prep %>%
# aes()でグラフの見た目を定義
# x軸に質問項目(逆順)、塗りつぶしに回答(逆順)を割り当てる
# fct_rev()で因子の順序を逆転させる
ggplot(aes(x = fct_rev(question), fill = fct_rev(answer))) +
# 凡例の順序を、積み上げの順序と一致させるために逆転させる
guides(fill = guide_legend(reverse = TRUE)) +
# 積み上げ棒グラフを作成
# position = "fill" で、各棒の長さを100%に揃え、割合で表示する
geom_bar(position = "fill", show.legend = TRUE) +
# グラフのタイトル、各軸のラベル、凡例のタイトルを設定
labs(title = "",
x = "",
y = "",
fill = "回答") +
# グラフの配色をggthemesパッケージのeconomistテーマに設定
scale_fill_economist() +
# y軸のメモリをパーセンテージ形式で表示
scale_y_continuous(labels = scales::percent) +
# 凡例をグラフの右側に表示
theme(legend.position = 'right') +
# グラフ全体のテーマを設定
# base_familyで日本語フォントを指定し、文字化けを防ぐ
# base_sizeで全体のフォントサイズを指定
theme_gray(base_family = "HiraKakuPro-W3", base_size = 12) +
# x軸とy軸を入れ替えて、横向きの棒グラフにする
coord_flip()
# 直前に作成したggplotグラフをファイルとして保存する
# "./survey.png" というファイル名で保存
# widthとheightで画像のサイズ(インチ単位)を指定
ggsave("./survey.png",width=10,height=5)
ポイント
- 横持ちの元データをggplot2で扱い易くするためpivot_longer()で縦持ちにしています。
- それぞれの回答結果を比較しやすくするため、棒グラフを90度回転させ数値も割合で表示しています。
- ggplotのテーマカラーをscale_fill_economistで変更しています。
- The Economist誌のグラフでよく使われる色合いを、棒グラフなどの塗りつぶし色(fill)に適用するための関数です。
出力されたグラフ
棒グラフとして、個々の回答結果を並べて比較できるようになりました。
今回はeconomistテーマを用いて青を基調としたテーマにしましたが、肯定的な回答を青系、否定的な回答を赤系、中立をグレーにすることで、直感的に結果を理解しやすくなるかもしれません。
おわりに
ggplot2を用いることでFormsのリッカート尺度をより見やすく(比較しやすく)可視化できました。
デザインも細かく調整できますので、そのままパワポ添付用のグラフとしても活用できますね。