2014-08-04 LET2014@Fukuoka Univ.
による外国語教育データの分析と可視化の基本
http://sakaue.info/let2014sakaue.zip
本日の資料
• ZIP ファイルを解凍し,Documents へ移動させてください
1) LET2014_FUKUOKA_120804_sakaue.pdf
2) let2014_codes.txt
3) let2014.csv
4) let2014.xls
お隣で助け合いを...
【お願い】
録音録画自由
著作権等完全放棄
Tweet Me!
#let2014
0. 自己紹介
•阪上 辰也 (SAKAUE, Tatsuya)
• 所属:         外国語教育研究センター
• 専門: 第二言語習得(関係節の習得)
• Nagoya.R /SappoRo.R 元主催, HiRoshima.R 主催
• ID: sakaue にて
• 詳しくは...
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
 とは何か
• 統計処理を目的とするプログラミング言語
• 無償+オープンソースのソフトウェア
• 作者:Ross Ihaka & Robert Gentleman (R & R)
• Ross Ihaka and Robert Gentleman. R: A language for data analysis and graphics.
Journal of Computational and Graphical Statistics, 5(3):299-314, 1996.
• http://biostat.mc.vanderbilt.edu/twiki/pub/Main/JeffreyHorner/JCGSR.pdf
  の何が良いのか
•無償(IBM SPSS Statistics は約10万円で保守なし...)
•統計処理の種類が豊富
•作図結果が美しい(簡素)
なぜ今  なのか
• 学生指導・研究費節約
• 分析手法の明確化
• 可視化による傾向把握
 の弱点
• 文字入力による操作
• プログラムを組む感覚を養成
• 確実に伝わるという利点も
• 多方面の知識が必要
• 英語+統計+計算機
• 参考書籍がお高め...
Excel や SPSS は...
•高価(気軽に使えない)
•処理が信頼できず
• Excel 使うな(奥村先生@三重大)
•作図結果が美しくない
  の基本操作
‐Install / Update / Uninstall‐
1. http://www.r-project.org/ にアクセス
2. “download R”をクリック
3. JAPAN の中から1つを選ぶ
4. OS に応じたリンクをクリック
  のインストール
  のインストール
• Windows: : http://cran.ism.ac.jp/bin/windows/base/
•「Download R 3.1.1 for Windows」をクリック
• Mac OS X:http://cran.ism.ac.jp/bin/macosx/
•「R-3.1.1-mavericks.pkg」をクリック
  のアップデート
1. http://www.r-project.org/ にアクセス
2. 自分が使っているバージョンより
新しいものが出ているか確認
3. 新規にインストール用ファイルを
ダウンロードしてインストール
  のアップデート
• セキュリティ上の問題がない限りは,
むやみに更新しない
• パッケージ(付加機能)の動作不良回避
• 新旧の共存は可能
• Windows/Mac: 別名でインストール
• ただし何がどう共有されているかは不明
 のアンインストール
• Windows 7/8
• コンパネ→プログラムのアンインストール
• Mac OS X
• /Applications にある    アイコンと /Library の中の
Frameworks にある R. framework を削除(CleanApp 可)
  の起動
• Windows 7/8
• START → Program → R → R 3.1.1 を選択
• Mac OS X
• /Applications 内の をダブルクリック
「コンソール」の表示を確認
  の終了
• コンソールに「q()」と入力
• 今は「作業スペース」は保存しない
• ウィンドウが消えれば終了
  で困ったら...
•まずは Web 検索!
• seekR: http://seekr.jp/
• R SEEK:http://www.rseek.org/
• RjpWiki: http://www.okada.jp.org/RWiki/
• R-Tips:http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
• 標準搭載の help(sth) でも確認可能
  で困ったら...
•参照資料は豊富にあります
• R オンラインガイド(山口大学教育学部教育心理学コース)
• R 言語入門(ドットインストール)
• はじめての「R」(林真広 氏)
• R による統計処理(青木繁伸先生@群馬大学)
  概論まとめ
•    は統計ソフト
•無償+何でも統計+美しく作図
•困ったら Web 検索!!
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
 といえば
関数
が命
関数とは
指定した値に対して
何らかの処理をして
結果を返すもの
関数(Input を処理)
Input
Output
sqrt():平方根
•> sqrt(2)
•> sqrt(144)
•> sqrt(104976)
sqrt 関数
2
1.414214
「関数(値)」が命
• には多数の関数がある
•q() や help(sth) も関数
•必要な関数をしつこく実行
  といえば
