Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

6.647 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie

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

×