いかにも科学技術計算してるみたい
どうも、じぇいかわさきです。
Pythonの情報を集めようと、ネットを徘徊しているのですが、その中で面白いページを見つけました。
科学技術計算をやってるって感じです。そのページは、太陽の位置や動きをPythonで計算させて可視化する事をやっております。
単身赴任が明けて実家に戻って来るのが間近に迫っており、自宅に戻ってきたら庭お手入れや野菜のプチ栽培等考えておりました。
(実際は、コロナの影響で昨年後半から実家にいるほうが多いですが)
そんな時、日照時間の事など太陽の動きが分かったら非常に良いよなって思い、偶然が重なりこのページを見つけました。
そのページはQiitaで、何時もプログラムで困った時にお世話になっているページですね。
ページ内には、天文的な知識はそこそこにPythonのどんなモジュールを使うとどんな事ができるという説明ですが、非常に分かりやすい。
ただ、天文学の知識がないと、なんで?という部分もありますが、表示されているコードを自分で動かしてみると、コードの動きがわかり面白いです。
ためしに1年間の太陽と地球の距離を計算するコードを見てみましょう。
コードのライン数はそんなに多くないのですが、これで計算できてしまうなんてすごいなって思いました。
import datetime
import astropy.time
import astropy.units as u
from astropy.coordinates import get_sun
import numpy as np
import matplotlib.pyplot as plt
tz = astropy.time.TimezoneInfo(9*u.hour)
toki = datetime.datetime(2021,1,1,12,0,0,tzinfo=tz)
toki = astropy.time.Time(toki) + np.arange(365)*u.day
taiyou = get_sun(toki)
plt.scatter(toki.value,taiyou.distance.value,c=np.arange(365),s=1,cmap='rainbow')
chikai_toki = toki.value[taiyou.distance.value.argmin()]
tooi_toki = toki.value[taiyou.distance.value.argmax()]
plt.axvline(chikai_toki,color='k',ls=':')
plt.axvline(tooi_toki,color='k',ls=':')
plt.text(chikai_toki,1,'%s\n%.3f AU'%(chikai_toki.date(),taiyou.distance.value.min()))
plt.text(tooi_toki,1,'%s\n%.3f AU'%(tooi_toki.date(),taiyou.distance.value.max()))
plt.ylabel(u'距離 (AU)',fontname='AppleGothic')
plt.show()
引用先は以下のサイトです。
このコードは、ページ内に有る物をそのままコピーしても、エラーで動きません。
まあ、エラーを確認していけばわかりますが、各コード説明は最初からの流れで構成されていますので、そのままではモジュールのインポートが不足します。
従って、先のコードのように最初にたくさんのモジュールをインポートしているんです。
結果はこんな感じでグラフ化されます。
このグラフよりわかるのは、実は今年、太陽と地球が最も近いのは1月2日だったんですね。
太陽と地球の距離を天文数字で1AUと表すようで、楕円軌道のため若干近くなったり遠くなったりするようです。ぱっと見た目は±0.02くらいです。
このように、Pythonを使うと簡単に可視化ができるって素晴らしいですね。
このページのコードをいろいろと使って自分で動かすと、自分の位置でどのように見えるのかが可視化でき非常に面白いです。
ただ、最後にある「太陽が南中する時間と日の出と日没の時間と昼の長さ」のコードで、エラーが発生しており、自分なりに解析しているのですが、未だ解決できず。
日の出、日没がわかるようになると、庭作業に対して便利かなって思ったのですが、動かなければただの数字の羅列ですからね。
もう少し頑張って考えてみます。
Pythonを学び始めて、驚くことばかりですね。昔、BASICでプログラムをやっていた頃とは雲泥の差です。ましてや、CやC++のように難解でないところが非常に良い。
これはコツコツと学ぶ価値は十二分にありますね。