立命館大学言語学研究会 (Day1)

 以下は、立命館大学言語学研究会のR講習会に関するメモです*1

簡単な計算

 Rのコンソール画面の入力に慣れるために、簡単な計算をしてみましょう。

# 四則演算
1 + 1
3 - 2
2 * 2
8 / 2
(1 + 2) * 3
# 累乗
3 ^ 2 
  • 練習問題
    • こちらのページにある四則演算を「Rを使って」解いてみましょう。

関数

 関数と呼ばれる機能を使って、平方根や絶対値を求めてみましょう。

# 平方根を計算するための関数
sqrt(9)
# 絶対値を計算するための関数
abs(-5)

変数への代入

 次に、変数と呼ばれる箱(のようなもの)の中にデータを格納してみましょう。変数の中にデータを入れることを代入と言います。

# 変数に値を代入
x <- 1
# 代入結果を確認
x
# 上書き
x <- 2
x

# 変数にベクトルを代入(:は〜という意味)
y <- 1 : 5
y
z <- c(1, 3, 7, 8, 10) # cは関数の名前
z
# ベクトルの長さ(要素数)の確認
length(x)
length(y)
length(z)
# ベクトルの3番目の要素だけを取り出す
y[3]
# ベクトルの2番目から4番目の要素だけを取り出す
y[2 : 4]

# 変数同士の計算
y + z
z - y
y * z

# 合計を計算するための関数
sum(y)
sum(z)

# 合計同士の計算
sum(y) + sum(z)
sum(y) - sum(z)
sum(y) * sum(z)
sum(y) / sum(z)

# ベクトルの結合
yz <- c(y, z)
yz
  • 練習問題
    • 5という数値をxという変数に代入し、その中身を表示しなさい
    • xに代入した数値に1を足しなさい
    • xに代入した数値を2で割りなさい
    • 7という数値をyという変数に代入し、xとyを掛け合わせなさい
    • 1, 3, 5, 7, 9という5つの数値をxという変数に代入し、その中身を表示しなさい
    • xに代入した5つの数値それぞれに対して、1を足した数値を効率的に求めなさい
    • 2, 4, 6, 8, 10という5つの数値をyという変数に代入し、xとyを掛け合わせなさい
    • xとyを結合し、1つのベクトルにしなさい

行列

 ここまでは、ベクトルという1次元のデータを使用してきましたが、行列という2次元のデータを作成することも可能です。

# 行列を作成
matrix(c(1, 2, 3, 4), nrow = 2) # 引数nrowで行列の行数を指定
matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE) # 引数byrowでTRUEを指定すると、数字の配置が換わる(要注意)
# 変数に行列を代入
m1 <- matrix(c(12, 17, 22, 16), nrow = 2)
# 代入結果を確認
m1 
# 行列の行数や列数を確認
nrow(m1)
ncol(m1)
dim(m1)

 作成した行列に行ラベルと列ラベルを付けることもできます。

# 行ラベルの作成
rownames(m1) <- c("A", "B")
# 列ラベルの作成
colnames(m1) <- c("X", "Y")
# ラベルをつけた結果の確認
m1

# 行列を使った計算
m2 <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, byrow = TRUE)
m2
m3 <- matrix(c(7, 8, 9, 10, 11, 12), nrow = 2, byrow = TRUE)
m3
# 行列同士の計算
m2 + m3
m2 * m3

# 元の行列
m2
# 2行目・3列目の要素を取り出し
m2[2, 3]
# 2行目の要素全てを取り出し
m2[2, ]
# 3列目の要素全てを取り出し
m2[, 3]
# 2行目の要素以外の全てを取り出し
m2[-2, ]
# 3列目の要素以外の全てを取り出し
m2[, -3]

# 行列の総和
sum(m3)
# 行列の1行目の総和
sum(m3[1, ])
# 行列の2〜3列目の平均値
mean(m3[, 2 : 3])
# 行ごとの総和
rowSums(m3)
# 列ごとの総和
colSums(m3)

