ページ

2016年8月18日木曜日

【R】 東日本大震災復興の調査データ分析(1)

いわて復興ウォッチャー調査について

本日から東日本大震災からの復興に関する調査データ(いわて復興ウォッチャー調査)の分析に取り掛かる。この調査は私の職場(というよりは私)が関わっているもので、年2回の調査レポート作成の手際は良くなったが、深い分析は出来ていなかった。この夏には、どうしてもある程度の成果を上げたい。
(リンクは調査のホームページ:最新版はまだ公開されていないようである。たぶん、復興局の中で議論しているのであろう。)


といっても、このデータはテキストデータが主体であるため、分析の難易度は高い。MeCabという形態素解析を導入したのもこのためであった。



今回の分析の目的は、テキストデータのうち、似た文章を自動分類することである。これには、潜在意味解析(Latent Semantic Analysis : LSA)という手法がよく用いられている。大まかにいえば、語の頻度表を行列にして、特異値分解する。特異値分解というのは行列の対角化であり、言ってみれば因子分析とか主成分分析のような潜在変数を識別するテクニックである。分析の前半では、これを一通りやってみることである。

ただし、LSAには弱点がある。主成分分析などが往々にしてあるように、データによっては変な回転をされてしまい解釈しにくい、軸が直交するという仮定が現実にそぐわない、などである。そんなわけで、分析の後半ではより洗練されたテクニックを活用していく。そこまで秋になる前にたどり着きたい。

たぶん、その前の準備も大変そうだが・・・

準備編:MeCabへの辞書登録作業

MeCab ユーザ辞書への単語追加

まずは使うデータを読めるようにしてみる。
> lr1 <- as.character(na.omit(wdata[wdata[,"NP"]==0,"LR"]))
> lr1 <- lr1[nchar(lr1)!=0]
> 
> head(lr1)
[1] "道路居宅等かなり復旧が進み、震災前の水準まで回復している。"                                                                                                                                                                                                                                        
[2] "災害復興住宅や個人住宅の建設が進んでおり、町並みに明らかな変化があるが、周辺整備の遅れを感じる。賃貸住宅の家賃や住宅取得費の高騰により人口流入に支障が出ている。"                                                                                                                                  
[3] "今年の4月から大槌町に居住しており、これまでの回復状況が分からない。盛岡市から転居してきたが率直な感想は「思ったより復興は進んでいない」である。最近、自宅を再建する方が増えてきており、これからだなと感じる。"                                                                                     
[4] "土地の引き渡しが本格化しており、本年度中に約600区画が引き渡しになる。住宅地、商店等が再建されてくる。"                                                                                                                                                                                             
[5] "高台移転や土地の区画整備により住環境はほぼ整備されたと思う。雇用の創出は概ね回復していると思うが、被災地域の問題だけではなく一般的な社会問題として人口減少、高齢化対策にも取り組む必要があると思われる。被災した地域が被災していない地域と比べて人口減少高齢化が速く進む可能性が高いと感じられる。"
[6] "公営住宅への入居が進んでいるので。"                                                                                                                                                                                                                                                                

最初のデータの形態素解析。

> res <- RMeCabC(lr1[1])
> cat(paste(unlist(res),collapse="/"))
道路/居宅/等/かなり/復旧/が/進み/、/震災/前/の/水準/まで/回復/し/て/いる/。

ここで「震災/前」と語が分離していることが気になる。「震災前」と「震災」はやはり区別したい。そのため、ユーザー辞書登録をしなければならない。

ユーザー辞書登録にはコマンドプロンプトを使わなければならない。以下のように作業する(Windows 10で作業した:Windowsの場合、日本語コードはSfift-JISで良い:ディレクトリ構成は各自のマシン環境に応じて変更のこと)。

・・・

cd Program Files (x86)\MeCab

bin\mecab-dict-index.exe -d "c:\Program Files (x86)\MeCab\dic\ipadic" -u d:\mydic.dic -f shift-jis -t shift-jis d:\mydic.csv


mydic.dicというファイルが出来上がるので、これをmecabが認識できるようにすれば良い。「C:\Program Files (x86)\MeCab\etc\mecabrc」という設定ファイルがあり、中をテキストエディタで開けるとユーザー辞書の場所がコメントアウトで示されているので、コメントアウトを消して自分の辞書ファイルを書く。こんな風に(8行目)。

;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir =  $(rcpath)\..\dic\ipadic

userdic = D:\mydic.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

・・・

辞書登録したあと、結果は次のようになる。震災前が一語として認識されていることが分かる。

> res <- RMeCabC(lr1[1])
> cat(paste(unlist(res),collapse="/"))
道路/居宅/等/かなり/復旧/が/進み/、/震災前/の/水準/まで/回復/し/て/いる/。

辞書登録のため、とりあえずひととおり分解した結果をテキストファイルに書き込む。

sink("meca0.txt")
for(str0 in lr1){
 res <- RMeCabC(str0)
 cat(paste(unlist(res),collapse="/"),"\n")
}
sink()

この結果を編集して、mydic.csvに書き加えて、上の辞書作成作業を繰り返していけばいい。今日は、ここまで。