More Related Content
Similar to Rで項目反応理論、テキストマイニング、Rの研修やってますという三題噺(33rd #TokyoR) (13)
Rで項目反応理論、テキストマイニング、Rの研修やってますという三題噺(33rd #TokyoR)
- 1. 第 33 回 Tokyo.R
Rで 項目反応理論 (IRT)
テキストマイニング
Rの研修
やってます、という三題噺
(株) 富士通ラーニングメディア
田中 健太
2013年 8月 31日
1
- 2. 1 まずは、自己紹介
• 社会人4年目の研修講師 (UNIX / Linux、仮想化、スト
レージ、クラウド、ビッグデータなど担当) です
• その前は長々と大学にいました (心理学、教育工学、障害者
支援などを研究) が、学位もポストも・・・だったので就職
• 2002年にLinuxにはじめて触れて以来、細々とOSS関係
の活動をしています
• 主に組版ソフトTEXの周りでIDEの日本語化、ドキュメン
トの翻訳、解説サイトの運営などをしています
(WinShellとかTexmakerとかTeXworksとか)
2
- 3. 2 なんでTokyo.Rで話すの?
• 学生時代は (Excel)、SAS、SPSS、JMP、AMOS、
MATLAB、Octaveなどをひととおり使用していました
• そんな関係で、ビッグデータ関連の研修開発や、テスト結
果の分析などの仕事が降ってくる
• 社内に経験もノウハウも商用ソフトウェアもない環境では
Rを使うしかない (会社に入ってからのRデビュー)
• 慣れれば、まぁ・・・
• 今回はRでやっていることと、その方法を話しに来ました
3
- 4. 3 仕事でやっていること
• 項目反応理論によるテスト結果の分析
■ 研修修了時のテスト結果などを、項目反応理論 (IRT) で分析、改善に役立てています
■ 今回は、Rで “簡単に” IRTに基づく分析を行う手順を紹介します
• Twitterデータの収集と分析
■ 半分以上趣味ですが、Streaming APIでツイートを収集、Rで分析してます
■ 今回は、Rで “簡単に” テキストマイニング (ワードクラウド) を行う手順を紹介します
• データ分析関係の研修開発
■ なんか、一般企業でも「ビッグデータ」や「データサイエンティスト」が流行っています
■ 今回は、当社のRを用いたデータ分析研修について少し話させてください・・・
4
- 6. 4 IRTに基づくテストの分析
• テスト実施の機会は多い
(教育機関以上?)
• よいテストを提供したい
• テストの点数を
「問題の難易度」と
「受検者の能力」
の関数と定義、評価
• 項目特性曲線 (左上) を見
て、アヤシイ問題を
発見、修正している
• テストの品質改善を実現
-4 -2 0 2 4
0.00.20.40.60.81.0
とあるテストの項目特性曲線 (2PL)
理解度
正答率
Q1
Q2
Q3
Q4
Q5
-4 -2 0 2 4
0.000.020.040.060.080.100.12
とあるテストの項目情報曲線 (2PL)
理解度
情報量
Q1
Q2
Q3
Q4
Q5
-4 -2 0 2 4
0.100.150.200.25
とあるテストのテスト情報曲線 (2PL)
理解度
情報量
-1.5 -1.0 -0.5 0.0 0.5 1.0
0.00.20.40.60.8
とあるテストの受講者能力分布 (2PL)
理解度
密度
6
- 7. 5 RでIRT分析1
• RjpWikiで勉強した結果
ですが (多謝)
• ltmまたはirtoys
パッケージを使うと簡単
• データは1行1人、問題
ごとに正誤を1 / 0で
• 理論的な枠組みは
植野,荘島 (2010) や
村木 (2011) などを参照
(“豊田本” は難しい...)
• 基本的には、特性量を
算出 → plotで描画
----------データはこんな感じ----------
Q1,Q2,Q3,Q4,Q5
0,1,0,0,0
1,1,0,1,0
----------データはこんな感じ----------
library(irtoys)
data <- read.csv("hoge.csv",header=T)
# 項目特性の算出
ltmans <- ltm(data˜z1,IRT.param=TRUE)
# 受検者能力の算出
ltmscore <- factor.scores(ltmans,method="EB")
# テスト反応関数の算出
trfans <- est(data,model="2PL",engine="ltm")
trfscore <- trf(trfans$est)
# テスト情報量の算出
ltminfo <- information(ltmans,c(-1,1))
7
- 8. 6 RでIRT分析2
• 分析結果はおもに4つの
グラフで得られる
• 項目特性曲線 (ICC) が
特に (当社では) 重要
• 横軸0、縦軸0.5を中心と
したS字カーブが理想
• 左寄り → 簡単
右寄り → 難しい
平坦 → 識別力が低い
急峻 → 能力差に敏感
...特徴を分析、改善
• ここまでやるのは当社だけ!
# 項目特性曲線の描画
plot.ltm(ltmans,...)
# 項目情報曲線の描画
plot.ltm(ltmans,type="IIC",...)
# テスト情報曲線の描画
plot.ltm(ltmans,type="IIC",items=0,...)
# テスト反応曲線の描画
plot(trfscore,...)
# テスト情報量のファイル出力
print(ltmans,quote=F)
print(ltminfo,quote=F)
----------内容はこんな感じ----------
Dffclt Dscrmn
Q1 -1.012 0.464
Q2 -0.930 0.543
Q3 -0.880 0.697
Q4 1.555 0.260
Q5 -16.148 -0.065
Information in (-1, 1) = 0.48 (25.2%)
8
- 11. 8 Twitterデータの収集
• Twitter Streaming APIを使ってツイートを収集できます
• RでもTwitteRパッケージでアクセスできますが、
私はRubyスクリプトを回しっぱなしにしています
• 参考: http://d.hatena.ne.jp/NE555/20120108
require ’time’
require ’rubygems’
require ’tweetstream’
SEP="t"
TweetStream::Client.new.sample do |status|
if status.user.lang == "ja"
dt = Time.parse("status.created_at")
text = status.text.gsub("n", " ")
puts("#{dt}#{SEP}#{status.user.screen_name}#{SEP}#{text}")
end
end
11
- 12. 9 Twitterデータのマイニング1
• 今回は “見映え” 重視の
ワードクラウド
• その名もズバリ
wordcloudパッケージ
• 参 考: http://onertipaday.
blogspot.jp/2011/07/
word-cloud-in-r.html
• 日本語テキストは形態素
解析をする必要がある
• Rから形態素解析器
MeCabを扱うRMeCab
パッケージを使用
-----紙幅の都合で抜粋版-----
at<-read.delim("hoge.txt",...)
at$time<-as.POSIXct(at$time,
format="%Y-%m-%d %H:%M")
at$tweet<-as.character(at$tweet)
x<-0; y<-"2013-08-02 00:00" # 開始時間
tn<-as.POSIXct(y,format="%Y-%m-%d %H:%M")
while (x <= 1440) { # 処理範囲を分で指定
if(!length(subset(at$tweet,at$time==tn))==0){
write.table(subset(at$tweet,at$time
==tn),file="tmp.txt",quote=F,row.names=F,
col.names=F)
# MeCabで形態素解析、頻度を算出
rt<-RMeCabFreq("tmp.txt")
12
- 13. 10 Twitterデータのマイニング2
• Twitterの分析には
辞書の問題がつきまとう
• 形態素解析器は「ビッグ
データ」なんて知らない
• mecab-dic-overdrive
でWikipediaページ名
などを登録可能
• まじめにやるなら、辞書
整備が不可欠
• 参考:
https://github.com/nabokov/
mecab-dic-overdrive
-----とにかく、不要な形態素を捨てる-----
part_rt <-rt[(rt$Info1=="名詞" |
rt$Info1=="感動詞" | rt$Info1=="形容詞" |
rt$Info1=="動詞") & !rt$Info2=="特殊"
& (!rt$Term=="RT" & !rt$Term==".co"
& !rt$Term=="http" & !rt$Term=="www")
& rt$Freq > 15,] # 1分間の頻度が15以上
if(nrow(part_rt)>=1){
# 使用するカラーパレットを指定
pallet<-brewer.pal(8,"Dark2")
# ワードクラウドの作成
wordcloud(part_rt$Term,part_rt$Freq,
scale=c(5,2),max.words=Inf,random.order=T,
random.color=F,colors=pallet)
}
}
x<-x+1; tn<-tn+60
}
13
- 15. 11 Rの社会人向け研修を作りました
• 「ビッグデータ」ビジネスが流行
• HadoopやKVSは落ち着き、「デー
タサイエンティスト」が大ブーム
• その中でRの注目度が急上昇!
• そこで、Rの研修を開発しました
• 「R言語によるデータ分析入門」
• 基本統計量から回帰分析あたり
までを1日で学習
• Rの使いかただけでなく、「統計の
キホン」(仮説検証) を紹介
UBS51Lで検索!
• ツールの使い方だけを教えるのか
と思っていたが、分析の仕方という
視点でも話があった点が良かった
• Rの基本が分かり、非常に満足した
• 講師の知識の豊富さが講義から
伝わってきた
15