2023.10.24作成  2024.9.30更新

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

副読文書

VI-2. アンケート結果の示し方
選択肢から1つを選んで回答(複数選択が不可)
関連する設問の間で回答の分布を比較することが目的
(「これ研」本文の第3部第4章;p. 98)

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

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

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

・選択肢から1つを選んで回答して貰う(複数選択が不可)。
・複数の設問をし、回答の分布を設問の間で比較することが目的。

たとえば、早口の音声と発音不明瞭の音声を聴いて貰い、それぞれの聴き取りやすさをアンケートしたとします。このアンケートは、早口と発音不明瞭とで回答の分布が異なるのかどうかを見ることが目的です。
 こうしたアンケートでは、帯グラフで回答の分布を比較します。回答の比較は、円グラフよりも帯グラフの方がわかりやすいからです。複数のアンケート結果を作図して比較します。
 作図の仕方を、音声の聴き取りやすさのアンケート結果(「これ研」本文の第3部第4章;p. 98)を例に説明します。「これ研」の第3部第4章「アンケート結果の示し方」(p. 98)を読んで、アンケート結果の示し方を理解しておいて下さい。

  1. 解析に用いるcsvファイルのRへの読み込み
  2. アンケート結果の集計
  3. 作図(「これ研」本文の図3.14;p. 99)
    1. 帯グラフの作図(「これ研」本文の図3.14; p. 99)
    2. 円グラフの作図(参考のため)(「これ研」本文の図3.14; p. 99)

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

作業ディレクトリの指定

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

# パソコン内での作業ディレクトリの位置がわかっている場合はこの方法が便利です。作業ディレクトリの位置の知り方は作業ディレクトリの表示を参照して下さい。

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

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

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

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

tidyverseのRへの読み込み

library(tidyverse)

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

# パッケージ(関数集)のRへの読み込み

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

scalesのRへの読み込み

library(scales)

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

# パッケージ(関数集)のRへの読み込み

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

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

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

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

# 実行例

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

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

このページの文頭に戻る

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

 googleフォームで、音声の聴き取りやすさのアンケート(画面1)を行ったとします。早口と発音不明瞭の音声を聞いて貰い、聴き取りやすさを5段階で訊ねました。

画面1
聴き取りやすさのアンケート

このアンケート結果を、csvファイル「Voice.csv」(画面2)に保存しました(架空データです)。Rで解析作図をするために英語にしています。早口(Rapid)と発音不明瞭(Inarticulate)のそれぞれについて、「とても聴き取りやすい(Very good)」「聴き取りやすい(Good)」「どちらとも言えない(Neutral)」「聴き取りにくい(Bad)」「非常に聴き取りにくい(Very bad)という回答を書いています。同じ行の回答が同じ回答者によるものです。このcsvファイルのデータを使って作図を行います。

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

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

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

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

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

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

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

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

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

このページの文頭に戻る

2. アンケート結果の集計

 本作図では、複数のアンケート結果を並べて描きます(画面3-1, 3-2を参照;これに対してVI-1. アンケート結果の示し方の作図では、1つのアンケート結果のみを作図している)。複数図を描く場合は、画面2のデータをあらかじめ集計してしまいます。早口(Rapid)と発音不明瞭(Inarticulate)それぞれのVery good, Good, Neutral, Bad, Very badの回答数を数えます。

アンケート結果の集計

x1 <- table(d$Rapid)
x2 <- table(d$Inarticulate)

# データフレームdのデータ列Rapid(d$Rapid)に、早口(Rapid)での回答(Very good, Good, Neutral, Bad, Very bad)が入っています(画面2)。それぞれの回答数を集計しx1に格納します。

# データフレームdのデータ列Inarticulate(d$Inarticulate)に、発音不明瞭(Inarticulate)での回答(Very good, Good, Neutral, Bad, Very bad)が入っています(画面2)。それぞれの回答数を集計しx2に格納します。