# 行列の転置
t(m2)
# 元の行列
m2
  • 練習問題
    • 以下の行列(商品Aと商品Bに関するクチコミのデータ)を作成し、上記の行列のPositiveとNegativeの列のみを表示しなさい
    • 商品Aに関するクチコミ数の総計と、商品Bに関するクチコミ数の総計を計算しなさい
A B
Positive 122 86
Negative 97 135
Neutral 244 230

CSVファイルからの読み込み

 Rでファイルを読み込む方法はいくつかありますが、ここでは、マウス操作で行う方法を使います。データの形式は、CSVファイルとします。読み込むデータは、Excelなどで用意します。

# 列ラベルも行ラベルもない場合
dat1 <- read.csv(file.choose(), header = FALSE)
# 列ラベルがある場合
dat2 <- read.csv(file.choose(), header = TRUE)
dat2
# 列ラベルと行ラベルがある場合
dat3 <- read.csv(file.choose(), header = TRUE, row.names = 1)
dat3
  • 練習問題
    • 以下のAKB48チームメンバーリスト(2015年7月現在)のデータ*2CSVファイルの形式で用意し、Rで適切に読み込みなさい

氏名,年齢,身長
小嶋陽菜,27,164
高橋みなみ,24,148.5
大家志津香,23,164
宮崎美穂,22,159
横山由依,22,158
中村麻里子,21,161
島崎遥香,21,157
小笠原茉由,21,151
前田亜美,20,165
中西智代梨,20,160
小嶋菜月,20,154
佐々木優佳里,19,158
入山杏奈,19,157
田北香世子,18,155
宮脇咲良,17,160
岩田華怜,17,159
白問美瑠,17,155
平田梨奈,17,149
谷口めぐ,16,159
山田菜々美,16,154
大和田南那,15,154
樋渡結依,15,151
西山怜那,14,151

視覚化

 Rのcorporaという追加パッケージに入っているBNCbiberというデータセットを使って、ヒストグラムを描いてみましょう*3

# 追加パッケージのインストール(初回のみ)
install.packages("corpora", dependencies = TRUE)
# 追加パッケージの読み込み(Rを起動するごとに毎回)
library(corpora)
# データセットの準備
data(BNCbiber)
# データセットのヘルプを確認
help(BNCbiber)
# データの冒頭の5行のみを表示
head(BNCbiber, 5)

# ヒストグラムの描画(列名で指定)
hist(BNCbiber[, 2])
# ヒストグラムの描画(変数名$列名の形式で指定)
hist(BNCbiber$f_01_past_tense)
# ヒストグラムのタイトルと軸ラベルを変更
hist(BNCbiber[, 2], main = "past tense", xlab = "frequency", ylab = "number of texts")
# ヒストグラムの色を変更
hist(BNCbiber[, 2], main = "past tense", xlab = "frequency", ylab = "number of texts", col = "grey")
# Rで使える色の確認
colors()

 同じデータセットを使って、箱ひげ図を描いてみましょう。

# 箱ひげ図の描画
boxplot(BNCbiber[, 2], range = 0)
# 箱ひげ図の作成に用いられている要約統計量の確認
boxplot.stats(BNCbiber[, 2])
# 箱ひげ図のタイトルと色を変更
boxplot(BNCbiber[, 2], range = 0, main = "past tense", col = "grey")
# 箱ひげ図の外れ値を表示
boxplot(BNCbiber[, 2], main = "past tense", col = "grey")

# アヤメのデータセットの確認
iris
help(iris)
# グループ別の箱ひげ図の描画
boxplot(iris[, 1] ~ iris[, 5], col = "grey")
# グループ別の箱ひげ図の描画(別の書き方)
boxplot(iris$Sepal.Length ~ iris$Species, col = "grey")
# ノッチのある箱ひげ図の描画
boxplot(iris$Sepal.Length ~ iris$Species, col = "grey", notch = TRUE) # ノッチがオーバーラップしていなければ統計的な有意差あり

