仮説
ある日思いました。
5月下旬〜6月中旬くらい、なんかめっちゃしんどい。
そういえば日の出が早くなっているせいじゃないか・・・?
1日の昼が一番長い夏至は6月下旬だけど、この時期が一番「日の出が早くなっている」のではないか・・・?
この「日の出が早くなるペースが一番早いのは5月下旬説」について、
自分でデータ取得し可視化することで、検証してみました
検証
データ作成
データはどっかに転がってるだろうと思い、ぐぐると、国立天文台のサイトにありました。
HTMLの表形式のデータだったので、beautifulsoupかな…と思いましたが、
pandasのpd.read_html(url)
なる関数で、Webサイトの一発で取れるようです。
実際のコード
Google Colaboratoryで動かしました。大体ライブラリ入っており便利です。
UIが独特だったりして慣れない感じはありますが。。。
import pandas as pd
# EmptyなDataFrame準備
df_all = pd.DataFrame()
# forで毎月分取得
for i in range(1, 13):
print(str(i).zfill(2)) # zfill:01〜12の形式にする
ii = str(i).zfill(2)
url = 'https://eco.mtk.nao.ac.jp/koyomi/dni/2024/s13' +ii+ '.html'
df_tmp = pd.read_html(url) # html内の表を読み取る
df_tmp2 = df_tmp[0] # 読み取った表のうち、最初のもの
df_tmp2['month'] = i
df_all = pd.concat([df_all, df_tmp2])
make_ts = lambda x: pd.Timestamp(2024, int(x['month']), int(x['日'])) # 年月日(それぞれの情報)から、Timestampにする関数
df_all['ts'] = df_all.apply(make_ts, axis=1)
# 保存
df_all.to_csv('./20240527_hinode_hinoiri.csv', index=None)
可読性も十分高い20行のコードで、1時間ちょっとで書けて、Webスクレイピング+データ加工できるなんて、Pythonってやっぱすげえなと思いました。
もちろん、pd.read_html
が一番偉いのですが・・・
(最初、ネットで「HTML 表 スクレイピング」などと検索したところ、beautifulsoupを使う記事ばかりだったのですが、あんな長コード書かなくて済むとは・・・)
同時に、難易度の低いライブラリ・関数等を作ったり、処理をシンプルに見せる工夫も大事だなと思いました。
データ可視化
Tableauでやりました。
Matplotlibでも良いんでしょうが、細かい設定が面倒くさそうだったので。。
- 日の出、日の入り時刻の分布
- 日の出時刻の前日との差
(青色は傾向線です←Tableauで入れ方分からなかった顔)
これを見ると、日の出時刻の早まるペースが一番ピークとなるのは、3月頃となり、説の立証に失敗しました。
あと、1/1を境に日の出が早くなっていって、7/1を境に日の出が遅くなっていくんですね。(元々そういう定義なのかもしれません・・)
結論
仮説は外れていました。
多分、GW終わりで週5働いて疲労が蓄積している&しばらく祝日がなくてしんどいからでしょう(急に他人事)
でも、こうして「思い立ったらすぐ」データを取ってきて可視化できるので、Pythonの便利さを実感しました。。