とあるお兄さんの雑記

基本的に技術系の内容を書きますが、何を書くかは私の気分です。

あなたの身長は上位何%?(男性版のみ)

最近暇を持て余しておりまして。(嘘です。任された仕事がいつまで経っても終わらず、先輩方に迷惑ばかりかけてないか不安です。)

そんなおり、友人にけしかけられたということもあり、マッチングアプリなるものをはじめてみました。

いろいろな女性がいらっしゃるわけですが、ある時、ある女性が求める条件の一つに「高身長男性」という項目がありました。

どうやらその女性は自らの身長が高いということもあり、男性に求める最低身長が180cm超えでした。

高いなと思いつつ、180cm超えってそんなにいるっけ?と思い、日本の成人男性の上位何%が180cm超えているのか気になり調べてみました。

データ

データは以下のサイトから、Excelデータを取得してきました。

e-Stat 政府統計の総合窓口
令和元年国民健康・栄養調査

今回調べたいのは日本の成人男性(20歳以上)の平均身長と標準偏差なので、他の項目は無視します。

この時、20歳以上の成人男性の人数は 1,968人、平均身長は 167.7cm標準偏差 6.9 cmです。

データの標準化

上記のデータの値をそのまま使うのもありですが、せっかくなので標準化してみます。

標準化とは、与えられたデータを平均が0、分散が1のデータに変換する操作のことです。標準変数を zとし、各データを x_i、平均値を \mu標準偏差 \sigmaとすると、

 \displaystyle z = \frac{x_i - \mu}{\sigma}

となります。この時、成人男性の身長という X軸を、標準化した Z軸で表すと、

 \displaystyle z = \frac{180.0 - 167.7 }{6.9} = 1.782608696 \approx 1.78

とできます。上記より、 x = 180という値は、標準変換すると Z軸上では z \approx 1.78で表せることがわかりました。

身長が180cm以上の男性の割合は?

ここから標準正規分布表を使って、 0 \leq z \leq 1.78がどのくらいかを調べてみます。

標準正規分布表を参考に値を見つけると、

 \displaystyle P(Z \leq 1.78) = 0.4625


よって、平均身長 167.7cmから 180cmまでの成人男性の割合はおおよそ 46.25\%ということがわかりました。

つまり、成人男性の身長が 180cm以下の人は、(平均身長 167.7cm以下の人も含めて) 96.25\%ということがわかりました。


では、逆に身長 180cm以上の人はどれくらいいるのかというと、全体から身長が 180cm以下の人の割合を引けば良いので、

 100\% - 96.25\% = 3.75\%

よって、日本の成人男性の上位 3.75\%の人が180cm超えているということがわかりました。


なるほど。 これを多いとみるか、少ないと見るかはあなた次第になりそうです。

もちろん、このデータは日本人だけなので、ガタイの良い外国人の方も含めると全く違う結果になると思います。

サンプルコード

暇なのでサンプルコードを作ってみました。調べたい身長の部分を変えるといろいろ調べることが可能です。
環境はGoogle Colaboratoryです。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad
from scipy.stats import norm

MEAN = 167.7
SIGMA = 6.9
input = 180 #調べたい身長

Z = (input - MEAN) / SIGMA
I = quad(lambda x: 1/(np.sqrt(2 * np.pi)) * np.exp( -1 * x**2 / 2), 0, Z)
print("あなたの身長は上位{:}%".format((1.0 - (I[0] + 0.50)) * 100))

x = np.linspace(-3.5, 3.5, 101) 
y = np.exp(-x**2 / 2) / np.sqrt(2 * np.pi)
plt.plot(x, y)

x1 = np.linspace(Z,3.5,101)
y1 = np.exp(-x1**2 / 2) / np.sqrt(2 * np.pi)
plt.fill_between(x1, y1, where=y1>0,facecolor='y')
plt.show()

実行すると以下のグラフが出てきます。

f:id:kurasher:20210221142825p:plain

 180cmを超える成人男性は色のついた部分のみになります。いずれにせよ、視覚化すると分かりやすいですね。