Wake Up, Girls!のキャラ分析

MikuHatsune2014-01-06

昔、ラブライブキャラの主成分分析をやって、アニメ初見者のためにキャラを分類してみたのだが、Wake Up, Girls!ラブライブ的な匂いがするのでキャラを覚えるついでにやってみる。
本当は体重推定問題をやりたかったのだが、3サイズが既にあったのでやめた。
 
やはり身長が高いとスタイルはよくなる。が、今回ウエストは他のパラメータとの相関が弱め。

	age	height	weight	B	W	H
age	1	0.88	0.64	0.73	0.3	0.69
height	0.88	1	0.89	0.82	0.5	0.74
weight	0.64	0.89	1	0.8	0.6	0.77
B	0.73	0.82	0.8	1	0.42	0.64
W	0.3	0.5	0.6	0.42	1	0.52
H	0.69	0.74	0.77	0.64	0.52	1

一番ロリィな鈴木萌歌と、千早を想起させるような鈴木玲奈のヒンヌーがものすごい目印になる。
第二主成分までで86%が説明がつくらしく、軸の説明としてはこんなもんだろう。

 

# データ
name	age	height	weight	B	W	H
島田真夢	15	159	46	75	57	83
林田藍里	15	155	45	77	58	85
片山実波	14	150	40	72	57	84
七瀬佳乃	16	159	44	70	58	82
久海菜々美	13	148	39	74	50	79
菊間夏夜	18	164	50	85	59	83
岡本未夕	17	162	48	80	60	86
岩崎志保	17	163	45	82	55	81
近藤麻衣	20	168	48	85	58	88
吉川愛	16	155	40	74	56	80
相沢菜野花	19	160	42	80	58	84
鈴木萌歌	13	146	35	69	55	75
鈴木玲奈	20	162	44	78	52	85
小早川ティナ	18	165	49	88	60	86
dat <- read.delim("clipboard")
dat1 <- dat[, -1]
plot(dat1)

pr1 <- prcomp(dat1, scale.=TRUE)
summary(pr1)

pngs <- list.files("/wug/")
library(png)
# 適当なところから png を取ってきておく。
pics <- vector("list", length(pngs))
for(i in seq(pics)){
	pics[[i]] <- readPNG(paste("/wug/", pngs[i], sep=""), native=TRUE)
}
ra <- 1 #原点に近いところが潰れるので拡大したかったけど、等倍でやった。
xy0 <- sapply(pics, dim)[1:2, ] #pixel
xy0[2,] <- 100 # なんか横が潰れるのでテコ入れ
rownames(xy0) <- c("height", "width")
s0 <- 0.008 #拡大縮小率
bityosei <- replicate(14, c(0.5,-2.8))
bityosei[2, c(2,3,7,14)] <- 3.8
bityosei[1, 4] <- 0.05

par(mar=c(5, 4.5, 4, 2))
plot(pca_score[, 1:2], type="n", xlab="← 大人\tスタイル\tロリ →", ylab="← グラマー 年相応スタイル スレンダー →", xlim=c(-3.5, 4.5), ylim=c(-1.5, 2.5), cex.lab=2)
title("Wake Up, Girls! のキャラ分析", cex.main=2)
abline(h=0, v=0, lty=3, col=grey(0.7))
lay0 <- pca_score[,1:2]
lay0[4, 1] <- lay0[4, 1] + 0.18 # 七瀬佳乃の微調整
for(i in rev(seq(pics))){       # 島田真夢がかぶるので逆順にプロットする
	xleft=lay0[i, 1]*ra - xy0[2, i]/2*s0
	ybottom=lay0[i, 2]*ra - xy0[1, i]/2*s0
	xright=lay0[i, 1]*ra + xy0[2, i]/2*s0
	ytop=lay0[i, 2]*ra + xy0[1, i]/2*s0
	rasterImage(image=pics[[i]], xleft=xleft, ybottom=ybottom, xright=xright, ytop=ytop, xpd=TRUE)
	text(pca_score[i, 1], pca_score[i, 2], as.character(dat$name)[i], adj=bityosei[,i])
}