くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

ワードクラウド

D3使ってワードクラウドを作る

以前(とか)、Rでワードクラウドを作るのをやったけど、やっぱ固定の画像じゃなくしたい。とゆーわけで、D3使ってSVGで作れるようにしたい。テキストクリックで何かにリンクとかさ。出来たらいいなー。

とりえあず、ランダム配置で作ってみる。↓の感じ。

tamesi

うーん、イマイチ。イマサンくらい。とりえあず、文字が重ならないようにはすぐできた。 getBBox()っていうのが組み込みにあるのね。初めてしった。まぁ、こーゆーことやろうとしないと 用途がなさそうだしの。。。

フォントサイズとか色の段階のつけ方を工夫すればもうちょっとよくなるかしら。 配置の仕方も調べてみたけど割とめんどーな気がする。とりえあず、サイズと色の工夫をしてみましょ。

Rでワードクラウド その2

ワードクラウドを作るおおまか手順。
  1. テキストを単語にバラし、単語の出現数(率)を集計する
  2. Rで集計結果を読み込んでwordcloudでプロット
単語の出現数を求められればあとはそれをwordcloudに喰わせるだけ。

単語をバラすのにMeCabを使う。MeCabをRから呼び出すRMeCabのライブラリを使ってもできる。ただ、簡単な文章はよいのだけれども、多少量があるとなんかの制限にかかって動かない。なので、Rubyとかテキトーなスクリプトなりプログラムなりで自分でカウントする方がてっとりばやい。

私はMeCabに解析させたいテキストファイルを食わせて結果を取得⇒カウントしてCSVに保存⇒Rで読み込んでプロットしてる。あとで色々使い回したいから、MySqlにMeCabの解析結果をつっこんで、Rubyで拾って集計してる。集計部分はまた今度載せるとして、Rで読み込みプロットする部分。

↓の感じで「単語,出現数」の集計結果のCSVを準備
・・・
項,2
通り,3
否定,2
対,61
懐疑,3
ECB,17
国債,11
購入,5
・・・
そしたらRでCSVを読み込む
data1 <- read.csv("C:\\R\\wordcount.csv",header=FALSE,row.names=1)
このまま使ってもいいけど、出現数が10回以上の単語だけ出すみたいな事をしたい場合は↓の感じで絞る
data1sub <- subset(data1, data1[, 1] >= 10)
プロットする際の色を決める
Color <- brewer.pal(9, "Blues") #文字色
Color <- Color[-(1:3)] #薄い色を消す
プロット
wordcloud(row.names(data1sub), data1sub[, 1], scale=c(6,.2),random.order = T, rot.per = .15, colors = Color)
ライブラリの読み込みからまとめて書くと↓の感じ
library("RColorBrewer")
library("wordcloud")
data1 <- read.csv("C:\\R\\wordcount.csv",header=FALSE,row.names=1)
data1sub <- subset(data1, data1[, 1] >= 10)
Color <- brewer.pal(9, "Blues") #文字色
Color <- Color[-(1:3)] #薄い色を消す
wordcloud(row.names(data1sub), data1sub[, 1], scale=c(6,.2),random.order = T, rot.per = .15, colors = Color)

Rでワードクラウド作るのはいい感じなんだけど画像なのがまれに傷。FlashとかJQueryのプラグインとかでなんかかっこいいのないかなーって探してみたけど、グッとくるものがない。さらにJSONとかでデータ渡せると胸が熱くなると思う。じゃ作れとか言われそうですが。 見た感じはRのこのwordcloudっぽく。ホイールクリクリしたら中まで入っていけたり、文字をクリックでリンクしてみたりとかを夢見てみる。

Rでワードクラウド

テキストマイニングで単語の出現率を出すけど、いまいちエクセル的な一覧だとぱっとしない。なんかぱっと見、ふーんで終わってしまう。なんかいい表現方法がないものかと思ってワードクラウドに行きついた。

↓の感じ。

plot

↑はとある為替関係のサイトのアナリストさんのRSSを単語の出現率でワードクラウド表示してみたもの。

こういう見せ方をするとなーんか傾向が見えてきそうなモヤモヤ感が出てくるじゃない。。。

Rのwordcloudを使って作る。

具体例はまた今度。

問合せ