2023.10.24作成  2024.2.8更新

これから研究を始める高校生と指導教員のために 第2版
探究活動と課題研究の進め方・論文の書き方・口頭とポスター発表の仕方
(これ研)

副読文書

VI-3. アンケート結果の示し方
選択肢から1つを選んで回答(複数選択が不可)
異なる設問の間での回答の関係性を見る場合

私のサイトでの本書紹介文

共立出版の本書紹介サイト ご購入もこちらからどうぞ

 本章では、以下のようなアンケートの結果のまとめ方を説明します。

・選択肢から1つを選んで回答して貰う(複数選択が不可)。
・複数の設問をし、ある設問に対してある回答をした人が、別の設問に対してどう回答するのかを調べることが目的。

たとえば、「松茸と秋刀魚の丼」の観光効果を調べるため、この丼を食べたかどうかと、町をまた訪れたいかどうかをアンケートしたとします。そして、食べたかどうかで、町をまた訪れたいかどうかが異なるのかを調べるとします。
 こうしたアンケートでは、帯グラフで回答の分布を比較します。回答の比較は、円グラフよりも帯グラフの方がわかりやすいからです。複数のアンケート結果を作図して比較します。
 「松茸と秋刀魚の丼」に関するアンケート結果(「これ研」には載っていません)を例に説明します。「これ研」の第3部第4章「アンケート結果の示し方」(p. 98)を読んで、アンケート結果の示し方を理解しておいて下さい。

  1. 解析に用いるcsvファイルのRへの読み込み
  2. 作図
    1. 円グラフの作図(基礎情報として)
    2. 帯グラフの作図

 RStudioを起動して下さい。起動方法の詳しい説明は、RStusioの起動の仕方を参照して下さい。そして、作業ディレクトリを指定します。

作業ディレクトリの指定

setwd("/Users/sakai/Documents/書籍等原稿/これ研2版/課題研究解析")

# あなたの作業ディレクトリの位置を""で囲んで書きます。

# この命令文を実行しておきます。

# 作業ディレクトリの指定

 作図にはtidyverseというものを用います。tidyverseをインストールしてありますか? まだならば、「作図の準備」の説明に従ってインストールして下さい。tidyverseをRに読み込みます。

tidyverseのRへの読み込み

library(tidyverse)

# RStudioを起動しこの命令文を実行しておきます。Rstudio起動後、一度だけ実行すればよいです。Rstudioを終了して再び起動したときは再実行する必要があります。

 scalesというものも作図に用います。scalesをRに読み込みます。scalesはRに備わっているので、インストールする必要はありません。

scalesのRへの読み込み

library(scales)

# この命令文を実行しておきます。Rstudio起動後、一度だけ実行すればよいです。Rstudioを終了して再び起動したときは再実行する必要があります。

 解析では、データフレームの中の特定のデータ列を指定することを行います。指定の方法です。

データフレームの中の特定のデータ列の指定方法

データフレーム名$データ列名

# データフレーム名を書き、$を挟んで、指定したいデータ列名を書きます。

# 実行例

d$Angle.degree
d$Flying.distance.m

# データフレームdに入っているデータ列Angle.degree, flying.distance.mを指定します。

このページの文頭に戻る

1. 解析に用いるcsvファイルのRへの読み込み

 googleフォームで、松茸と秋刀魚の丼に関するアンケート(画面1)を行ったとします。観光客に、この丼を食べたかどうかと、町をまた訪れたいかどうかを訊ねました。

画面1
松茸と秋刀魚の丼に関するアンケート

このアンケート結果を、csvファイル「Donburi.csv」(画面2)に保存しました(架空データです)。Rで解析作図をするために英語にしています。松茸と秋刀魚の丼(Donburi)を食べた(Ate)か食べなかった(Did not eat)か、町をまた訪れたいか(Revisit)に対して、「強くそう思う(Strongly agree)」「そう思う(Agree)」「どちらとも言えない(Neutral)」「思わない(Disagree)」「まったく思わない(Strongly disagree)という回答を書いています。同じ行の回答が同じ回答者によるものです。このcsvファイルのデータを使って作図を行います。

