RでAKBの年齢、身長、スリーサイズを分析する

今回は、普段Rで解析を行っているような人にはなんてことない話です。

データの題材を変えると興味が俄然湧いてくるような人もいるんじゃないの、って感じのテーマです。

データは↓こちらのものを使わせてもらいました。

アイドルプロフィール(スリーサイズ、カップ情報) - AKB48


ページ自体はHTMLのテーブルですが、大抵のブラウザではコピー&ペーストすれば、タブ区切りやカンマ区切りのテキストに簡単に変えられるんじゃないでしょうか。そんな感じでタブ区切りのデータファイルを作りました↓

"AKB.txt"

名前        年齢   身長     B     W     H
岩田華怜      15    159    82    62    85
菊地あやか    20    160    74    58    82
佐藤すみれ    20    166    78    57    84
篠田麻里子    27    168    87    57    85
高橋みなみ    22    148.5  74    56.5  81
・・・


サイトからデータを取得したのが2013年なので、情報が古くなっていると思われます。まず年齢はそうだし、あと激太りした人とか(いるのか?)。

平面上に各メンバーをマッピングしてみるなんてのが、なんとなく面白そうですね。

RでAKBの多次元尺度構成法
d1 <- read.table("AKB.txt", header=T, row.names=1)
d2 <- dist(d1)
d3 <- cmdscale(d2)
plot(d3, type="n")
text(d3, rownames(d3))


多次元尺度構成法を使ってみました。データを(年齢、身長、バスト、ウエスト、ヒップ)の5次元だととらえて距離を算出し、なるべくその距離感が再現されるように、2次元に落として(5次元のままじゃ表現しづらいので)プロットされた図という感じでしょうか。

結果はあまりあてにできないと思います。距離の算出方法もいろいろな手法があったり、正規化する/しないでも結果は変わるし。描画された結果を見て、適切な処理を選ぶといいと思いますが、なにせ私はAKBのメンバーは5人くらいしか知らないので、結果の妥当性を検証できません。AKBに詳しい人は、ぽっちゃりゾーン、のっぽゾーン、お局ゾーン(いちおう年齢という要素も入っているので)などを見つけられるかもしれません。

単純なplotは、x座標、y座標を指定すると散布図が描かれるような使い方ですが、このような多次元のデータの場合はいきなりplotを使うだけで、それぞれのデータの組み合わせの散布図をマトリックスで描いてくれます。痒いところに手が届く。

plot関数一発で複数の散布図が描ける
plot(d1)


ざっとみたところ、ウエストとヒップの相関が強そうです。場所が近いからね。

数値でも見てみましょう。

> cor(d1)
            年齢      身長         B           W          H
年齢  1.00000000 0.1496649 0.4605498 -0.02294316 0.01799732
身長  0.14966489 1.0000000 0.2171821  0.17997791 0.44760344
B     0.46054975 0.2171821 1.0000000  0.47559306 0.50405497
W    -0.02294316 0.1799779 0.4755931  1.00000000 0.67685625
H     0.01799732 0.4476034 0.5040550  0.67685625 1.00000000


予想通り、WとHの相関係数が約0.68で一番高いですね。

これだけ取り出してplotしてみましょう。

ウエストとヒップの散布図
plot(d1$W, d1$H)


見えるぞ、見えるぞ、右肩上がりの直線が。

○だと味気ないので、名前でプロットしてみました↓

ウエストとヒップの散布図(氏名でプロット)
plot(d1$W, d1$H, type="n")
rndm <- rnorm(nrow(d1))
text(d1$W, d1$H + rndm, rownames(d1), cex=0.7)


プロット位置が重ならないようにy軸方向にランダム要素を入れてみました。

もし、少しでも重なるのは嫌だという場合は、

Rの自己組織化マップ(SOM)で文字が重ならないようにする方法 - Rプログラミングの小ネタ


の方法を参考にしてみてください。

というわけで、練習でRを使うにしても、架空のデータより実際のデータの方がやる気が増したりするのではないでしょうか。

コメント

このブログの人気の投稿

Rのグラフで軸の目盛りの刻み幅を変更する方法

Rで繰り返しを含む数列の生成(rep関数、seq関数)

reorderを使ってggplotの棒グラフの並び順を降順にする方法