AKB勢力図を描いてみる

AKBがいま選挙中ですね。

クリギング手法の練習として,次のようなことをして遊んでみました。

まず,AKBトップ20名の顔写真を一組ずつ見ていって,類似度評定(七段階)。
これで作られる類似度行列を多次元尺度法で2次元空間にマッピング。
さらに,現在の得票数を三次元方向のデータと考えて,クリギングによる等高線マップを描く。

コードは次の通り。

disance <span class="synStatement">&lt;-</span> read.<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a><span class="synSpecial">(</span><span class="synConstant">&quot;c:\\temp\\<a class="keyword" href="http://d.hatena.ne.jp/keyword/akb48">akb48</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>&quot;</span><span class="synSpecial">)</span>
cmdscale<span class="synSpecial">(</span>distance<span class="synSpecial">)</span> -&gt; AKBmap
contAKB <span class="synStatement">&lt;-</span> cbind<span class="synSpecial">(</span>AKBmap<span class="synSpecial">,</span>
c<span class="synSpecial">(</span><span class="synConstant">17156</span><span class="synSpecial">,</span><span class="synConstant">16452</span><span class="synSpecial">,</span><span class="synConstant">12056</span><span class="synSpecial">,</span><span class="synConstant">8833</span><span class="synSpecial">,</span>
<span class="synConstant">8582</span><span class="synSpecial">,</span><span class="synConstant">8016</span><span class="synSpecial">,</span><span class="synConstant">7357</span><span class="synSpecial">,</span><span class="synConstant">6596</span><span class="synSpecial">,</span><span class="synConstant">6559</span><span class="synSpecial">,</span>
<span class="synConstant">6537</span><span class="synSpecial">,</span><span class="synConstant">5157</span><span class="synSpecial">,</span><span class="synConstant">5096</span><span class="synSpecial">,</span><span class="synConstant">3931</span><span class="synSpecial">,</span><span class="synConstant">3860</span><span class="synSpecial">,</span>
<span class="synConstant">3102</span><span class="synSpecial">,</span><span class="synConstant">2843</span><span class="synSpecial">,</span><span class="synConstant">2753</span><span class="synSpecial">,</span><span class="synConstant">2685</span><span class="synSpecial">,</span><span class="synConstant">2201</span><span class="synSpecial">,</span><span class="synConstant">1793</span><span class="synSpecial">))</span>
library<span class="synSpecial">(</span>geoR<span class="synSpecial">)</span>
geodata <span class="synStatement">&lt;-</span> as.geodata<span class="synSpecial">(</span>contAKB<span class="synSpecial">)</span>
v <span class="synStatement">&lt;-</span> variog<span class="synSpecial">(</span>geodata<span class="synSpecial">)</span>
vf <span class="synStatement">&lt;-</span> variofit<span class="synSpecial">(</span>v<span class="synSpecial">)</span>
plot<span class="synSpecial">(</span>v<span class="synSpecial">)</span>
lines<span class="synSpecial">(</span>vf<span class="synSpecial">)</span>
loc <span class="synStatement">&lt;-</span> expand.grid<span class="synSpecial">(</span>seq<span class="synSpecial">(</span>-<span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">0.05</span><span class="synSpecial">),</span>seq<span class="synSpecial">(</span>-<span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">5</span><span class="synSpecial">,</span><span class="synConstant">0.05</span><span class="synSpecial">))</span>
k <span class="synStatement">&lt;-</span> krige.conv<span class="synSpecial">(</span>geodata<span class="synSpecial">,</span>locations=loc<span class="synSpecial">,</span>
krige=krige.control<span class="synSpecial">(</span><a class="keyword" href="http://d.hatena.ne.jp/keyword/cov">cov</a>.pars=vf$<a class="keyword" href="http://d.hatena.ne.jp/keyword/cov">cov</a>.pars<span class="synSpecial">))</span>
image<span class="synSpecial">(</span>k<span class="synSpecial">)</span>
contour<span class="synSpecial">(</span>k<span class="synSpecial">,</span> add=<span class="synConstant">TRUE</span><span class="synSpecial">,</span> drawlabels=<span class="synConstant">FALSE</span><span class="synSpecial">,</span> col=<span class="synConstant">'brown'</span><span class="synSpecial">,</span>nlebels=<span class="synConstant">20</span><span class="synSpecial">)</span>
text<span class="synSpecial">(</span>AKBmap<span class="synSpecial">,</span>colnames<span class="synSpecial">(</span>distance<span class="synSpecial">))</span>

出来た画像がこれ。

f:id:kosugitti:20110530161121j:image:right

白くなるほど高度が上がる=得票率が高い,ということ。
これを見ると,山が3つ,少なくとも2つあるということがわかる。つまり,単峰ではないのだ。グループの中でファンの好みが散らばるから,みんなそこそこ満足したりするんだろうね。
宝塚のスターを類似度評定して人気投票したとしても同じようになるかな?あっちは単峰なんじゃないかな。何となく。
ブランドイメージとしては,どちらの戦略が有効なんだろうか。

あるいは,AKBに入っていない人を類似度評定してマッピングした場合,予想される得票数なんかも算出できる。あたってるかどうかは別にして(笑)

今回は学生(サンプル1)が類似度評定したので,これで根拠のある何かが語れるわけではないけど,とりあえず技術はゲットしたぜ!
あとはバリオグラムの推定なんかについて,オプションを使いこなせるようにならないとね。