Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rで項目反応理論、テキストマイニング、Rの研修やってますという三題噺(33rd #TokyoR)

6,392 views

Published on

・項目反応理論によるテスト結果の分析
・Twitterデータの収集と分析
・データ分析関係の研修開発
...をしてます、という話

Published in: Technology

Rで項目反応理論、テキストマイニング、Rの研修やってますという三題噺(33rd #TokyoR)

  1. 1. 第 33 回 Tokyo.R Rで 項目反応理論 (IRT) テキストマイニング Rの研修 やってます、という三題噺 (株) 富士通ラーニングメディア 田中 健太 2013年 8月 31日 1
  2. 2. 1 まずは、自己紹介 • 社会人4年目の研修講師 (UNIX / Linux、仮想化、スト レージ、クラウド、ビッグデータなど担当) です • その前は長々と大学にいました (心理学、教育工学、障害者 支援などを研究) が、学位もポストも・・・だったので就職 • 2002年にLinuxにはじめて触れて以来、細々とOSS関係 の活動をしています • 主に組版ソフトTEXの周りでIDEの日本語化、ドキュメン トの翻訳、解説サイトの運営などをしています (WinShellとかTexmakerとかTeXworksとか) 2
  3. 3. 2 なんでTokyo.Rで話すの? • 学生時代は (Excel)、SAS、SPSS、JMP、AMOS、 MATLAB、Octaveなどをひととおり使用していました • そんな関係で、ビッグデータ関連の研修開発や、テスト結 果の分析などの仕事が降ってくる • 社内に経験もノウハウも商用ソフトウェアもない環境では Rを使うしかない (会社に入ってからのRデビュー) • 慣れれば、まぁ・・・ • 今回はRでやっていることと、その方法を話しに来ました 3
  4. 4. 3 仕事でやっていること • 項目反応理論によるテスト結果の分析 ■ 研修修了時のテスト結果などを、項目反応理論 (IRT) で分析、改善に役立てています ■ 今回は、Rで “簡単に” IRTに基づく分析を行う手順を紹介します • Twitterデータの収集と分析 ■ 半分以上趣味ですが、Streaming APIでツイートを収集、Rで分析してます ■ 今回は、Rで “簡単に” テキストマイニング (ワードクラウド) を行う手順を紹介します • データ分析関係の研修開発 ■ なんか、一般企業でも「ビッグデータ」や「データサイエンティスト」が流行っています ■ 今回は、当社のRを用いたデータ分析研修について少し話させてください・・・ 4
  5. 5. お題1 5
  6. 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. 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. 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
  9. 9. お題2 9
  10. 10. 7 Twitterデータの分析 人がゴミのようだ バルス ダウンTL 俺 人人笑 見る 名言 シータ w 思う 今日 TL 何 ラピュタ 明日 来る 人 フォロ 対決 w バル 待つ 目 前 発生 時間 Y ツイート サーバー wwww 厂 ゛ (笑) Twitter 絶対 Y 呟く 緊急事態 私 ww 行く T ムスカ 言う 今 ゴミ 人間 接近 パズー 祭り 2013/08/02 23:15 • 先日の「バルス祭り」の際のツイート数とワードクラウド • ほとんど趣味ですが、ツイートを収集、分析してます • 講習会でデモすると、かなりウケます (ビジネス上の実用性は...?) 10
  11. 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. 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. 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
  14. 14. お題3 14
  15. 15. 11 Rの社会人向け研修を作りました • 「ビッグデータ」ビジネスが流行 • HadoopやKVSは落ち着き、「デー タサイエンティスト」が大ブーム • その中でRの注目度が急上昇! • そこで、Rの研修を開発しました • 「R言語によるデータ分析入門」 • 基本統計量から回帰分析あたり までを1日で学習 • Rの使いかただけでなく、「統計の キホン」(仮説検証) を紹介 UBS51Lで検索! • ツールの使い方だけを教えるのか と思っていたが、分析の仕方という 視点でも話があった点が良かった • Rの基本が分かり、非常に満足した • 講師の知識の豊富さが講義から 伝わってきた 15
  16. 16. 12 Rの社会人向け研修を作ってます • より実践的な分析を学びたい、という声も聞きます • そこで、お客様からよく聞く「テキストマイニング」と 「時系列データ解析」をテーマに応用編を作っています •「R言語によるデータ分析応用編」 • 10月11日に初回予定・・・だが、開発中 • テキストマイニングはともかく、時系列データは大変 • 技術者にとって “リアル” な時系列データってなんだ? • とはいえ、間に合わせるのでよろしくお願いします 16

×