画面2
このデータのcsvファイルのダウンロード

 このcsvファイルをダウンロードして、あなたの作業ディレクトリに入れて下さい(作業ディレクトリの指定を参照)。

 ご自身のデータを用いる場合は、そのデータが入ったcsvファイルを作業ディレクトリに入れて下さい。Excelで作ったファイルをcsvファイルに変換する方法は、Excelで作った解析用ファイルのcsv形式での保存を参照して下さい。

 csvファイルをRに読み込み、データフレームに格納します。

csvファイルのRへの読み込み

d <- read.csv("Donburi.csv")

# csvファイル「Donburi.csv」を読み込んでデータフレームdに格納します。ファイル名を""で囲みます。ファイル名の拡張子「.csv」も忘れずに書きます。

# データフレームの名称(この例ではd)はお好みのものでよいです。

# Excelで作った解析用ファイルのRへの読み込み

このページの文頭に戻る

2. 作図

 tidyverseとscalesを使っての作図の仕方を説明します。これらをRに読み込んでいますか? 読み込んでいない場合は、tidyverseのRへの読み込みscalesのRへの読み込みを実行して読み込んで下さい。

 作図の命令文の基本です。

作図の命令文の基本

ggplot(データフレーム名, aes(データ)) +
geom_描く図の英語名() +
書式の命令文 +
書式の命令文

# ggplotで、用いるデータを指定します。

# geom_で、描く図を指定します。

# 書式の命令文を+で繋げます。いくつでも繋げることができます。最後の命令文の後に+は不要です。

2.1. 円グラフの作図(基礎情報として)

 基礎情報として、松茸と秋刀魚の丼を食べたかどうか、町をまた訪れたいかどうか(丼を食べた人と食べなかった人を合わせての回答)それぞれへの回答を円グラフ(画面3-1, 3-2)で見るとします。両グラフ間で回答の分布を比較するのではなく、各グラフ内での回答分布を見たいだけなので、帯グラフではなく円グラフにします(帯グラフでもよいのですが)。画面2のデータを用いて作図します。

画面3-1


画面3-2


 Rでは画面3-1を作図します。この図を、PowerPoint等に読み込んで画面3-2に加工します(Rでもこうした加工は出来るのですが、難しいので、PowerPointでやってしまいましょう)。日本語の論文・プレゼンテーションならば説明文も日本語にします。英語部分は白く塗りつぶすなり切り取るなりして、そこに日本語を書いて下さい。回答(「強くそう思う」等)も円グラフの中に書き込みます。

 作図の前に、画面2のデータの並び順を指定しておきます。

データの並び順の指定
d$Donburi <- factor(d$Donburi, levels = c("Ate", "Did not eat"))
d$Revisit <- factor(d$Revisit, levels = c("Strongly agree", "Agree", "Neutral", "Disagree", "Strongly disagree"))

# 回答の並び順を指定します。データフレームd中のデータ列Donburiに、松茸と秋刀魚の丼を食べたかどうかの回答の名称が、データ列Revisitに、町をまた訪れたいかどうかの回答の名称が入っています。並べたい順番に回答の名称を書きます。文字データなので、名称を""で囲みます。

# d$Donburi, d$Revisitの中身を上書きするためにd$Donburi, d$Revisitに再格納します。

# この命令を実行しないとアルファベット順に並びます。1つ目は、アルファベット順に並んでいるので実は指定不要です。指定の仕方の説明のために書いておきました。

# データの並び順の指定

 円グラフは、帯グラフを描いてから、それを円グラフに変換するという方法で作図します。

円グラフの作図;データ列に入っている各項目の数を集計して1つの図を描く場合

# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。

# 町をまた訪れたいかどうか(Revisit)を例に説明します。松茸と秋刀魚の丼を食べたかどうかの作図は、RevisitをDonburiに入れ替えて行ってください。

# 必須命令文

ggplot(d, aes(x = "", fill = Revisit)) +

# データフレームdを指定します。

# 1つの図を描く場合はx軸を指定しません。x = ""とします。xは小文字です。""の中は空です。

# fill = Revisitと指定します。この指定により、データ列Revisitをy軸として扱います。データ列Revisitには、Strongly agree, Agree, Neutral, Disagree, Strongly disagreeという回答が入っています。各回答の数を集計し、回答ごとに色分けをして作図します。

# 末尾の+を忘れないで下さい。

# 帯グラフにおける、作図に用いるデータフレームとデータの指定、および帯グラフの指定;データ列に入っている各項目の数を集計して1つの図を描く場合

geom_bar() +

# 描く図として、まずは帯グラフを指定します。

# 末尾の+を忘れないで下さい。

# 帯グラフにおける、作図に用いるデータフレームとデータの指定、および帯グラフの指定;データ列に入っている各項目の数を集計して1つの図を描く場合

coord_polar(theta = "y", direction = - 1) +

# 円グラフに変換します。

# theta = "y"と指定し、y軸として指定したFreqを描くようにします。yを""で囲みます。

# direction = - 1は、聴き取りやすさへの回答(Very good等)を時計回りに配置するという指定です。データの並び順で指定した順番で時計回りに配置します。これを省略すると反時計回りに配置されます。

# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「coord_polar(theta = "y", direction = - 1)」とします。

# 帯グラフの円グラフへの変換

# 省略してもよい命令文

# 以降の命令文を省略するとデフォルトで自動で描きます。

labs(x = "", y = "Intention to revisit") +

# 図の名称をIntention to revisitにします。x軸の名称は描かず、y軸の名称をIntention to revisitと指定します。名称を""で囲みます。x, yは小文字です。

# x軸・y軸の名称の指定

theme_void() +

# 図の背景色を白にします。余計な軸等も描かせないため、theme_void()を指定します。

# 図のデザインの指定

theme(axis.title.x = element_text(size = 18))

# 図の名称(Intention to revisit)の文字の大きさを18に指定します。axis.title.xであってaxis.title.yではないので注意してください。

# x軸・y軸の文字の大きさと書き方の指定

各回答の割合の計算

# 出来上がった図(画面3-1)をPowerPoint等に読み込んで加工するために、丼を食べたかどうか(Donburi)・町をまた訪れたいか(Revisit)それぞれにおける各回答の割合を計算します。そして(画面3-2)のような図に加工します。PowerPoint等への図の読み込み方は、図の保存・コピーの仕方を参照して下さい。

prop.table(table(d$Donburi))
prop.table(table(d$Revisit))

# データフレームdのデータ列Donburi, Revisitに入っている各回答の割合を計算します。

# 各データの割合の計算

このページの文頭に戻る

2.2. 帯グラフの作図

 いよいよ本番です。画面2のデータを使って、松茸と秋刀魚の丼を食べた人と食べなかった人それぞれにおける、町をまた訪れたいかどうかの回答分布(画面4-1, 4-2)を作図します。

画面4-1

画面4-2

 Rでは画面4-1を作図します。この図を、PowerPoint等に読み込んで画面4-2に加工します(Rでもこうした加工は出来るのですが、難しいので、PowerPointでやってしまいましょう)。日本語の論文・プレゼンテーションならば説明文も日本語にします。英語部分は白く塗りつぶすなり切り取るなりして、そこに日本語を書いて下さい。回答(「強くそう思う」等)も帯グラフのすぐそばに書き込みます。

 作図の前に、画面2のデータの並び順を指定しておきます。横棒の帯グラフにするので、円グラフのときとは逆の順番にします。

データの並び順の指定

d$Donburi <- factor(d$Donburi, levels = c("Did not eat", "Ate"))
d$Revisit <- factor(d$Revisit, levels = c("Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"))

# 回答の並び順を指定します。データフレームd中のデータ列Donburiに、松茸と秋刀魚の丼を食べたかどうかの回答の名称が、データ列Revisitに、町をまた訪れたいかどうかの回答の名称が入っています。並べたい順番に回答の名称を書きます。回答は文字情報なので、回答の名称を""で囲みます。

# d$Donburi, d$Revisitの中身を上書きするためにd$Donburi, d$Revisitに再格納します。

# この命令を実行しないとアルファベット順に並びます。

# データの並び順の指定

 では作図をします。

帯グラフの作図;データ列に入っている各項目の数を集計して複数の図を描く場合

# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。

# 必須命令文

ggplot(d, aes(x = Donburi, fill = Revisit)) +

# データフレームdを指定します。