変数
も命
変数とは
1つ以上の値を
まとめていれておく
「箱」のこと
では
ベクトルとも呼ばれ
複数の値を1つに
まとめたものを指す
統計処理などを行うには
複数の値をまとめて扱う
ことが必要で
それを使い回すために
変数を使う
ちなみに
変数に数値を
入れることを
「代入」といいます
変数の名前は“hako”
•> hako <- c(1,2,3,4,5)
•> hako
• c() 関数:combine (cf. https://twitter.com/#!/sakaue/status/193708048030760960)
• 値を1つにまとめる関数
• 逆に書いても(一応)OK
c()関数の“<-”は何?
hako <- c(1,2,3,4,5) の“<-”は
左向きの矢印(←)
を表現
(入れ替えても動きます)
コンソールで「+」が出たら...
• 入力中に誤って[Enter] を押すと,
待機状態を示す「+」が出る
• [STOP] ボタンでキャンセル
• [Esc] キーでキャンセル
履歴機能と補完機能
•履歴: [↑][↓] の矢印キー
•補完: [Tab]キー
いま“hako”という名前の
「変数」の中に
1から5までの5つの数字が
まとめて入っている状態
以下の関数を実行
•> sqrt(hako)
•> log(hako)
もし変数がなかったら
何度も関数を
繰り返す羽目になる
sqrt(1), sqrt(2) ... sqrt(5)
log(1), log (2) ... log (5)
一括処理のために
変数(ベクトル)の
利用は不可欠
ここまでのまとめ
•   は「関数」と「変数」が命
• 関数を使って数値を処理
• q(), help(), sqrt(), log(), c()
• 変数を使って一括処理!
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
Sub topics
1. 行列のおはなし
2. データフレーム
3. 外部データの読込
さきほど
一行で表せる数値を
扱いましたが
実際のデータは
複数行あるはず
例えば...
•身長と体重
•年齢と年収
•覚えた単語数とTOEICスコア
表にすれば...
身長 体重
A 180 75
B 170 65
C 165 60
D 175 70
E 190 80
複数の行や列で表される
データを扱うために
Rでは「行列」を使う
行列とは
数値が縦横に並べられたもの
1 2 3
4 5 6
7 8 9
行
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
列
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
ひとまず
「行列」という存在を
知ってやってください
そんな行列を扱うために
matrix() 関数
を使う
matrix() 関数
•行列を作る関数
•matrix(要素, 行の数, 列の数)
•デフォでは列方向に配置
このようなデータなら
身長 体重
A 180 75
B 170 65
C 165 60
D 175 70
E 190 80
karada <- matrix(c(180, 170, 165,
175, 190, 75, 65, 60, 70, 80), 5, 2)
行列を作ってみる
1. c() 関数で、数値を連結
2. matrix() 関数で、行列に変換
• 「5行で2列」にするという指定をする
3. karada という名の変数に代入
> karada
と入力して
変数の中身を確認
行列の要素を取り出す
demo <- matrix(1:30,nrow=5,ncol=6)
http://gyazo.com/76c58d5d6c8426a44f160897cda99671.png
行列の要素を取り出す
2行目を表示 → demo[2,]
2列目を表示 → demo[,2]
http://gyazo.com/6726084afd9e1cc4b03df85fe6bc0f29.png
行列の要素を取り出す
2行目と4行目を表示
→ demo[c(2,4),]
2列目と4列目を表示
→ demo[, c(2,4)]
行列の要素を取り出す
http://gyazo.com/a116c0e2f1284ea7d38bf7024d92f1cc.png
行列まとめ
• 横方向が行、縦方向が列
• デフォルトでの数値の並びに注意
• 必要な要素を適宜取り出して値を確認
Sub topics
1. 行列のおはなし
2. データフレーム
3. 外部データの読込
データフレームとは
• いろんなデータを突っ込んだもの
• いろんな=質的データ+量的データ
• 突っ込む=一緒に並んでいること
名前 血液型 身長 体重
坂本 B 175 65
高橋 B 177 70
阿部 B 174 75
長野 A 179 70
松本 O 170 60
データフレームとは
データフレームとは
• Excel の WS とほぼ同じイメージ
• 既存データの読込>自力で作る
• data.frame() 関数が使える
じゃあ
実際に自力で作るか
といったら...
そこで
外部データの読込
を行おう
1. 行列のおはなし
2. データフレーム
3. 外部データの読込
Sub topics
ここはトラブル多発地域です
!
うまくいかない時は
まず説明をお聴きください
おそらく...
•Excel でデータ管理
•できればそのまま活かしたい
作業ディレクトリの設定
•作業ディレクトリとは...
•データを読み込む場所
•データを書き出す場所
作業ディレクトリの設定
• Windows:ファイル → ディレクトリの変更
• “My Documents”にファイル移動
• Mac OS X:環境設定 → 一般(起動)
• ホームディレクトリにファイル移動
• Linux:up to you...
作業ディレクトリの設定
• コンソールからの確認・設定も可能
• getwd()関数:現在の設定を確認
• > getwd()
• setwd()関数:現在の設定を変更
• > setwd("/Users/sakaue/Desktop/")
• 実行注意!!
データの読込 その1
• read.csv() 関数
• CSV 形式のファイルを読み込む
• CSV: Comma Separated Value
1. let2014.csv を作業ディレクトリへ移動
• XLS/XLSX 形式のものは保存時に変換
• CSV ファイルの文字コードは UTF-8 に
2. > test <- read.csv(choose.files(), header = TRUE) #Win
# test <- read.csv(file.choose(), header = TRUE) #Mac
3.> test [Enter] で中身を確認
データの読込 その1
CSV 変換なんて面倒...
という方に
データの読込 その2
• read.delim() 関数
• 表形式のデータ読み込む
• delim: delimiter(区切り文字)
1.let2014.xls を開いてマウスで範囲指定
2.> test2 <- read.delim("clipboard") で代入
!
3.> test2 [Enter] で中身を確認
データの読込 その2
Mac の場合: read.delim(pipe("pbpaste"))
読み込んだら関数で処理
> table(test[,3])
•度数分布を確認する
> mean(test[,3])
•平均値を求める
3列目対象
3列目対象
外部データの読込
• 作業ディレクトリの設定に注意
• CSV 形式に変換後,read.csv()関数で読込
• 必要な行 or 列を指定して処理
教育データを集めたら
数値要約だけでなく
データの可視化も必要
基本的な作図手順
1. 変数に値を代入
2. 作図用の関数で処理
たった2段階
Excel や SPSS ではこうはいかない
• ヒストグラム
• 散布図
• 棒グラフ
• 折れ線グラフ
• 箱ひげ図
作成できる図の種類
まずはヒストグラム
【事例】
得点のヒストグラムを
作成する
まずはヒストグラム
> pretest <- (test$Pre)
> hist(pretest)
次は散布図
【事例】
事前テストの得点と
事後テストの得点を
比較し,伸びを見る
続いて散布図
> pretest <- (test$Pre)
> posttest <- (test$Post)
> plot(pretest, posttest)
> plot(pretest,posttest, ylim=c(0,100),xlim=c(0,100))
続いて箱ひげ図
【事例】
事前テストの得点と
事後テストの得点の
<幅>を比較する
続いて箱ひげ図
> pretest <- (test$Pre)
> posttest <- (test$Post)
> boxplot(pretest, posttest, names=c("PRE", "POST"))
箱ひげ図
> boxplot(pretest, posttest,
names=c("Pre", "Post"),
horizontal=T)
箱ひげ図
> boxplot(pretest, posttest,
names=c("Pre", "Post"),
horizontal=T, ylim=c(0,100))
箱ひげ図
> boxplot(pretest, posttest,
names=c("Pre", "Post"),
horizontal=T, ylim=c(0,100),
col="blue")
箱ひげ図
!
> boxplot(pretest, posttest,
names=c("Pre", "Post"), horizontal=T,
ylim=c(0,100), col="blue",
xlab="SCORE", ylab="TEST",
main="BOXPLOT")
今度は折れ線グラフ
> quiz <- test[,c(3,4,5,6,7,8,9,10,11,12)]
# 小テストの得点だけを取り出す
> ID1<- as.numeric(quiz[2,])
# データの型変換(リストから数値へ)
> plot(ID1, type="l")
# 引数 type を l にして折れ線グラフに
> barplot(ID1)
# 10本並んだ棒グラフ
> barplot(ID1, col=rainbow(5))
# 引数 col を rainbow(5) にして5色使用
> barplot(ID1, col=rainbow(5), horiz=T)
# 引数 horiz を T にして水平に並べる
最後は棒グラフ (1)
最後は棒グラフ (2)
> barplot(ID1, col=rainbow(5), horiz=T,
names=c("W1", "W2", "W3", "W4",
"W5", "W6", "W7", "W8", "W9", "W10"),
main="QUIZ")
# 10本並んだ棒グラフ。項目名やタイトルを追記。
可視化の発展編
violin plot と beeswarm
―分布をより分かりやすく捉えるために―
violin plot ≒ boxplot+hist
> install.packages("vioplot")
> library("vioplot")
> vioplot(pretest,posttest, names=c("Pre","Post"))
boxplot + beeswarm
> install.packages("beeswarm")
> library("beeswarm")
> PrePost <- test[,c("Pre",“Post")]
> boxplot(pretest, posttest, names=c("PRE", "POST"))
> beeswarm(PrePost, add=TRUE)
グラフの保存方法
> pdf() # pdf デバイスを開く()
> plot(pretest, posttest) # プロットし出力
> dev.off() # デバイスを閉じる
★慣れないうちは画面上のメニューから選ぶのが無難
作図手順のまとめ
1.変数に値を代入する
2.作図用の関数を使って処理する
3.形式を指定して保存
+人に伝承(twitter, FB)
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
この世の様々な現象を
数値データ+検定
から捉えてみたい
を使う経緯
t 検定
カイ二乗検定
パワーアナリシス
分散分析
共分散分析
判別分析
主成分分析
クラスカル・ウォリス検定
符号検定
マクマネー検定
因子分析
で「t 検定」
t 検定
• 2つのグループの平均値の差の検定
するのに使う手法
• R では t.test() であっさりと実行
• (例)事前・事後テストの平均値に差があるかどうか
t 検定
> t.test(pretest, posttest, var.equal=TRUE)
> t.test(pretest, posttest,var.equal=TRUE)
!
Two Sample t-test
!
data: pretest and posttest
t = -6.3551, df = 58, p-value = 3.516e-08
alternative hypothesis: true difference in
means is not equal to 0 # 両側検定
95 percent confidence interval: # 信頼区間
-28.35969 -14.77364
sample estimates:
mean of x mean of y
51.33333 72.90000
t 検定
t 検定
カイ二乗検定
パワーアナリシス
分散分析
共分散分析
判別分析
主成分分析
クラスカル・ウォリス検定
符号検定
マクマネー検定
因子分析
で「カイ二乗検定」
カイ二乗検定
• 独立性の検定のために使う
• (例)数学が好き嫌いと統計の好き嫌いの間に有意
な連関があるか
• (例)あるコーパス中の表現Aと表現Bの頻度の差
• ざっくり言えば,期待度数と観測度数のズレ
が偶然出ちゃったかどうかを調べる
事例: 接続詞“however”の生起位置の比較
文頭 文中 文末 合計
頻度 109 347 8 493
[文頭] However, ....
[文中] ..., however, ....
[文末] ..., however.
> freq <- c(109,347,8)
> chisq.test(freq,correct=FALSE)
!
Chi-squared test for given probabilities
!
data: freq
X-squared = 391.7371, df = 2, p-value < 2.2e-16
!
# 手作業なら,カイ二乗分布表の自由度2のところを確認する
# http://homepage2.nifty.com/nandemoarchive/toukei_kiso/t_F_chi.htm
生起位置の比較のためにカイ二乗検定を実行
• 差がありそうかなさそうかを判断するため
に各種検定を行う
• 平均値の差の検定:t 検定・分散分析
• 独立性の検定  :カイ二乗検定
• 数行のコマンドであっさり検定!
• データ準備の手間は多少かかるかも...
で検定のまとめ
この世の現象を
数値データ+検定
から捉えてみよう!
を使って
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
Agenda
1. R の基本操作
2. 関数と変数が命
3. 外部データの読込と作図
4. R で検定
5. 言語データの処理
Sub topics
1.言語データ処理の流れ
2.R による and と but の検索
3.パッケージ利用によるデータ処理
Sub topics
1.言語データ処理の流れ
2.R による and と but の検索
3.パッケージ利用によるデータ処理
言語データ処理の流れ
1) データを読み込む
2) データを分解する
3) データを える
4) 数値を求める
5) データを保存する
1) データを読み込む
> nns <- scan("nns_raw.txt",
what="character")
!
Read 62959 items
2) データを分解する
> nns_list <- strsplit(nns, " ")
# スペースでデータをリスト化
# 干し柿状態(?)
!
> nns_unlist <- unlist(nns_list)
# リストされたデータをバラバラに分解
3) データを える
> sort_nns <- sort(nns_unlist)
# データの並び替え
!
> uniq_nns <- unique(sort_nns)
# 並び替えたデータをまとめる
4) 数値を求める
> length(nns_unlist)
[1] 70220 # Token
!
> nns_all <- table(nns_unlist)
# 単語一覧表の作成
!
> nns_type <- length(uniq_nns)
> nns_type
[1] 7579 # Type
5) データを保存する
> write.table(nns_all,
file="freq.txt", sep="t")
!
# freq.txt という名で列をタブ区切りにして保存
Sub topics
1.言語データ処理の流れ
2.R による and と but の検索
3.パッケージ利用によるデータ処理
Sub topics
1.言語データ処理の流れ
2.R による and と but の検索
3.パッケージ利用によるデータ処理
R による and と but の検索
•grep 関数・length 関数
• grep() : 文字列マッチング
• length(): 要素数のカウント
> grep("^And,?", nns_unlist, fixed = FALSE, value=TRUE)
> grep("^But,?", nns_unlist, fixed = FALSE, value=TRUE)
!
# ヒットした要素を表示
# 正規表現の ^ をつけておき,3文字を含む文字列(underst”and”)を除外
# fixed=FALSE で拡張正規表現を利用,value=TRUE で要素表示
!
> length(grep("^And,?", nns_unlist, fixed = FALSE, value=TRUE))
> length(grep("^But,?", nns_unlist, fixed = FALSE, value=TRUE))
!
# ヒット数だけを表示
R による and と but の検索
> length(grep("^And,?", nns_unlist, fixed = FALSE, value=TRUE))
[1] 175
> length(grep("^But,?", nns_unlist, fixed = FALSE, value=TRUE))
[1] 178
> length(grep("^and,?", nns_unlist, fixed = FALSE, value=TRUE))
[1] 1479
> length(grep("^but,?", nns_unlist, fixed = FALSE, value=TRUE))
[1] 260
R による and と but の検索
> barplot(freq, names=c("And", "and", "But", "but"), horiz=T, las=1)
R による and と but の検索
• R で基本的な検索・分析ならば...
1) データを strsplit() + unlist() して
2) grep() と length() でカウント
3) barplot() などで視覚化
4) chisq.test() などで検定
R による and と but の検索
Sub topics
1.言語データ処理の流れ
2.R による and と but の検索
3.パッケージ利用によるデータ処理
Sub topics
1.言語データ処理の流れ
2.R による and と but の検索
3.パッケージ利用によるデータ処理
Packageとは?
• ある処理・機能に特化したプログラム
• base(基本パッケージ)だけでも 1,000 以上
• 特殊な処理を行う際は,別の package を追加
• 言語処理に特化したものもある(ex. RMeCab)
i) tm: Text Mining Package
• http://tm.r-forge.r-project.org/
• http://cran.r-project.org/web/packages/tm/tm.pdf
ii) corpora
• http://www.stefan-evert.de/SIGIL/sigil_R/
• http://cran.r-project.org/web/packages/corpora/corpora.pdf
iii)LanguageR
• http://www.sfs.uni-tuebingen.de/~hbaayen/software.html
• http://cran.r-project.org/web/packages/languageR/languageR.pdf
言語処理に特化した packages
日本語データの分析を
助けてくれる
RMeCab を紹介
RMeCabとは
• 石田 基広氏が開発したパッケージ
• R から MeCab を呼び出して日本語
のテキストを解析させる
• 解析結果をも R で出力してくれる
素晴らしいプログラム
デモ一覧
•RMeCabText() : ファイル解析
•RMeCabFreq() : 頻度集計
•Ngram() : N-gram 解析
•collocate() : 共起関係の分析
おわりに
• すべての処理・分析が R のみで完結
• <-> Concordancer + Editor + Excel (+ UNIX) + R
• プログラミングの基礎養成に有効
• --> Python, Perl, ... どこでも使える
• 作図が美しい(+Mac ならフォントも)
• Excel の作図はオモチャ
のススメ
• データの取り扱い方に用心する
• Excel に任せっきりとしない
• データの処理過程をはっきりさせる
• Excel に任せっきりにしない
• データの分布をよく観察する
• Excel に任せっきりにしない
のススメ
参考文献
参考文献(続)
参考文献(続)
One more thing...
  で困りに困ったら...
•代替手段もあります…
• HAD(清水裕士先生@広島大学)
• MacR(今尾康裕先生@大阪大学)
•langtest.jp(水本篤先生@関西大学)
Enjoy !
twitter: @sakaue
!
e-mail: tsakaue<AT>hiroshima-u.ac.jp

外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」