# 格納先の名称(この例ではx1, x2)はお好みのものでよいです。

# x1, x2の中身です。

# それぞれの回答数が入っています。

# 各データの数を集計

x3 <- data.frame(Voice = "Rapid", x1)
x4 <- data.frame(Voice = "Inarticulate", x2)

# 早口(Rapid)のデータx1を、音声の名称Rapidと統合してデータフレームx3に格納します。Rapidを""で囲みます。

# 発音不明瞭(Inarticulate)のデータx2を、音声の名称Inarticulateと統合してデータフレームx4に格納します。Inarticulateを""で囲みます。

# Voiceが、音声の名称Rapid, Inarticulateが入っているデータ列の名称になります。この名称(Voice)はお好みのものでよいです。ただし必ず、x3, x4で同じ名称を使って下さい。

# 格納するデータフレームの名称(この例ではx3, x4)もお好みのものでよいです。

# x3, x4の中身です。

# Voiceに音声の種類が、Var1に聴き取りやすさが、Freqに回答数が入っています。Var1とFreqは自動的に与えられたデータ列名です。

# 複数のデータを統合して新しいデータフレームを作成

x3 <- rename(x3, Answer = Var1)
x4 <- rename(x4, Answer = Var1)

# データフレームx3, x4のデータ列Var1の名称をAnswerに変更します。x3, x4の中身を上書きするためにx3, x4に再格納します。データ列の名称がVar1からAnswerに変わりました。

# データ列の名称を変更;部分的に変更する場合

d2 <- rbind(x3, x4)

# 早口(Rapid)のデータフレームx3と発音不明瞭(Inarticulate)のデータフレームx4を統合してデータフレームd2に格納します。

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

# d2の中身です。

# データを、縦に増える(行が増える)方向に統合

d2$Voice <- factor(d2$Voice, levels = c("Inarticulate", "Rapid"))
d2$Answer <- factor(d2$Answer, levels = c("Very bad", "Bad", "Neutral", "Good", "Very good"))

# 音声と回答の並び順を指定します。データフレームd2中のデータ列Voiceに音声の名称が、データ列Answerに、聴き取りやすさの回答の名称が入っています。並べたい順番に名称を書きます。文字データなので、名称を""で囲みます。

# d2$Voiceおよびd2$Answerの中身を上書きするために、d2$Voiceおよびd2$Answerに再格納します。

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

# ここで指定する図中での並び順と、凡例の並び順で指定する並び順をうまく組み合わせて、見た目に自然な並びにして下さい。

# データの並び順の指定

このページの文頭に戻る

3. 作図
(「これ研」本文の図3.14; p. 99)

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

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

作図の命令文の基本

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

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

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

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

3.1. 帯グラフの作図
(「これ研」本文の図3.14; p. 99)

 音声の聴き取りやすさのアンケート結果の帯グラフ(画面3-1, 3-2)を作図しましょう。

画面3-1

画面3-2

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

 アンケート結果の集計の手順に従ってまとめたデータがデータフレームd2に入っています。


Voiceが音声の種類、Answerが聴き取りやすさ、Freqが回答数です。このデータを用いて作図します。

帯グラフの作図;データ列に入っている数値を用いて複数の図を描く場合

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

# 必須命令文

ggplot(d2, aes(x = Voice, y = Freq, fill = Answer)) +

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

# x = Voiceとして、音声の種類(RapidかInarticulateか)が入っているデータ列Voiceをx軸に指定します。xは小文字です。Rapid, Inarticulateのデータをx軸に並べて描きます。

# y = Freqとして、回答数が入っているデータ列Freqをy軸に指定します。yは小文字です。

# fill = Answerと指定して、データ列Answerに入っている回答(Very good等)ごとに色分けをして作図します。

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

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

geom_bar(stat = "identity", position = "fill") +

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

# ggplotでy軸に指定したデータ列にデータの数値が入っており、その数値を作図する場合はstat = "identity"を指定します。本作図でy軸に指定したデータ列Freqには各回答の数が入っています。この数値を図にするのでこの指定をします。identityを""で囲みます。

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

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

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

scale_y_continuous(labels = percent) +

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

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

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

# 省略してもよい命令文

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

coord_flip() +

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

# 横棒か縦棒かの指定

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

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

# 凡例の並び順の指定

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

# 縦軸(横棒にしているので実はx軸)の名称は書かず、横軸(実はy軸)の名称をPercentにします。名称を""で囲みます。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)には音声の種類(RapidかInarticulate)が入っています。その文字の大きさを18に指定します。縦軸(y軸)の名称(axis.text.y)は書かないので、その文字の大きさも指定しません。

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

各回答の割合の計算

# 出来上がった図(画面3-1)をPowerPoint等に読み込んで加工するために、早口(Rapid)・発音不明瞭(Inarticulate)それぞれにおける各回答の割合を計算します。そして(画面3-2)のような図に加工します。PowerPoint等への図の読み込み方は、図の保存・コピーの仕方を参照して下さい。

prop.table(table(d$Rapid))
prop.table(table(d$Inarticulate))

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

# 各データの割合の計算

このページの文頭に戻る

3.2. 円グラフの作図(参考のため)
(「これ研」本文の図3.14; p. 99)

 参考のため、データ列に入っている数値を用いて円グラフを作図する方法を説明しておきます。この方法は、VI-1章で行った、データ列に入っている各項目の数を集計して1つの図を描く方法とは異なります。早口(Rapid)の聴き取りやすさのアンケート結果の円グラフ(画面4-1, 4-2)を作図しましょう。

画面4-1

画面4-2

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

 アンケート結果の集計の手順に従ってまとめた早口のデータがデータフレームx3に入っています。データ列の名称をVar1からAnswerに変えてあります(データ列の名称を変更;部分的に変更する場合)。発音不明瞭を作図したい場合はx3をx4に置き換えてください。


Voiceが音声の種類、Answerが聴き取りやすさ、Freqが回答数です。このデータを用いて作図します。

 聴き取りやすさの並び順を、Very good, Good, Neutral, Bad, Very badにしましょう。

データの並び順の指定

x3$Answer<- factor(x3$Answer, levels=c("Very good", "Good", "Neutral", "Bad", "Very bad"))

# 回答の並び順を指定します。データフレームx3中のデータ列Answerに聴き取りやすさのの回答の名称が入っています。並べたい順番に回答の名称を書きます。回答は文字情報なので、回答の名称を""で囲みます。

# x3$Answerの中身を上書きするためにx3$Answerに再格納します。

# この命令を実行しないとアルファベット順に聴き取りやすさが並びます。

# データの並び順の指定

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

円グラフの作図;データ列に入っている数値を用いて1つの図を描く場合

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

# 必須命令文

ggplot(x3, aes(x = "", y = Freq, fill = Answer)) +

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

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

# y = Freqとして、回答数が入っているデータ列Freqをy軸に指定します。yは小文字です。

# fill = Answerと指定して、データ列Answerに入っている回答(Very good等)ごとに色分けをして作図します。

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

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

geom_bar(stat = "identity") +

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

# ggplotで指定したデータ列にデータの数値が入っており、その数値を作図する場合はstat = "identity"を指定します。たとえば、データ列Freqには各回答の数が入っています。この数値を図にする場合はこの指定をします。identityを""で囲みます。

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

# 帯グラフにおける、作図に用いるデータフレームとデータの指定、および帯グラフの指定;データ列に入っている数値を用いて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 = "Rapid") +

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

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

theme_void() +

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

# 図のデザインの指定

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

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

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

各回答の割合の計算

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

prop.table(table(d$Rapid))

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

# 各データの割合の計算

このページの文頭に戻る