プログラミング:Rで特定の文字列を含む行列を指定して削除する方法【言葉の重みからのワードクラウド生成:研究素材含】

install.packages(“wordcloud”)
library(wordcloud)
library (RMeCab)

test <- as.data.frame( docMatrix(“R_Data”,c=”名詞”,weight = “tf*idf” ) )
test

tomatch <- c(“ん”,”よう”,”ため”,”の”,”こと”,”これ”,”ころ”,”たち”,”とき”,”それ”,
“ない”,”あたり”,”いい”,”ここ”,”わけ”,”そう”,”とおり”,”はず”,”多い”,”多く”)
ijin <- subset(test,Freq>9)
ijin <- ijin[!grepl(paste(tomatch,collapse=”|”), ijin$terms),]
ijin

wordcloud(ijin[,1],ijin[,3])

さて、解説するか!まずワードクラウドとRめかぶのパッケージをとる(当たり前だがw)。データを読み込んで名詞に設定し、フレーム操作が可能なようにマトリックスを転ずる。さらに、エクスクルード(除外)ワードを指定して、さらに3列目の語の重み(Freq)で9より大きい値に設定しながら、除外ワード指定を有効化させる(ijin$termsに指定して除外ワードから引き出す)。そしてチェック!最後にワードクラウドに生成して完成だッツ!!!

結果はこんなかんじ。てか、ソースコードにはijinってなってるけど、三つのファイルから読み取っているので、全体(当然仮ですが…)からの語の重みを付けたうえでのそのワードクラウドです。要するにテキストの頻度だけに注目していたらこんなワードクラウドはできません。語のワードをtf*idfから引き出しているのでこういう変則的なクラウドになっておるのです。

技術的に注目すべきところ…やっぱ除外リストの指定(matchを使ってもいいんだが…)とその適用ですね。この方法であればどんなデータテーブルでもどこかの列に指定して、特定の文字列や数の大小を計算しながら除外のコマンドを出せるのでそこが今回のミソとなるコーディングですね。このあたりは日本語ソースで解説が全くなかったので、英語文献(http://stackoverflow.com/questions/22249702/delete-rows-containing-specific-strings-in-rおよびhttp://stackoverflow.com/questions/7597559/grep-using-a-character-vector-with-multiple-patterns)を当てていきました。

で、忘れがちだけど、行は横で列は縦だよ!(国語の時間の作文を思い出せばいい…)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA