こんにちは。TATです。
今日のテーマは「【Pythonでデータ分析】Kaggleの国別身長データを可視化して緯度および気温の相関を調べる【ベルクマンの法則】」です。
Kaggleで各国の平均身長のデータを見つけたのでこれを可視化してみます。
そして個人的に気になった身長の緯度および軽度の相関についても調べていきます。
これはベルクマンの法則を検証するためです。
実際のデータを使ってみていきたいと思います。
また、本記事で活用するPythonコードについては、細かい解説はしませんが参考になるようコード付きのスクショでグラフを紹介していきます。
それでは早速みていきましょう。
目次
【Pythonでデータ分析】Kaggleの国別身長データを可視化して緯度および気温の相関を調べる【ベルクマンの法則】
データはKaggleから取得
まずはデータの準備です。
今回はKaggleからデータを入手しました。
Kaggle公式サイトより
Kaggleはデータ分析のコンペを運営しているサイトで、データが与えられて、それを参加者が分析して結果を競い合います。
優勝者には、賞金が贈られたり、開催企業の就職面接を受ける権利などが与えられます。
GoogleやFacebook、日本企業ではメルカリなどもKaggleによるコンペを企画しています。
さらに他の参加者のコードも見ることができるので、分析手法はコードの書き方を学ぶ場としても最適です。
ある程度の基礎知識があれば、あとは人のコードを見ながら学ぶことは効率的に学ぶポイントです。
ただ、Kaggle は基本的に英語サイトなので、英語が読めないとしんどいです・・・
そして今回利用したデータがこちらになります。
→ Height of Male and Female by Country 2022
ちなみにデータをダウンロードするには登録(Register)が必要です。
データの中身を確認する
データのダウンロードが完了したら早速中身を確認していきます。
ご覧の通り、身長が高い順にランキング形式でデータが用意されていることがわかります。
身長もcmとfeetで用意されていてとても親切ですね。
データ数は全部で199個ありました。
1位のオランダは平均身長が男性で180cm、女性で170cm超えw
データを見ると、最も身長が高い国はオランダで、男性の平均身長は183.78cm、女性は170.36cmです。
めちゃくちゃ高いですね。以降、モンテネグロやエストニアなどが続きます。
5位までの結果を見ると、男性は全て180cm超えです。
ちなみに僕の身長は182cmほどです。
日本ではかなり高い方に分類されると思いますが、オランダに行くとまさかの平均身長以下ですね。。。
データの全体像を確認する
次にデータの全体像を見ていきます。
まずは基本的な統計値を見てみます。
これにはdescribe関数を使います。
基本的にはcmの身長だけ見ておけばOKですね。
男性の平均は173cmほど、女性は160cmほどです。
男性と女性の身長データをヒストグラムで見てみます。
まずは男性から見てみます。
ピークが2つあるように見えますが、おおむね正規分布です。
次に女性です。
こちらは綺麗に正規分布ですね。
男性と女性の身長の相関を見る
次に男性と女性の身長の相関をみます。
まあ予想はつきますが一応確認しておきましょう。
ご覧の通り、きれいに正の相関であることがわかります。
つまり、男性の身長が高い国は女性の身長も高いということです。
相関係数も0.93でした。
日本の順位は113位
次に日本のデータについてみていきましょう。
結論から言いますと113位でした。半分以下ですね。。。
男性が172.06cm、女性が158.5cmです。
日本と平均身長が近い国も一覧で出してみます。
日本より上位には台湾やチリ、シンガポールなどがあります。
下位にはタイやナイジェリア、オマーンなどがありますね。
なんとなく赤道近辺にある国が多いように思います。
身長と緯度の相関を分析する
次に、本記事の目的でもある身長と緯度の相関を見ていきます。
ベルクマンの法則
この分析をしようと思ったきっかけは、ベルクマンの法則を知ったためです。
ベルクマンの法則(ベルクマンのほうそく)とはドイツの生物学者クリスティアン・ベルクマン(Christian Bergmann)が1847年に発表したものであり、「恒温動物においては、同じ種でも寒冷な地域に生息するものほど体重が大きく、近縁な種間では大型の種ほど寒冷な地域に生息する」というものである。これは、体温維持に関わって体重と体表面積の関係から生じるものである。類似のものにアレンの法則があり、併せてベルクマン・アレンの法則と呼ばれる事もある。
Wikipedia「ベルクマンの法則」より抜粋
人間も恒温動物ですから、このベルクマンの法則に少しは影響されるのかなと思い、調べてみることにしました。
データを持って検証するのが一番納得できますからね。
ちなみにここにあるアレンの法則は、寒い地域に行くと耳とか鼻などの突出部が小さくなるというものです。
マンモスなんかも寒い地域にいましたが、今いる象と比べると耳とかかなり小さかったことがわかっています。
データの準備
緯度と身長の相関を調べるために最初にやるべきことはデータの準備です。
こちらから拝借しました。
→ https://developers.google.com/public-data/docs/canonical/countries_csv
スクレイピングでサクッと収集します。
データは245個ありました。
このデータを先ほどの身長データと結合します。
結合した結果、一致したデータは191個で幾分か消えましたが僅かなので無視して進めます。
これでデータの準備はOKです。
身長と緯度の相関は?
それでは早速データを可視化します。
身長と緯度の相関を見てみます。
とりあえず男性のデータだけ見てみます。
なんとなく相関がありそうななさそうな。。。
相関係数は0.52でした。微妙。。。w
ここで少しデータを変換してみます。
緯度は-90度~90度で示され、赤道が0度です。
0度から上か下にいくと緯度の絶対値が上がっていきます。
基本的に赤道に近いと暖かくて、離れると寒くなる傾向にあるので、緯度の絶対値でもみてみます。
先ほどよりから少しだけ相関が上がりました。
相関係数は0.65です。
少しは相関があると言えそうですね。
ちなみに女性の身長と緯度の絶対値の相関は0.58でした。
これはベルクマンの法則が人間でもある程度は成り立つと言ってもいいのではないでしょうか。
身長と気温の相関を分析する
次に身長と気温の相関を見ていきます。
緯度と気温にはある程度の相関があると思うので似たような結果になるのではないかと思っています。
データの準備
こちらもまずはデータの準備です。
Wikiepediaから拝借しました。
→ https://en.wikipedia.org/wiki/List_of_countries_by_average_yearly_temperature
先ほど同様にサクッとスクレイピングします。
そして身長のデータと結合します。
これで準備完了です。
結合した結果、データ数は188個になりました。
少し欠損しましたが、だいたい残ってるのでこのままいきます。
身長と気温の相関は?
データの用意ができたので、早速可視化していきます。
男性の平均身長と平均気温の相関を散布図にしました。
なんか思ったより相関してないですね。。。
相関係数は-0.49でした。
女性の身長と気温の相関係数は-0.44です。
一応、右肩下がりの回帰直線が引かれているので、気温が下がると身長が高くなっている傾向は出ていますが、それでもばらつきが大きいですね。
同じような身長でも、平均気温が0度未満ところもあれば25度を超えているところもあります。
さらに詳しく分析するには、追加のデータが必要になりそうですね。
平均気温だけではなく、最高気温や最低気温、季節の有無など、いろいろ考慮したらもう少しきれいな相関が出てくるかもしれません。
ただ、今回はこの辺で終わりにしておこうと思います。
とりあえず緯度と身長の相関がある程度あることを確認できたので僕としては満足です。
まとめ
いかがでしたでしょうか。
ここでは、「【Pythonでデータ分析】Kaggleの国別身長データを可視化して緯度および気温の相関を調べる【ベルクマンの法則】」というテーマで、国別の平均身長データを使って、緯度と気温との相関があるのかを検証してみました。
結論としては、緯度ではそれなりの相関が見られたが、気温ではばらつきが大きくてはっきりと相関があるとは言えない、という内容でした。
この記事は、僕がたまたまベルクマンの法則を知ったことがきっかけでしたが、データを実際に収集して分析することができると、こういった検証を行うことができます。
実際に自分の手を動かして分析すると、結果からより理解も深まりますし、何よりやってて楽しいです。
紹介したコードを見るとお分かりいただけると思いますが、Pythonを使えば短いコードでデータの可視化や分析が簡単にできます。
スクレイピングによるデータ収集も数行で実装できます。
データ分析やデータの可視化、AI関連に強いプログラミング言語なので、これらの分野に興味のある方にはおすすめです。
ここまで読んでくださり、ありがとうございました。