2009年声優言及数 作業メモ(6) データの解析

グラフの集計もようやく終わったので、ここからが楽しいデータ解析とRの時間。

2008年声優言及数 作業メモ(4) データの解析 - XXXannex
2008年声優言及数 作業メモ(4) データの解析 の続き - XXXannex

この辺を参考にしつつ進める・・・のだけど、今読んでもよく分からないなー。ということで、もう少し分かりやすく作り直す。

あと、去年の調査でやった補正はどんなんだっけ。

近似直線から計算した、1月の言及数と12月の言及数の比を取ります。ただし、比がマイナスにならないように、最小値を1にするように補正しています。
同じ「傾き2」でも、言及数100 -> 122 と 言及数1000 -> 1022では元々100だった方が「ブレイク」にふさわしいのでは・・・という考えに基づいています。元々の言及数が少ない人ほど数値が高くなるようにして、より「ブレイク」感が反映されるようにしてみました。

だそうで。コードが残ってないので推測で書いてみる。

## read readpng2r output, and return data frame
## input:
## key	name	200801	200802	...
## output:
## name(rowname) Jan 2008 Feb 2008 ...
read.sy.file <- function(filename, pickup=1:12){
    # read file
    l <- read.delim(filename)
    # 2nd row contains name
    rownames(l) <- l[,2]
    # delete escaped-name and name
    l <- l[,-c(1,2)]
    # transform "X200801" -> "2008 Jan"
    n <- colnames(l)
    colnames(l) <- paste(month.abb[as.integer(substr(n,6,7))], substr(n,2,5))
    # pickup data
    l[pickup]
}

## calc linear regression parameter from given data
## input : data frame
## 
##  Jan 2009 Feb 2009
## ------------------
##     2.500    0.000
##  1397.416 1354.633
##     0.000    2.010
## ..
## ..
stat.sy <- function(df.sy, pickup=1:12){
    # calc lm for each row
    lm.ba <- apply(l, 1, function(v) lm(count ~ month, data.frame(count=as.numeric(v), month=pickup))$coefficients)
    # calc last/first rate using regression parameter
    first.data <- pickup[1] * lm.ba[2,] + lm.ba[1,]
    last.data  <- pickup[length(pickup)] * lm.ba[2,] + lm.ba[1,]
    shift      <- min(first.data) - 1  ## minimun denominator must be 1
    # create a new data frame
    data.frame(sum=apply(l,1,sum),
               a=lm.ba[2,], b=lm.ba[1,],
               key=(last.data - shift)/(first.data - shift)
               );
}

ファイル読み込み用のread.sy.fileと、データ解析用のstat.syに分けます。

> l <- read.sy.file("readpng2r.2008_2009.out", 7:24)
> 
> filename <- "readpng2r.2008_2009.out"
> pickup   <- 7:24
> l <- read.sy.file(filename, pickup)
> l[1:3,1:3]
               Jul 2008 Aug 2008 Sep 2008
〆野潤子          0.000    0.000    2.000
あきやまかおる    0.000    0.000    0.000
ありす         1282.088 1277.101 1398.781
> 
> d <- stat.sy(l, pickup)
> head(d[sort.list(d$sum, dec=T),], 10)
                 sum          a         b       key
ありす     25398.343 10.2434131 1252.2461 1.1266308
水樹奈々   11367.861 25.9785607  228.8801 1.9560382
平野綾      7661.745 -8.2246817  553.1351 0.7442834
久住小春    7620.991  1.4608157  400.7458 1.0537315
田村ゆかり  6188.987 -8.4901266  475.4296 0.6910778
堀江由衣    5480.225  4.5887960  233.3306 1.2463468
中川翔子    4896.718 -2.7648643  314.8953 0.8644497
千秋        4657.553 -0.8762654  272.3350 0.9530692
坂本真綾    4642.954 -6.7772990  362.9900 0.6858617
くじら      4389.564 -0.3702862  249.6041 0.9788923
> head(d[sort.list(d$key, dec=T),], 10)
                sum         a           b        key
寧々       1504.111 15.738243 -160.381050 268.550136
豊崎愛生   2869.171 15.802849  -85.545777   4.521526
丹下桜     1130.040  8.311239  -66.044205   4.259474
日笠陽子   1045.090  7.775707  -62.462904   4.061274
竹達彩奈    548.030  5.703382  -57.956304   3.922104
福原遥      649.040  5.948373  -56.142010   3.754630
佐藤聡美   1090.600  5.849171  -30.073231   2.601627
寿美菜子   1455.410  6.773788  -24.137600   2.545857
伊藤かな恵 1502.280  5.617358   -3.609019   2.098581

こんなもんでどうっすかね。ざっくりと、こんな感じで出せるのがRのスゲーところ。いじってて楽しすぎる・・・。声優が本職じゃない方も混ざってるので、後は手動でフィルタリングしつつまとめる形で。にしても、水樹奈々はつえー(笑)。今までも平野綾水樹奈々は別格の言及数だったのだけど、そこからさらに票を伸ばしてくるとは・・・。
若手のけいおん組のその後で一番ぱっとしなかったのは日笠陽子だと思ってたんだけど、そんなことなかったのかー。
・・・っと。まだここで語っちゃダメだ。今はまだ声オタとしてではなく技術者として調査を進めねば・・・。

念のため、http://d.hatena.ne.jp/kkobayashi_a/20090107/p1 で作ったplot.summary.monthを使って全体の傾向を確認してみます。

今年は問題なさそうですね。去年はノイズが多くて大変だったなあ・・・。