今日は講習会があっていたので、蛋白質核酸酵素のほうを調べるお仕事ができていなかったので、電車の中で書いてみる*1。単語の登場回数というのはたぶんlong tailをしているんだろうなーというのは予想がつくんだけど、どのくらいlong tailなのかを調べてみた。
過去20年のそれぞれの年において、どの単語が何回登場したか、というのは前回のスクリプトでできている。こんな感じになっている。
/Users/yasuhisa/dbcls/pne/result% ls 1985.txt 1988.txt 1991.txt 1994.txt 1997.txt 2000.txt 2003.txt 2006.txt 1986.txt 1989.txt 1992.txt 1995.txt 1998.txt 2001.txt 2004.txt 1987.txt 1990.txt 1993.txt 1996.txt 1999.txt 2002.txt 2005.txt
これをとりあえず一本のファイルにまとめたい。ということでRubyで3分クッキング。
# -*- coding: utf-8 -*- count = Hash.new count.default = 0 Dir.glob("/Users/yasuhisa/dbcls/pne/result/*.txt").each{|file| File.open(file,"r").each{|line| l = line.split(",") count[l[0]] += l[1].chomp.to_i } } output = File.open("aaaa.csv","w") count.each{|key,value| output.puts "#{key},#{value}" } output.close
ここまでくるとRで楽勝にできる。登場回数の頻度(10回登場した単語が何回くらい登場したか、というようなもの)を見てみる。
d <- read.csv("/tmp/aaaa.csv",header=FALSE) hist(d[,2],nclass=30, main="頻度の登場回数", xlab="頻度", ylab="登場回数" )
が、このヒストグラムだと、数回しか登場しない、という単語が多すぎる&大量に登場する単語がちょっとだけ登場するというのの両方の効果により、ほとんど意味を無さなくなってしまっているwww。tailがながーい分布に対しては対数を取る、というのが上等手段なので、logを取ってからヒストグラムを書いてみる。
hist(log(d[,2]), nclass=30, main="対数頻度の登場回数", xlab="頻度の対数", ylab="登場回数" )
おお、やっとlong tailっぽくなった。logを取ってlong tailになる、ということは普通のlong tailよりもさらに右にtailが長いということなんだろうなー。
*1:そのためにわざわざ座れるように秋葉原まで戻ったw