迷走ブログ

迷走している全ての人に役立つ情報を送るブログです

【python】乃木坂46さんの平均身長を調べてみた

はじめに

最近、YouTubeのおすすめに表示されてから、乃木坂46さんの曲を積極的に聴くようになりました。特に推しメン?に該当する方はいませんが、乃木坂46さん自体に興味を持ったので、pythonの勉強ということで、属性に関する情報的なものを分析してみました。

結論:身長は意外と高い

乃木坂46さん全体では、平均160.7cmのようでした。
また、平均年齢は、21.2歳でした。

行ったこと

  • Wikiから所属している方の情報を引張ってくる(今回は手作業)
  • データを少し加工する
  • 基本統計量を算出する
  • 色々と考察してみた

まず、今回は手作業で乃木坂46に属する方々の情報をエクセルファイルにコピペしました。スクレイピングのやり方は前回までで頑張ったので、今回はとりあえずデータを簡単に整える方に勉強時間を費やしたかったからです。

・・・す、 スクレイピングがうまくいかなかったから諦めたわけじゃないんだからねっ!

データ加工:いらないところを置き換える

import pandas as pd

df = pd.read_excel('i.xlsx')
df.columns = df.loc[0] #カラム名を0行目に書き換える
df.to_excel('re.xlsx')

手作業でデータをエクセルファイルに保存した後、データを読み込んでいます。
ただし、列名が「Unnamed: 0」のようになったため、その下の行に載っている列名をそのまま引っ張りました。

実は、この後不要な情報を削除しようといろいろと工夫をしました。例えば、以下のような操作をしました。

df.drop(columns=['Unnamed: 0','Unnamed: 1'])

が、何度もやり直すうちに何がなんだかわからなくなってしまい、一番左の列を消すことが出来ず、残りつづけました。
(ここら辺の理解が曖昧なので、勉強し直します。。。)

df['身長'].str.replace('cm','')

f:id:yktmmrmtoosa03:20210922201229j:plain

次に、身長部分に対して操作をしました。これは、後ほど、平均年齢等の統計量を算出するために文字列から数字のみにどうにか変更を試みました。加えて、間違ってコードを消してしまったのですが、df['生年月日'].str.split()を用いて、年月と歳の部分を分割しました。この時、「‘(’」で分割してしまったので、二度手間で分割後にreplace()で「歳)」を空白に置き換えました。

考察:基本的な統計量の算出

# 基本統計量の算出
df.describe().round(1)

f:id:yktmmrmtoosa03:20210922182228j:plain
欠損値を除いたデータの数は、全部で39です。おそらく、今のメンバー数と同数のはずです。中身を確認していきます。

まず、round(1)部分は、単に小数点第2位を四捨五入することを意味しています(そもそも元のデータがどうだったか忘れてしまったため、指定しました)。

次に、上述で「年齢」と「身長」の項目を数字として取り出し、それぞれの項目を追加しました。そのため、describe()でそちらの統計量が算出されています。

mean部分が平均値を意味するため、乃木坂46さん全体では、160.7cmであるようです。意外と身長が高いなと思いました。ちなみに、政府の出している統計によると(https://www.e-stat.go.jp/dbview?sid=0003224177)、乃木坂46さんの年齢の平均値である21歳くらいを見ると、157.1cmのようなです。そのため、乃木坂46さんは平均よりも背の高い集団と言えそうかなと思います。ちなみに、50%と載っている部分は、中央値となります。なので、集団全体のちょうど真ん中(なんと表現するばしっくりとくるのかわからないのでお許しください)は、161.0cmのようです。

あと、世間の流れなのか事務所の意向なのかわかりませんが、最年長29歳の方が在籍していらっしゃるようです。一番下の歳の方は、17歳のようなので、およそ12歳以上も歳の差があります。ちなみに最年長の方は、僕の年齢よりも2歳ほど高いので驚きました。
他のアイドルグループを見ていないのでなんとも言えないのですが、二十歳前後がグループ平均の年齢としては普通なのでしょうか・・・なんというか学生の方が多そうですね。

df[["出身地","血液型"]].describe()

f:id:yktmmrmtoosa03:20210922202926j:plain
ここでは、文字列の統計量を算出しています。
39人分がカウントされています。意外ではないですが、東京出身地が最も多いようです。また血液型別だと、A型の方が多いようです。

c =df.groupby('出身地').size()
c.sort_values(inplace=True,ascending=False)
c

f:id:yktmmrmtoosa03:20210922211642j:plain
東京出身が多いのは、上述の通りですが、なんと海外出身者がいらっしゃるようです。ドイツ?やアメリカの都市名が出てきました!グローバル化が進んでいるのでしょうかね。

d=df.groupby('血液型').size()
d.sort_values(inplace=True,ascending=False)
d 

f:id:yktmmrmtoosa03:20210922212523j:plain
あれ、A型とO型の数が同じではないですか!
この時、初めて知ったのですが、同じ値が最多であった場合、いずれか一方のみしか(おそらく文字コード順が優先される?)describe()では算出されないらしい?ことを知りました。正直よく理解できていないです。

e=df.groupby('加入期').size()
e.sort_values(inplace=True,ascending=False)
e 

f:id:yktmmrmtoosa03:20210922220243j:plain
4期生の方々が最も多いようです。ググったところ、4期生が最も新しい方々のようですので、着々と年齢層の入れ替わりをしているところみたいです。
加入期ごとでの年齢や身長の差異を出していないので、可視化してみます。

import plotly.express as px
fig = px.scatter(x=df['加入期'], y=df['年齢'])
fig.show() 

f:id:yktmmrmtoosa03:20210922221652j:plain
y軸が年齢でx軸に加入期ごとに配置しています。
意外にも1期生は20代前半と後半でちょうど二分化されているようです。あとは、運営の方からすると、10代後半から20代前半までを主要メンバーとして確保したい、ということなのでしょうか、3、4期生はほとんどが若いようです。

import plotly.express as px
fig = px.scatter(df, x="身長", y="年齢", color="加入期")
fig.show() 

f:id:yktmmrmtoosa03:20210922223301j:plain
ちょっと、情報量を増やしてみました。身長と年齢と加入期で何か見えて来ないかなーと思ったのですが、特にありませんね。しいてあげるとするならば、4期生の方々は165cm前後の方が多そうだということくらいかと思います。。。
ちなみに、下記のグラフは年齢と身長の軸を入れ替えたバージョンです。。。
特に意味はありません。。。。
f:id:yktmmrmtoosa03:20210922224524j:plain

おわりに

今回は乃木坂46さんについて分析してみました。
経営層がどのような人材を求めているのか、傾向があるかなーと思ったのですが、今回の内容だけでは特に新しい発見はなさそうでした。
まあ、データの加工練習にはなりましたので、ひとまずはこれでよしとします。

Amazonアンリミテッドで乃木坂46さんの曲を聞こうかな。。。