LoginSignup
2
1

More than 3 years have passed since last update.

喜多見柚の体型はどのくらい平均的なのか

Last updated at Posted at 2019-09-14

喜多見柚の身長,体重,3サイズはシンデレラガールズのアイドルの平均値にかなり近い,とよく言われているので,実際にどれほど近いのか,また,他のアイドルはどうなのか,3通りの方法で定量的に確かめてみました.(統計学初心者なのでそれらの方法が妥当なのかは判断しかねますが...)

ただし,計算に当たって,プロフィールで数値を確認できないアイドルは除外しました(大沼くるみ,佐藤心,双葉杏,夢見りあむ).

環境
google colab(python3.6.8)
使ったファイルはここhttps://github.com/ysk0832/hobby

はじめに

平均値と見比べてみる。

身長 体重 B W H
平均値 156.23 43.2 80.88 56.31 81.24
喜多見柚 156 43 82 57 82

確かにほぼほぼ同じですね。

方法1:cos類似度

cos類似度は、文書の比較などによく用いられる指標です。式は簡単で内積の定義を変形しただけ。
$$\cos\theta=\frac{a \cdot b}{||a||||b||}$$

コードは以下

import numpy as np 
import pandas as pd

# 関数定義
# 内積
def ip(a,b):
  return (a*b).sum()
# ノルム
def norm(x):
  sum=(x*x).sum()
  return np.sqrt(sum)
# 類似度
def sim(a,b):
  return ip(a,b)/(norm(a)*norm(b))

# csv読み込み
df=pd.read_csv("cg.csv")
# 確認
print(df)

# 平均
mean=df.mean(numeric_only=True)

# 計算結果をリストに保存
simlist=[]
for i in range(0,186):
  result=sim(mean,df.iloc[i,1:6])
  print(result)
  simlist.append(result)

# 列を追加
df["類似度"]=simlist

# 類似度が高い順に出力
print(df.sort_values("類似度",ascending=False))

結果(上位10人,下位10人)
top10.png
worst10.png

柚は3位でした.三船美優さんが2位...?!

方法2:正規化する

各列ベクトルを0-1に正規化して再びcos類似度を計算してみます.
$$\frac{x-x_{min}}{x_{max}-x_{min}}$$

# 一旦削除
df=df.drop("類似度",axis=1)

# 正規化して再計算

# 名前抜き
df_tmp=df.iloc[:,1:6]

# 正規化
df2=(df_tmp-df_tmp.min())/(df_tmp.max()-df_tmp.min())
mean2=(mean-df_tmp.min())/(df_tmp.max()-df_tmp.min())

# 計算結果をリストに保存
simlist=[]
for i in range(0,186):
  result=sim(mean2,df2.iloc[i,:])
  print(result)
  simlist.append(result)

# 列を追加
df["類似度"]=simlist

# 類似度が高い順に出力
print(df.sort_values("類似度",ascending=False))

結果
top10normal.png
worst10normal.png

柚は7位.さっきと半分ほど被ってますね.

とは言っても,みんな類似度0.99超えててほとんど同じじゃないかと思ってしまいます.これはどうやら今回のデータが全て正の値なのも原因のようです.
https://cartman0.hatenablog.com/entry/2019/05/22/_cos%E9%A1%9E%E4%BC%BC%E5%BA%A6%E3%81%AE%E6%AC%A1%E5%85%83%E3%81%AE%E5%91%AA%E3%81%84
また,cos類似度はあくまでもベクトルの開き具合を見ているのであって,近い点だから類似度が高いとは一概には言えません.美優さんが2位になったのもそのためと考えられます.
ということで方法3へ.

方法3:距離

シンプルに平均値からのユークリッド距離を計算します.

df=df.drop("類似度",axis=1)

# 平均値との距離
dlist=[]
for i in range(0,186):
  d=norm(df.iloc[i,1:6]-mean)
  dlist.append(d)

# 列を追加
df["距離"]=dlist

# 距離が近い順に出力
print(df.sort_values("距離"))

結果
top10d.png
worst10d.png

喜多見柚1位!!!!!!

まとめ

今回は「体型が近い」の解釈の仕方によって評価指標も変わったのかなと.類似度は平均との比較というよりは,「この二人は身長はまるで違うがどちらも痩せ型である」みたいなことを知りたいときに使えばいいって感じですかね?


ということで,
喜多見柚はシンデレラガールズでもっとも平均的な体型のアイドルである
ブルーミーヒロイン.jpg

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1