2012-08-07 LET2012@Konan Univ. による教育・言語データ処理のススメ 3 Tuesday, August 7, 12
2012-08-07 LET2012@Konan Univ.
による教育・言語データ処理のススメ
3Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
11Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
12Tuesday, August 7, 12
とは何か• 統計処理を目的とするプログラミング言語• 無償+オープンソースのソフトウェア
• 作者: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/Je!reyHorner/JCGSR.pdf
13Tuesday, August 7, 12
要するに統計ソフト
14Tuesday, August 7, 12
の何が良いのか
•無償(IBM SPSS Statistics は約10万円で保守なし...)
•統計処理の種類が豊富•グラフィックスが美しい
15Tuesday, August 7, 12
の弱点• 文字入力による操作
• プログラムを組む感覚を養成• 確実に伝わるという利点も
• 多方面の知識が必要• 英語+統計+計算機
• 参考書籍がお高め16Tuesday, August 7, 12
モウダメダー
17Tuesday, August 7, 12
Excel や SPSS は...
•高価(気軽に使えない)•処理が信頼できず
• Excel のひどい話(青木先生@群馬大)
•作図結果が美しくない18Tuesday, August 7, 12
の基本操作-Install / Update / Uninstall-
20Tuesday, August 7, 12
1. http://www.r-project.org/ にアクセス2. “download R” をクリック3. JAPAN の中から1つを選ぶ4. OS に応じたリンクをクリック
のインストール
21Tuesday, August 7, 12
のインストール
• Windows: : http://cran.md.tsukuba.ac.jp/bin/windows/base/
•「Download R 2.15.1 for Windows」をクリック
• Mac OS X: http://cran.md.tsukuba.ac.jp/bin/macosx/
•「R-2.15.1.pkg (latest version)」をクリック
22Tuesday, August 7, 12
23Tuesday, August 7, 12
24Tuesday, August 7, 12
25Tuesday, August 7, 12
26Tuesday, August 7, 12
27Tuesday, August 7, 12
28Tuesday, August 7, 12
のアップデート1. http://www.r-project.org/ にアクセス2. 自分が使っているバージョンより新しいものが出ているか確認
3. 新規にインストール用ファイルをダウンロードしてインストール
29Tuesday, August 7, 12
のアップデート• セキュリティ上の問題がない限りは,むやみに更新しない
• パッケージ(付加機能)の動作不良回避
• 新旧の共存は可能• Windows/Mac: 別名でインストール• ただし何がどう共有されているかは不明
30Tuesday, August 7, 12
のアンインストール• Windows
• [ Windows XP] コンパネ→プログラムの追加と削除• [ Windows 7 ] コンパネ→プログラムのアンインストール
• Mac OS X• /Applications にある アイコンと /Library の中の
Frameworks にある R. framework を削除(CleanApp 可)
31Tuesday, August 7, 12
の起動
• Windows• START → Program → R → R 2.15.1
• Mac OS X• /Applications 内の をクリック
32Tuesday, August 7, 12
「コンソール」の表示を確認
33Tuesday, August 7, 12
の終了
•コンソールに「q()」と入力• 今は「作業スペース」は保存しない• ウィンドウが消えれば終了
34Tuesday, August 7, 12
で困ったら...
•まずは help(sth) を実行• seekR: http://seekr.jp/
• R SEEK: http://www.rseek.org/
• RjpWiki: http://www.okada.jp.org/RWiki/
• R-Tips: http://cse.naro.a!rc.go.jp/takezawa/r-tips/r.html
• R による統計処理: http://aoki2.si.gunma-u.ac.jp/R/
35Tuesday, August 7, 12
概論まとめ
• は統計ソフト•無償+何でも統計+美しく作図•困ったら help(sth) !!
36Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
38Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
39Tuesday, August 7, 12
前置きが長くなりましたがどんどん実行しましょう
40Tuesday, August 7, 12
まずは四則演算• 式を入力し [Enter] を押す
• > 12345 + 56789 [Enter]
• > 9753 - 1486 [Enter]
• > 3571 * 2984 [Enter]
• > 2234/5678 [Enter]
• > (12 + 34 -56) * 78 / 90 [Enter]
41Tuesday, August 7, 12
いまのは単なる計算式でしたが
42Tuesday, August 7, 12
といえば
関数が命
43Tuesday, August 7, 12
関数とは指定した値に対して何らかの処理をして結果を返すもの
44Tuesday, August 7, 12
なにはともあれ実行してみましょう
46Tuesday, August 7, 12
sqrt():平方根
•> sqrt(2)
•> sqrt(144)
•> sqrt(104976)
47Tuesday, August 7, 12
「関数(値)」が命
• には多数の関数がある• q() や help(sth) も関数• 必要な関数をしつこく実行
48Tuesday, August 7, 12
といえば
変数も命
49Tuesday, August 7, 12
変数とは1つ以上の値をまとめていれておく「箱」のこと
50Tuesday, August 7, 12
ではベクトルとも呼ばれ複数の値を1つにまとめたものを指す
51Tuesday, August 7, 12
統計処理などを行うには複数の値をまとめて扱う
ことが必要でそれを使い回すために
変数を使う52Tuesday, August 7, 12
ちなみに変数に数値を入れることを
「代入」といいます53Tuesday, August 7, 12
なにはともあれ実行してみましょう
55Tuesday, August 7, 12
変数の名前は “hako”
•> hako <- c(1,2,3,4,5)•> hako
• c() 関数:combine (cf. https://twitter.com/#!/sakaue/status/193708048030760960)• 値を1つにまとめる関数• 逆に書いても(一応)OK
56Tuesday, August 7, 12
c()関数の “<-” は何?hako <- c(1,2,3,4,5) の “<-” は左向きの矢印(←)
を表現(入れ替えても動きます)
57Tuesday, August 7, 12
コンソールで「+」が出たら...
• 入力中に誤って[Enter] を押すと,待機状態を示す「+」が出る
• [STOP] ボタンでキャンセル• [Esc] キーでキャンセル
58Tuesday, August 7, 12
履歴機能と補完機能
•履歴: [↑][↓] の矢印キー•補完: [Tab]キー
59Tuesday, August 7, 12
いま “hako” という名前の「変数」の中に
1から5までの5つの数字がまとめて入っている状態
60Tuesday, August 7, 12
では使い回してみましょう
61Tuesday, August 7, 12
以下の関数を実行
•> sqrt(hako)
•> log(hako)
62Tuesday, August 7, 12
もし変数がなかったら何度も関数を
繰り返す羽目になるsqrt(1), sqrt(2) ... sqrt(5)log(1), log (2) ... log (5)
63Tuesday, August 7, 12
一括処理のために変数(ベクトル)の利用は不可欠
64Tuesday, August 7, 12
ここまでのまとめ• は「関数」と「変数」が命•関数を使って数値を処理
•q(), help(), sqrt(), log(), c()
•変数を使って一括処理!65Tuesday, August 7, 12
覚える必要はなくメモ等を頼りに実行できれば OK
66Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
67Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
68Tuesday, August 7, 12
Sub topics
1. 行列のおはなし2. データフレーム3. 外部データの読込
69Tuesday, August 7, 12
さきほど一行で表せる数値を扱いましたが
70Tuesday, August 7, 12
実際のデータは複数行あるはず
71Tuesday, August 7, 12
例えば...
•身長と体重•年齢と年収•覚えた単語数とTOEICスコア
72Tuesday, August 7, 12
表にすれば...身長 体重
A 180 75B 170 65C 165 60D 175 70E 190 80
73Tuesday, August 7, 12
複数の行や列で表されるデータを扱うために
Rでは「行列」を使う
74Tuesday, August 7, 12
行列とは
数値が縦横に並べられたもの
75Tuesday, August 7, 12
1 2 3
4 5 6
7 8 9
76Tuesday, August 7, 12
行77Tuesday, August 7, 12
1 2 3
4 5 6
7 8 9
78Tuesday, August 7, 12
1 2 3
4 5 6
7 8 9
79Tuesday, August 7, 12
1 2 3
4 5 6
7 8 9
80Tuesday, August 7, 12
列81Tuesday, August 7, 12
1 2 3
4 5 6
7 8 9
82Tuesday, August 7, 12
1 2 3
4 5 6
7 8 9
83Tuesday, August 7, 12
1 2 3
4 5 6
7 8 9
84Tuesday, August 7, 12
ひとまず「行列」という存在を知ってやってください
85Tuesday, August 7, 12
そんな行列を扱うために
matrix() 関数を使う
86Tuesday, August 7, 12
matrix() 関数
•行列を作る関数•matrix(要素, 行の数, 列の数)
•デフォでは列方向に配置
87Tuesday, August 7, 12
このようなデータなら身長 体重
A 180 75B 170 65C 165 60D 175 70E 190 80
88Tuesday, August 7, 12
karada <- matrix(c(180, 170, 165, 175, 190, 75, 65, 60, 70, 80), 5, 2)
行列を作ってみる
1. c() 関数で、数値を連結2. matrix() 関数で、行列に変換
• 「5行で2列」にするという指定をする3. karada という名の変数に代入
89Tuesday, August 7, 12
> karada
と入力して変数の中身を確認
90Tuesday, August 7, 12
行列の要素を取り出すdemo <- matrix(1:30,nrow=5,ncol=6)
http://gyazo.com/76c58d5d6c8426a44f160897cda99671.png
91Tuesday, August 7, 12
行列の要素を取り出す2行目を表示 → demo[2,]2列目を表示 → demo[,2]
http://gyazo.com/6726084afd9e1cc4b03df85fe6bc0f29.png
92Tuesday, August 7, 12
行列の要素を取り出す2行目と4行目を表示 → demo[c(2,4),]
2列目と4列目を表示 → demo[, c(2,4)]
93Tuesday, August 7, 12
行列の要素を取り出す
http://gyazo.com/a116c0e2f1284ea7d38bf7024d92f1cc.png94Tuesday, August 7, 12
行列まとめ
• 横方向が行、縦方向が列• デフォルトでの数値の並びに注意• 必要な要素を適宜取り出して値を確認
95Tuesday, August 7, 12
Sub topics
1. 行列のおはなし2. データフレーム3. 外部データの読込
96Tuesday, August 7, 12
データフレームとは
•いろんなデータを突っ込んだもの• いろんな=質的データ+量的データ• 突っ込む=一緒に並んでいること
97Tuesday, August 7, 12
名前 血液型 身長 体重坂本 B 175 65
高橋 B 177 70
阿部 B 174 75
長野 A 179 70
松本 O 170 60
データフレームとは
98Tuesday, August 7, 12
データフレームとは
• Excel の WS とほぼ同じイメージ
• 既存データの読込>自力で作る• data.frame() 関数が使える
99Tuesday, August 7, 12
じゃあ実際に自力で作るかといったら...
100Tuesday, August 7, 12
そこで外部データの読込を行おう
102Tuesday, August 7, 12
1. 行列のおはなし2. データフレーム3. 外部データの読込
Sub topics
103Tuesday, August 7, 12
ここはトラブル多発地域です
うまくいかない時はまず説明をお聴きください
104Tuesday, August 7, 12
おそらく...
•Excel でデータ管理•できればそのまま活かしたい
105Tuesday, August 7, 12
作業ディレクトリの設定
•作業ディレクトリとは...
•データを読み込む場所•データを書き出す場所
106Tuesday, August 7, 12
作業ディレクトリの設定• Windows:ファイル → ディレクトリの変更
• “My Documents” にファイル移動
• Mac OS X:環境設定 → 一般(起動)• ホームディレクトリにファイル移動
• Linux:up to you...
107Tuesday, August 7, 12
作業ディレクトリの設定
• コンソールからの確認・設定も可能• getwd()関数:現在の設定を確認
• > getwd()
• setwd()関数:現在の設定を変更• > setwd("/Users/sakaue/Desktop/")• 実行注意!!
108Tuesday, August 7, 12
データの読込 その1
• read.csv() 関数
• CSV 形式のファイルを読み込む• CSV: Comma Separated Value
109Tuesday, August 7, 12
1. let2012.csv を作業ディレクトリへ移動• XLS/XLSX 形式のものは保存時に変換• CSV ファイルの文字コードは UTF-8 に
2. > test <- read.csv(“let2012.csv”) で代入
3. > test [Enter] で中身を確認
データの読込 その1
110Tuesday, August 7, 12
CSV 変換なんて面倒...
という方に
111Tuesday, August 7, 12
データの読込 その2
• read.delim() 関数
• 表形式のデータ読み込む• delim: delimiter(区切り文字)
112Tuesday, August 7, 12
1. let2012.xls を開いてマウスで範囲指定2. > test2 <- read.delim("clipboard") で代入
3. > test2 [Enter] で中身を確認
データの読込 その2
Mac の場合: read.delim(pipe(“pbpaste”))
113Tuesday, August 7, 12
読み込んだら関数で処理
> table(test2[,2])•度数分布を確認する
> mean(test2[,3])•平均値を求める
2列目対象
3列目対象
114Tuesday, August 7, 12
外部データの読込
• 作業ディレクトリの設定に注意• CSV 形式に変換後、read.csv()関数で読込
• 必要な行 or 列を指定して処理
115Tuesday, August 7, 12
データを集めたら数値要約だけでなくデータの視覚化も必要
117Tuesday, August 7, 12
というわけで作図のお時間です
118Tuesday, August 7, 12
基本的な作図手順
1. 変数に値を代入する2. 作図用の関数を実行
119Tuesday, August 7, 12
たった2段階Excel や SPSS ではこうはいかない
120Tuesday, August 7, 12
• ヒストグラム• 散布図• 棒グラフ• 折れ線グラフ• 箱ひげ図
作成できる図の種類
121Tuesday, August 7, 12
• ヒストグラム• 散布図• 棒グラフ• 折れ線グラフ• 箱ひげ図
作成できる図の種類
122Tuesday, August 7, 12
まずはヒストグラム
> hist(test2[,2])
123Tuesday, August 7, 12
箱ひげ図
> boxplot(test2[,2], test2[,3], names=c("Male", "Female"), horizontal=T)
125Tuesday, August 7, 12
箱ひげ図
> boxplot(test2[,2], test2[,3], names=c("Male", "Female"), horizontal=T, ylim=c(0,100))
126Tuesday, August 7, 12
箱ひげ図
> boxplot(test2[,2], test2[,3], names=c("Male", "Female"), horizontal=T, ylim=c(0,100), col="blue")
127Tuesday, August 7, 12
箱ひげ図
> boxplot(test2[,2], test2[,3], names=c("Male", "Female"), horizontal=T, ylim=c(0,100), col="blue", xlab="score", ylab="sex", main="BOXPLOT")
128Tuesday, August 7, 12
グラフの保存方法
> pdf() # pdf デバイスを開く()
> plot(1:10) # プロット → Rplots.pdf に出力> dev.o!() # デバイスを閉じる
★慣れないうちは画面上のメニューから選ぶのが無難
129Tuesday, August 7, 12
作図手順のまとめ1. 変数に値を代入する2. 作図用の関数を使って処理する3. 形式を指定して保存
+人に伝承(twitter, FB)
130Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
132Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
133Tuesday, August 7, 12
この世の様々な現象を数値データ+検定から捉えてみたい
を使う経緯
134Tuesday, August 7, 12
t 検定
カイ二乗検定パワーアナリシス
分散分析
共分散分析
判別分析
主成分分析
クラスカル・ウォリス検定
符号検定
マクマネー検定
因子分析
135Tuesday, August 7, 12
で「t 検定」
136Tuesday, August 7, 12
t 検定
• 2つのグループの平均値の差の検定するのに使う手法
• R では t.test() であっさりと実行
137Tuesday, August 7, 12
• (例)あるテストの平均値に男女差があるかどうか
> male <- test2[,2]> female <- test2[,3]> t.test(male, female, var.equal=TRUE)
t 検定
138Tuesday, August 7, 12
> t.test(male, female,var.equal=TRUE)
Two Sample t-test
data: male and female t = -0.9232, df = 58, p-value = 0.3597alternative hypothesis: true difference in means is not equal to 0 # 両側検定95 percent confidence interval: # 信頼区間 -9.926800 3.660134 sample estimates:mean of x mean of y 62.06667 65.20000
t 検定
139Tuesday, August 7, 12
で「カイ二乗検定」
141Tuesday, August 7, 12
カイ二乗検定• 独立性の検定のために使う
• (例)数学が好き嫌いと統計の好き嫌いの間に有意な連関があるか
• (例)あるコーパス中の表現Aと表現Bの頻度の差
• ざっくり言えば,期待度数と観測度数のズレが偶然出ちゃったかどうかを調べる
142Tuesday, August 7, 12
事例: 接続詞 “however” の生起位置の比較
文頭 文中 文末 合計頻度 109 347 8 493
[文頭] However, ....[文中] ..., however, ....
[文末] ..., however.
143Tuesday, August 7, 12
> 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
生起位置の比較のためにカイ二乗検定を実行
144Tuesday, August 7, 12
• 差がありそうかなさそうかを判断するために各種検定を行う• 平均値の差の検定:t 検定・分散分析• 独立性の検定 :カイ二乗検定
• 数行のコマンドであっさり検定!
• データ準備の手間は多少かかるかも...
で検定のまとめ
145Tuesday, August 7, 12
この世の現象を数値データ+検定から捉えてみよう!
を使って
146Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
147Tuesday, August 7, 12
Agenda1. R の基本操作2. 関数と変数が命3. 外部データの読込と作図4. R で検定5. 言語データの処理
148Tuesday, August 7, 12
Sub topics
1. 言語データ処理の流れ2. R による and と but の検索3. パッケージ利用によるデータ処理
149Tuesday, August 7, 12
Sub topics
1. 言語データ処理の流れ2. R による and と but の検索3. パッケージ利用によるデータ処理
150Tuesday, August 7, 12
言語データ処理の流れ1) データを読み込む2) データを分解する3) データを揃える4) 数値を求める5) データを保存する
151Tuesday, August 7, 12
1) データを読み込む
> nns <- scan("nns_raw.txt", what="character")
Read 62959 items
152Tuesday, August 7, 12
2) データを分解する> nns_list <- strsplit(nns, " ") # スペースでデータをリスト化 # 干し柿状態(?)
> nns_unlist <- unlist(nns_list) # リストされたデータをバラバラに分解
153Tuesday, August 7, 12
3) データを揃える> sort_nns <- sort(nns_unlist) # データの並び替え
> uniq_nns <- unique(sort_nns) # 並び替えたデータをまとめる
154Tuesday, August 7, 12
4) 数値を求める> length(nns_unlist)[1] 70220 # Token
> nns_all <- table(nns_unlist) # 単語一覧表の作成> nns_type <- length(uniq_nns)> nns_type[1] 7579 # Type
155Tuesday, August 7, 12
5) データを保存する
> write.table(nns_all, file="freq.txt", sep="\t")
# freq.txt という名で列をタブ区切りにして保存
156Tuesday, August 7, 12
Sub topics
1. 言語データ処理の流れ2. R による and と but の検索3. パッケージ利用によるデータ処理
157Tuesday, August 7, 12
Sub topics
1. 言語データ処理の流れ2. R による and と but の検索3. パッケージ利用によるデータ処理
158Tuesday, August 7, 12
R による and と but の検索
•grep 関数・length 関数• grep() : 文字列マッチング• length(): 要素数のカウント
159Tuesday, August 7, 12
> 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 の検索
160Tuesday, August 7, 12
> 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 の検索
161Tuesday, August 7, 12
> barplot(freq, names=c("And", "and", "But", "but"), horiz=T, las=1)
R による and と but の検索
162Tuesday, August 7, 12
• R で基本的な検索・分析ならば...
1) データを strsplit() + unlist() して2) grep() と length() でカウント3) barplot() などで視覚化4) chisq.test() などで検定
R による and と but の検索
163Tuesday, August 7, 12
Sub topics
1. 言語データ処理の流れ2. R による and と but の検索3. パッケージ利用によるデータ処理
164Tuesday, August 7, 12
Sub topics
1. 言語データ処理の流れ2. R による and と but の検索3. パッケージ利用によるデータ処理
165Tuesday, August 7, 12
Packageとは?
• ある処理・機能に特化したプログラム• base(基本パッケージ)だけでも 1,000 以上• 特殊な処理を行う際は,別の package を追加• 言語処理に特化したものもある(ex. RMeCab)
166Tuesday, August 7, 12
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://cogsci.uni-osnabrueck.de/~severt/SIGIL/sigil_R/
• http://cran.r-project.org/web/packages/corpora/corpora.pdf
iii) LanguageR• http://www.ualberta.ca/~baayen/software.html
• http://cran.r-project.org/web/packages/languageR/languageR.pdf
言語処理に特化した packages
167Tuesday, August 7, 12
日本語データの分析を助けてくれる
RMeCab を紹介
168Tuesday, August 7, 12
RMeCabとは• 石田 基広氏が開発したパッケージ
• R から MeCab を呼び出して日本語のテキストを解析させる
• 解析結果をも R で出力してくれる素晴らしいプログラム
169Tuesday, August 7, 12
デモ一覧•RMeCabText() : ファイル解析•RMeCabFreq() : 頻度集計•Ngram() : N-gram 解析•collocate() : 共起関係の分析
170Tuesday, August 7, 12
おわりに
171Tuesday, August 7, 12
のススメ
172Tuesday, August 7, 12
ExcelSPSS
174Tuesday, August 7, 12
参考文献
176Tuesday, August 7, 12
参考文献(続)
178Tuesday, August 7, 12
参考文献(続)
179Tuesday, August 7, 12