20日目 グラフが書けた。
そうか。この命令文「plt.show()」が足らなかった。
plt.show() を使うとグラフウィンドウが表示された。
しかし、365本のグラフを引くのは今日のところはできない。
いろいろと調整した結果、30本ひくのがやっと。
横長の美しいグラフは引けるのだろうか?
19日目棒グラフを書く
棒グラフを書くことにした。
Metaplotlibを使ってみる
barというメソッドが、棒グラフを書くメソッド。
graphDate と言う配列には、シーケンスを設定した。
sunriseTableには、前日差を格納した。
しかし、何も起きない、ということで、時間切れだ。
18日目 日の出時刻、日の入り時刻の前日差を配列に格納する
日の出時刻、日の入り時刻の前日差を配列に格納しようと考えた。二次元配列になる。
日付、日の出時刻の前日差、日の入り時刻の前日差、という3要素を1年間分格納する。
配列の宣言はやり方はさまざまなのだそうだが、以下のようにするようだ。
以下のような配列ができあがった。2日分だが、これが365日分あるイメージ。
17日目 1年間の日の出、日の入り時間のテーブルを作る
日の出日の入りの1年間分のテーブルを作ってみて、前日差を観察してみた。
ほとんど小学生の自由研究の類いだ。おそらくは昨今の小学生であれば、低学年でもこの程度のPythonはあやつれるのだろう。
大人よりも時間をたっぷりもった小学生がうらやましい。
ちなみに、わたしは文系で高校数学の素養はまったくない。だが、SFが好きで、高校の地学は全校トップ(といっても選択者は10人程度だったはず)だった。
3月の日の出と日の入りの時間
日の出は86秒ずつ早くなる。日の入りは50秒程度で遅くなる
9月の日の出と日の入りの時間。
日の出は45秒程度で遅くなる。日の入りは90秒弱で早くなる。
1. 日の出と日の入りの前日差は、春分が最大86秒だが、秋分では最大89秒で不均等である。
2. 春分では日の出の前日差(86秒)のほうが、日の入りの前日差(51秒)より大きいが、秋分では日の入りの前日差(89秒)のほうが日の出の前日差(46秒)より大きい。
3. (前日差の揺らぎは、秒未満の差違と推察される)
「秋の日はつるべ落とし」といわれるが、「春の日はどんどん早くなる」という類いの慣用句は有名ではなさそうだ。秋の日の入りの時刻は加速度的に早い。だから「秋の日はつるべ落とし」という慣用句が生まれたのだろう。
次の謎の見えるかは、経年で日の出時間は変化するのか、である。
地球の公転がとまらないか、不安で仕方がない。
では。
16日目 1年間の日の出時間テーブルを作る
日の出時間の演算は、(あまりやりたくなかったが)うまくできないので、秒単位の数値型に置き換え、計算することにした。エクセルで計算するならこうするだろうから、Python的な面白味はない。だが、仕方がない。
また、このやり方は、日の出日の入りが夜半を超えるケースがあるとすれば無効となる。白夜など北極圏、南極圏はどうすれば良いのかという課題。
とはいえ、取り掛かろう。
日付時間型を入力に秒に変換する関数はこちら。
で、日の出テーブルを二年間分作ってみる。
テーブルを回す中で、当日と前日の日の出時刻の差分を秒単位で算出する。
以下のようなテーブルができた。右端は、前日と当日の日の出時刻の差分。3月19日は昨日と比べて86秒日の出時刻が早くなっている。
だが、おかしい。半年後の9月は、47秒ほどしか遅くならない。
遅くなっていく時間、最大は60秒ほど。地球の公転軌道は楕円ということと関係しているのだろうか? 太陽の位置が楕円中心より少しずれている、とか。
むしろ11月にピーク。なぜ? さらに、揺らいでいる。Astralの問題?
さしあたり今日はここまで。
15日目 時刻の計算
以下のコードを書いて、t とsの差分である、1分1秒が表示されないか、と想った。
しかしNGだ。
エポック時間に変換して秒単位で計算する、と言うことなんだとおもう。次の課題。
ちなみに、やっていることは本当にプリミティブなことなんだが、エクセルであろうが、なんであろうが起こる問題だ。
時刻の計算は簡単そうでありながら、実は難しいもの、ということがわかっているので、地道にやろうと思う。
14日目 日付から時間だけを抜きだす
日の出時間から時刻情報だけを抜きだそうと思った。
昨日の作戦では、年月日をすべてゼロに置き換えようと考えたが、ゼロにおきかえると西暦0年0月0日と言うことになり、エラー。
なので、(これが正しい方法かはわからないが)、timeクラスを使って、datetimeオブジェクトをtimeオブジェクトに変換する関数を作ってみた。
これがその関数。引数のdtには、datetimeオブジェクトが入る。そこから、時間、分、秒の情報を抜きだして、timeオブジェクトを作るというもの。
これを呼んでみる。
sr に代入されているのはAstralから得られる日の出時間情報。これはdatetimeオブジェクトだ。
1)は、datetimeクラスに備えられた時間情報の取得。取得した情報を文字列変換している。
2)は、取得情報からtimeオブジェクトを生成している。
3)は、関数を使って、取得情報からtimeオブジェクトを生成している。
呼び方はこのように記述。
結果はこちら。
今日の東京の日の出は5時51分27秒。
1)は文字列だが、2)、3)はtimeオブジェクトだ。
今日はここまで。
13日目 年を置き換え
replaceを使うと、日付の一部を置き換えられるようだ。
結果はこちら。
ちなみに、yearに0を代入するとエラー。1はOK。
西暦1年の3月14日になにがあったんだろう?
では。
12日目 git
さしあたり、gitを使うことにする。
Git initと打つと、まずはXcode/iOSライセンスへの同意を求められる。
と言うことで、ライセンスを確認。
改めて実行
だが、ここからつまずく。調べると、まずはgithubでリポジトリを作ってから、と言う手順…。
こだわりにより、まずはローカルだけでgitを使ってみたい、と思うわけだ。
もう少し調査が必要。
頑張ろう。
11日目 時刻情報を取り出す
日の出時刻の情報は、日付と時刻の情報が入ったdatetimeクラスだ。それを時刻情報だけのtimeオブジェクトに変換できないか。
それだけを考えた。
結果は以下のイメージの通り。
sr に格納された情報から時刻情報(時分秒)をゲットするのだが、メソッドで取得できる。
(このあたりが、旧い世代にはない便利さ。素敵だ)
そこで取得した時刻情報(INT)からtimeオブジェクトを生成する。
しかし、もっと洗練されたやり方があるはず、と想像する。