# 追加パッケージのインストール(初回のみ)
install.packages("beeswarm", dependencies = TRUE)
# 追加パッケージの読み込み(Rを起動するごとに毎回)
library(beeswarm)
# 箱ひげ図の上に個々のデータの分布を重ねて描画
boxplot(iris$Sepal.Length ~ iris$Species, col = "grey")
beeswarm(iris$Sepal.Length ~ iris$Species, col = "black", pch = 16, add = TRUE) # pchでポイントの形を指定
  • 練習問題
    • irisデータの1列目のデータでヒストグラムを作成しなさい(図の色は赤、タイトルはSepal.Length)
    • irisデータの2列目のデータで箱ひげ図を作成しなさい(図の色は青、タイトルはSepal.Width)
    • irisデータの3列目のデータを使って、アヤメの品種別に箱ひげ図を作成しなさい(図の色は緑、タイトルはPetal.Length、個々のデータを重ね書き)
    • irisデータの4列目のデータを使って、アヤメの品種別に箱ひげ図を作成しなさい(図の色は緑、タイトルはPetal.Width、ノッチを入れる)

 Rのtextometryという追加パッケージに入っているrobespierreというデータセットを使って、モザイクプロットを描いてみましょう。

# 追加パッケージのインストール(初回のみ)
install.packages("textometry", dependencies = TRUE)
# 追加パッケージの読み込み(Rを起動するごとに毎回)
library(textometry)
# データセットの準備
data(robespierre)
# データセットの確認
robespierre
help(robespierre)
# データ最終行の削除
robespierre.2 <- robespierre[-6, ]
# 修正したデータセットの確認
robespierre.2
# モザイクプロットを描画
mosaicplot(robespierre.2)
# ラベルの向きを変更
mosaicplot(robespierre.2, las = 2)

 ここまでは1つの変数のみを視覚化してきましたが、次は、2つ(以上)の変数を散布図で視覚化してみます。

# 散布図を描画
plot(BNCbiber$f_01_past_tense, BNCbiber$f_03_present_tense)
# 散布図の引数を指定
plot(BNCbiber$f_01_past_tense, BNCbiber$f_03_present_tense, main = "tense", xlab = "past", ylab = "present")
# 点の大きさとタイプと色を指定
plot(BNCbiber$f_01_past_tense, BNCbiber$f_03_present_tense, main = "tense", xlab = "past", ylab = "present", cex = 1.2, pch = 16, col = "grey")

# 追加パッケージのインストール(初回のみ)
install.packages("car", dependencies = TRUE)
# 追加パッケージの読み込み(Rを起動するごとに毎回)
library(car)
# 散布図と箱ひげ図を同時に描画
scatterplot(BNCbiber$f_01_past_tense, BNCbiber$f_03_present_tense, xlab = "past", ylab = "present", smoother = FALSE, reg.line = FALSE)

# 散布図行列を描画
pairs(BNCbiber[, 2 : 4])
# おまけ: もう少し綺麗な散布図行列を描画
install.packages(c("psych", "GGally"), dependencies = TRUE)
library(psych)
pairs.panels(iris, bg = as.numeric(iris$Species), pch = 21)
library(GGally)
ggpairs(iris, colour = "Species", shape = "Species")
  • 練習問題
    • Rのcarsデータを表示しなさい(コンソールにcarsと入力し、エンターキー)
    • carsデータで散布図を作成しなさい(X軸のラベルをspeed、Y軸のラベルをdist、タイトルをcars)
    • 上記の散布図の点の形を▲にし、点の色をピンク、点の大きさを1.5倍にしなさい
    • irisデータの1〜4列目のデータで散布図行列を作成しなさい

参考図書

Rによるやさしいテキストマイニング

Rによるやさしいテキストマイニング

*1:本講習会は、学内のクローズドなイベントです

*2:兼子毅 (2015). 『ゼロから始めるR―四則演算から多変量解析まで』日科技連出版社, p.99

*3:Rの追加パッケージのインストールの仕方、呼び出し方については、こちらなどに詳しく書いてあります。