Posted on 2015/08/30, 7:36 PM By admin22
前回のword2vecで利用したテキストファイルをD3.jsのワードクラウドを使って、可視化してみました。
D3.jsについては、以前下記ブログで扱ったことがありますが、ワードクラウドは初めて使います。
D3.js from Excel http://crossframe.iiv.jp/20131214667/
jQueryPlot from Excel http://crossframe.iiv.jp/20131207651/
text8のファイルは大きすぎるので、先頭約300kを切り出して使いました。(処理的にこのくらいが限界)

d3-cloudのサイトのサンプルを元に、ローカルファイルを読み込んで実行できるようにしました。
<html>
<meta charset="utf-8">
<body>
<input type="file" id="read_file">
<script src="d3/d3.js"></script>
<script src="../d3.layout.cloud.js"></script>
<script>
var file = document.querySelector('#read_file');
file.onchange = function (){
var fileList = file.files;
var reader = new FileReader();
reader.readAsText(fileList[0]);
reader.onload = function () {
var res = reader.result;
r = res.split(' ');
h = {};
for(i=0;i<r.length;i++){
if(h[r[i]] == undefined){
h[r[i]] = 0;
}
h[r[i]] = h[r[i]] + 1;
}
arr = [];
max = 0;
kx = "";
for(var k in h){
if(h[k] > 1){
arr.push([k, h[k]]);
}
if(h[k] > max){
max =h[k];
kx = k;
}
}
(function() {
var fill = d3.scale.category20();
var layout = d3.layout.cloud()
.size([800, 500])
.words(arr.map(function(v){
return {text: v[0], size: Math.sqrt(v[1] / max) * 100};
}))
.padding(5)
.rotate(function() { return ~~(Math.random() * 2) * 90; })
.font("Impact")
.fontSize(function(d) { return d.size; })
.on("end", draw);
layout.start();
function draw(words) {
d3.select("body").append("svg")
.attr("width", layout.size()[0])
.attr("height", layout.size()[1])
.append("g")
.attr("transform", "translate(" + layout.size()[0] / 2 + "," + layout.size()[1] / 2 + ")")
.selectAll("text")
.data(words)
.enter().append("text")
.style("font-size", function(d) { return d.size + "px"; })
.style("font-family", "Impact")
.style("fill", function(d, i) { return fill(i); })
.attr("text-anchor", "middle")
.attr("transform", function(d) {
return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
})
.text(function(d) { return d.text; });
}
})();
}
};
</script>
</body>
</html>
ローカルで使うツールとして、どの単語がよく使われているかを、直感的に知るために作ってみました。しかしサイズが大きいファイルではちょっと難しそうです。
参考: https://github.com/jasondavies/d3-cloud/tree/master/examples
Categories: 未分類 タグ: D3.js, Javascript
