2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Formsのアンケート結果(リッカート尺度)をRのggplot2で可視化する

Last updated at Posted at 2025-07-27

概要

Microsoft Formsで収集したアンケート結果のデータを整形し、Rのggplot2パッケージを用いて可視化する手順について解説します。

課題感

Formsではリッカート尺度は円グラフで描画されるため、個々の結果を比較するのが難しくなります。

例:回答結果が5つある場合

Microsoft-Forms-07-27-2025_06_53_PM.png

というわけで、ggplot2で別の可視化方法を検討します。

アンケート結果のxlsxファイルのダウンロード

Formsでアンケートを作成するとエクセルとしてデータが作成されるため、これをローカル環境にダウンロードします。

xlsxファイルの例

スクリーンショット 2025-07-27 17.17.49(2).png

コード

# 必要なライブラリを読み込む
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)に適用するための関数です。

出力されたグラフ

棒グラフとして、個々の回答結果を並べて比較できるようになりました。

survey.png

今回はeconomistテーマを用いて青を基調としたテーマにしましたが、肯定的な回答を青系、否定的な回答を赤系、中立をグレーにすることで、直感的に結果を理解しやすくなるかもしれません。

おわりに

ggplot2を用いることでFormsのリッカート尺度をより見やすく(比較しやすく)可視化できました。
デザインも細かく調整できますので、そのままパワポ添付用のグラフとしても活用できますね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?