# x = Donburiとして、松茸と秋刀魚の丼を食べたかどうか(AteかDid not eatか)が入っているデータ列Donburiをx軸に指定します。xは小文字です。Ate, Did not eatのデータをx軸に並べて描きます。

# fill = Revisitと指定します。この指定により、データ列Revisitをy軸として扱います。データ列Revisitには、Strongly agree, Agree, Neutral, Disagree, Strongly disagreeという回答が入っています。各回答の数を集計し、回答ごとに色分けをして作図します。

# 末尾の+を忘れないで下さい。

# 帯グラフにおける、作図に用いるデータフレームとデータの指定、および帯グラフの指定;データ列に入っている各項目の数を集計して複数の図を描く場合

geom_bar(position = "fill") +

# 描く図として帯グラフを指定します。position = "fill"と指定することで、百分率による作図にします。fillを""で囲みます。この命令文を省略してgeom_bar()すると、各回答の絶対数で作図します。

# 末尾の+を忘れないで下さい。

# 帯グラフにおける、作図に用いるデータフレームとデータの指定、および帯グラフの指定;データ列に入っている各項目の数を集計して複数の図を描く場合

scale_y_continuous(labels = percent) +

# y軸の目盛りをパーセント表記にします。scalesをRに読み込んでおかないとこの命令文を実行できません。この命令文を実行しないと0から1の率で表記します。

# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「scale_y_continuous(labels = percent)」とします。

# 回答割合の目盛りの表記の指定

# 省略してもよい命令文

# 以降の命令文を省略するとデフォルトで自動で描きます。

coord_flip() +

# 横棒の帯グラフにします。この命令文を実行しないと縦棒の帯グラフになります。

# 横棒か縦棒かの指定

guides(fill = guide_legend(reverse = TRUE)) +

# 図本体右横の凡例の並びを、データの並び順で指定したものと逆順にします。上から、Strongly agree, Agree, Neutral, Disagree, Strongly disagreeの順に並びます。この指定をしないと、Strongly disagree, Disagree, Neutral, Agree, Strongly agreeの順番(データの並び順で指定した順番)に並びます。図本体での並びと合うように、逆順にするかしないかを決めて下さい。

# 凡例の並び順の指定

labs(x = "", y = "Percent") +

# 縦軸(横棒にしているので実はx軸)の名称は書かず、横軸(実はy軸)の名称をParcentにします。名称を""で囲みます。x, yは小文字です。

# x軸・y軸の名称の指定

theme_classic() +

# 図の背景色を白にします。

# 図のデザインの指定

theme(
axis.title.x = element_text(size = 18),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 18)
)

# 文字の大きさを指定します。横軸(横棒にしても、なぜかこちらは横軸がx軸のままです)の名称(axis.title.x)の文字の大きさを18に、目盛り(axis.text.x)の文字の大きさを12に指定します。縦軸(これもy軸のまま)の目盛り(axis.title.y)には、松茸と秋刀魚の丼を食べたかどうか(AteかDid not eat)が入っています。その文字の大きさを18に指定します。縦軸(y軸)の名称(axis.text.y)は書かないので、その文字の大きさも指定しません。

# x軸・y軸の文字の大きさと書き方の指定

各回答の割合の計算

# 出来上がった図(画面4-1)をPowerPoint等に読み込んで加工するために、丼を食べた人(Ate)食べなかった人(Did not eat)それぞれにおける各回答の割合を計算します。そして(画面4-2)のような図に加工します。PowerPoint等への図の読み込み方は、図の保存・コピーの仕方を参照して下さい。

x1 <- filter(d, Donburi == "Ate")
x2 <- filter(d, Donburi == "Did not eat")

# データフレームdの中から、丼を食べた人(Ate)の回答を取り出しデータフレームx1に格納します。食べなかった人(Did not eat)の回答を取り出しデータフレームx2に格納します。=を2つ繋げ==とすることに注意して下さい。回答は文字情報なので、取り出す回答名を""で囲みます。

prop.table(table(x1$Revisit))
prop.table(table(x2$Revisit))

# データフレームx1, x2のデータ列Revisitに入っている各回答の割合を計算します。

# 各データの割合の計算

このページの文頭に戻る