2012/12/10

ECナビ おしえて!どっち? の投票結果をグラフにする #vgadvent2012  プログラミング

※この記事はVOYAGE GROUP エンジニアブログ : Advent Calendar 2012 11日目の記事として書かれています。

私が運営に関わっているサービスECナビ『おしえて!どっち?』という人気コンテンツがあります。


毎日二つの選択肢が出てくるので、そのどっちの意見かを答えるというコンテンツになっています。
選ぶだけではなくてコメントも書けるので、他の人のコメントを見るのもたのしいです。

さて、この『おしえて!どっち?』の投票結果をグラフにしてみようかなと思い立ちました。
使う道具は勉強中の統計解析環境Rです。
Rの勉強と、選択肢が選ばれる傾向ってどうなっているのかを知りたいという好奇心でやってみます。

まずは『おしえて!どっち?』の投票結果をどうにかして取得しましょう。
私はこのサービスのエンジニアなので会社のPCでSQLを書けば簡単なのですが、それでは面白くないので
誰でも出来るようにwebページをスクレイピングして取得する事にします。
クリックすると元のサイズで表示します

AのパーセントをとればBのパーセントも引き算でわかるのでAだけとりましょう。
ブラウザで調べるとanswer_aというクラスのdivの中にあるみたいですね。

<div class="num answer_a" style="display: block;"><p class="percent"><span><span style="font-weight:bold"><span style="color:red">54</span></span></span>%</p><p class="ballot">(55,463票)</p></div>

そしてURLは設問毎に最後の数字が増えているようです

http://ecnavi.jp/vote/choice/1/
http://ecnavi.jp/vote/choice/2/
http://ecnavi.jp/vote/choice/3/
...
http://ecnavi.jp/vote/choice/160/ (2012/12/9のページ)

それではRでスクレイピングしてみましょう。
(実はここで2時間くらい悪戦苦闘する)
できた!


> data <- c()
> for(i in 1:160) {
+ html <- getURL(paste("http://ecnavi.jp/vote/choice/", i, "/", sep=""))
+ text <- unlist(strsplit(html, '<div class="num answer_a"><p class="percent"><span>'))
+ v <- as.numeric(unlist(strsplit(text[2], '</span>'))[1])
+ data <- append(data, v)
+ }
>
>


上記のURLをgetURLしてHTML全体の文字列を変数htmlに入れて、
うまい事strsplitをつかってごにょごにょして文字列分割して目的の数字を取り出しています。
ぶじ変数dataに160回分のデータが取れました。


> data
[1] 86 49 62 80 23 95 61 26 78 32 77 32 17 84 22 21 46 21 68 71 78 79 52 64 63 65 56 58 28 55 42 39 67 52 22 49 10 59 52 32 49 47 50 34 61 49 34 29 82 53 95 59 77 26 57 50 40 26 56 73 75 67 78 32 56 27 80 49 41 76 42 58 46 47 94 46 53 67 93 27 35
[82] 86 64 63 39 33 43 56 54 32 50 60 66 44 79 59 88 63 37 71 75 29 62 55 89 35 66 49 51 54 49 39 58 19 56 78 69 23 59 33 9 43 57 55 63 77 37 24 37 50 37 21 51 17 89 69 48 48 59 68 56 25 62 46 81 36 74 52 90 81 54 22 90 72 12 39 58 29 44 48
>
>
> summary(data)
Min. 1st Qu. Median Mean 3rd Qu. Max.
9.00 37.00 53.00 52.96 67.00 95.00
>
>




さあ、これをグラフにしてみましょう。プロット、っと。


> plot(data)

クリックすると元のサイズで表示します

うーん、よくわかんない。
ヒストグラムにしてみよう。

> hist(data)

クリックすると元のサイズで表示します

なんか、それっぽいグラフがかけました!。
ついでに密度関数とラグプロットも書いてみよう。(参考:http://r.livedocs.net/graph/hist.html


> hist(data, freq = FALSE)
> lines(density(data), col="orange")
> rug(data)

クリックすると元のサイズで表示します

いよいよそれっぽくなってきました!

このグラフを見ると50%よりも右側にずれていますね。
回答のAもBも同じくらい選ばれているかと思いきや、左側のAがやや優勢なんですね。
ということは、たとえば
しゃぶしゃぶを食べるときはどっち?
はゴマだれ50%、ポン酢50%の互角の勝負だったのですが、有利なゴマだれに対して実質的にはポン酢が勝利していると見なせるのかも知れませんね。

VOYAGE GROUP エンジニアブログ : Advent Calendar 2012 の明日はしまくんです。
0



コメントを書く


名前
メールアドレス
コメント本文(1000文字まで)
URL




teacup.ブログ “AutoPage”
AutoPage最新お知らせ