第1回 R初心者2日講習会 (R Two-Day Camp)

 来たる2017年7月1~2日、幕張テクノガーデンで「R初心者2日間講習会」を開催します。本ワークショップは、2017年3月にも5日間連続の合宿形式で開催し、おかげさまで満席となりました。*1
 今回は、週末に2日間、Rというデータ解析ツールのインストールや基本操作から始めて、実践的なテキストマイニングや統計処理までを学びます。暫定版のプログラムは、以下のとおりです。

7月1日(土) 7月2日(日)
10:00-10:20 開講式 9:00-10:30 第5限:χ二乗検定、オッズ比
10:20-11:50 第1限:RStudio準備、四則演算、変数と代入 10:40-12:10 第6限:対応分析、クラスター分析
11:50-12:50 昼食 12:10-13:10 昼食
12:50-14:20 第2限:関数、ベクトル、行列、要約統計量 13:10-14:40 第7限:RMeCab、形態素分析、頻度集計
14:30-16:00 第3限:文字列、ファイルのアップロードと読み込み 14:50-16:20 第8限:共起語、環境保存
16:10-17:40 第4限:ヒストグラム、箱ひげ図、散布図 16:20-16:40 修了式

 イベントの詳細については、こちらをご参照ください。*2 空席は残りわずかですので、参加を検討されている方はこちらからお早めにお申し込みくださいませ
 データ解析に興味のある方、特にデータ解析技法の独習に困難を感じている初心者の方を歓迎いたします。学期中のお忙しい時期とは存じますが、皆様のご参加を心よりお待ち申し上げております。

(追記)おかげさまで満席となりました。どうもありがとうございました。

*1:3月の内容についてはこちらを、参加者の声についてはこちらをご覧くださいませ。

*2:その他の情報は、随時ウェブサイトTwitterなどでお知らせいたします。

RとApache OpenNLPではじめる自然言語処理

 本日、リクルートで開催される第61回R勉強会@東京 (Tokyo.R) において、「RとApache OpenNLPではじめる自然言語処理」というLTをします。発表スライドは、こちらから見ることができます。*1

 LTなので、非常にざっくりとしか説明していません。Rによるテキスト処理については、手前味噌ですが、以下の本などをご参照ください。Kindle版PDF版もあります。

Rによるやさしいテキストマイニング

Rによるやさしいテキストマイニング

*1:普通にPDFをアップロードすると文字化けしたので、全てのスライドを画像に変換してからアップロードしています。その結果、スライドの解像度が若干落ちています。申し訳ございません。

特定の品詞の共起語だけをワードクラウドに描画する

 拙著『Rによるやさしいテキストマイニング』の読者の方から、以下のような質問を頂きました。

 最初に「RMeCabパッケージのcollocate関数で品詞を指定することができるか?」を確認したのですが、どうやらできないようです。*1 仕方がないので、とりあえず、以下のように、RMeCabText関数の出力として得られる品詞の情報を使ってみました。恐らくもっと洗練されたやり方があると思いますが、何かのご参考までに。*2 なお、「形容詞の共起語」だけを集計したいというご質問でしたが、以下では「名詞の共起語」を集計しています(原理的にはまったく同じです)。

# パッケージの読み込み
library(RMeCab)
library(stringr)
library(wordcloud)

# 単語と品詞の情報を抽出
# 以下の例では、『Rによるやさしいテキストマイニング』の付属データであるAbe.txtを使用
RMeCabText.result <- RMeCabText(file.choose()) # Abe.txtを指定
word <- unlist(sapply(RMeCabText.result, "[[", 1)) # 単語の情報を抽出
pos <- unlist(sapply(RMeCabText.result, "[[", 2)) # 品詞の情報を抽出
word.vector <- paste(word, pos, sep = "_") # 単語の情報と品詞の情報を結合し、「単語_品詞」のベクトルを作成

# 検索語とスパンを指定
search.word <- "^国民_名詞$" # 検索語を指定する際に「単語_品詞」という形式で指定
span <- 5 # スパンの指定(ここでは、左右5語まで)
span <- (-span : span)

# 共起語の集計
positions.of.matches <- grep(search.word, word.vector, perl = TRUE)
results <- NULL
for(i in 1 : length(span)) {
  collocate.positions <- positions.of.matches + span[i]
  collocates <- word.vector[collocate.positions]
  results <- append(results, collocates)
}
results <- str_replace_all(string = results, pattern = search.word, replacement = "")
not.blank <- which(results != "")
results <- results[not.blank]

# 特定の品詞の共起語だけを抽出
positions.of.matches.2 <- grep("_名詞", results, perl = TRUE) # ここでは名詞
results.2 <- results[positions.of.matches.2]
results.3 <- str_replace_all(string = results.2, pattern = "_名詞", replacement = "") # 品詞の情報(ここでは、"_名詞"の部分)を削除

# ワードクラウドを描画
wordcloud(results.3, min.freq = 1, colors = brewer.pal(8, "Dark2"))

 上記のコードを実行すると、以下のような図ができます。繰り返しになりますが、もっと洗練されたやり方があるかも知れません。

f:id:langstat:20170509100027p:plain

 Rとテキストマイニングに関する詳しい解説は、以下の本などを参照してください。

Rによるやさしいテキストマイニング

Rによるやさしいテキストマイニング

 なお、今回はたまたまお答えできる内容の質問でしたが、必ずしも読者の方の質問全てに対応できるとは限りません。内容的、タイミング的に難しい場合も多々あるかと存じます。どうかご了承くださいませ。

*1:ヘルプにある引数etcの使い方がよく分かりませんでしたが。。。

*2:以下のコードの説明はあまり細かくないので、適宜作成したオブジェクトの中身を確認しながら進めてください。

2017年4月に購入した本・ご恵贈頂いた本

 以下の本を購入しました。

テストは何を測るのか―項目反応理論の考え方

テストは何を測るのか―項目反応理論の考え方

Rによるスクレイピング入門

Rによるスクレイピング入門

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによる機械学習 (Programmer's SELECTION)

Rによる機械学習 (Programmer's SELECTION)

パーフェクトR

パーフェクトR

はじめよう!統計学超入門 (知識ゼロでもわかる統計学)

はじめよう!統計学超入門 (知識ゼロでもわかる統計学)

流れるようにわかる統計学

流れるようにわかる統計学

 そして、以下の本をご恵贈頂きました。心より感謝を申し上げます。

坂本真樹先生が教える 人工知能がほぼほぼわかる本

坂本真樹先生が教える 人工知能がほぼほぼわかる本

2017年度に採択された科研費

 本年度は、以下の3つの科研費が採択されました。

 代表者分の科研は、特別研究員奨励費(PD) 「パターン認識と自然言語処理の技術を用いた習熟度判定」(2012-2014年度)と若手研究(B)「機械学習によるスピーキングの基準特性抽出と習熟度推定」(2014-2016年度)の続きです。自動採点、自動基準特性抽出、自動フィードバックという流れですが、そろそろ自動評価の研究に一区切りをつけたいところです(と言いつつ、また続けて取り組みたい課題が出てくるかも知れませんが)。