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オブジェクトを生成する。
しかし、もっと洗練されたやり方があるはず、と想像する。
10日目 日に日に伸びる日の出の時間
このコーディングがpythn的に美しいモノとは全く思わないが、さしあたり、前日の日の出時間と当日の日の出時間の差分を表示できるようにした。
私は、構造化プログラムを長年読んできたので、pythonのようなスクリプト言語を適切に扱えていないことを自覚している。
さすがに、配列を回すときに、その前の配列をストアして(以下のコードでいうとfwdday)、差分を取得する、なんて、プリミティブだと思う。
ほかにいいやり方はあるはず。
また、この差分検出の算式は、日の出時間が遅くなりはじめると機能しなくなる。洗練された算式があるはずだ。pytho初心者&文系には厳しい。
だが、それでも、毎日何分ずつ日の出の時間が早くなっていくのかを知りたい、という欲求に勝てなかった。
と言うことで、以下のような結果だ。
次回はgitを試すか、あるいは、算式を見直すか。
それでは。
9日目 日付の差分をとる
1日前の日付をとってみる。
from datetime import datetime as dt from datetime import timedelta as td
#現在の日付
n = dt.now()
print(n)
#1日前
yd = n – td(days=1)
print(yd)
さらに検証。差分を出して表示。
#検証
term = n – yd
print(term)
こんな感じになった。
日付の扱い方が少しずつわかってきた。
8日目 日の出時刻一覧表を作る
pandasを使うと、日付の行列を簡単に作れるようだ。
http://sinhrks.hatenablog.com/entry/2014/11/09/183603
こちらを見てみる。
Pandasのpd_daterangeが使える。
n = datetime.now()
dtidx = pd.date_range(n,periods=15,freq=’D’)
結果。さしあたり、日時の行列ができている。
続いて、この行列に対応した日昇時刻をゲットしてみる。
まずはAstralのセットアップ。これは、公式サイトの例文をそのまま流用する。
city_name =’Tokyo’
a = Astral()
a.solar_depression = ‘civil’
city = a[city_name]
print(‘Information for %s/%s\n’ % (city_name, city.region))
timezone = city.timezone
print(‘Timezone: %s’ % timezone)
print(‘Latitude: %.02f; Longitude: %.02f\n’ % \
(city.latitude, city.longitude))
続いて、日付の行列をAstralに食わせて表示する。
for dt in dtidx:
sun = city.sun(date=dt, local=True)
print(‘Sunrise: %s’ % str(sun[‘sunrise’]))
結果だ。この時期は、1日に1分半も日昇時刻が早まったいるのか。加速度的だ。
加速度的? これをなんとかグラフにできないだろうか??
次の課題。
7日目 pandas は Pythonista3では使えない?
今日もコーディングできない。
調査のみ。
日付行列をつくろう考えた。日付ごとの日没時間推移を作るために。
だが、残念ながらpandasが使えないようなのだ。
- pipでpandasでインストールし、importと打つが、numpyとバージョンが合わない、となる。
- pipでnumpyを改めてインストールすると、そもそもnumpyが動かない。pythonistaではカスタマイズされたnumpyが動いている。通常のnumyは動かないということか。
- こちらも。
https://forum.omz-software.com/topic/4365/will-pandas-and-scipy-be-available-on-pythonista-in-the-near-future
ということで、そこは残念だが、macで試すしかなさそうだ。
6日目 datetime import の方法
importをする場合、該当するモジュールの階層構造を抑えないといけない場合がある。
医科のような事象が起きて、初心者的に少し混乱したが、まあ理解したつもり。
1)
from datetime import datetime
s =datetime.now()
→ OK
2)
from datetime
s =datetime.now()
→ NG
datetimeの構成は階層構造だ。
datetime <- (1)
timedelta Objects
date Objects
datetime Objects <- (2)
time Objects
tzinfo Objects
timezone Objects
strftime() and strptime() behavior
a) import datetime は、(1)を指している。
b) from date time import date time は(2)を指している。
now()は、(2)の下に位置しているので、a)のしていではNGなのだ。
なので、
2)-2
from datetime
s =datetime.datetime.now()
→ OK
となる。
勉強になった。
5日目 pandas
日付のハンドリング調べていたら、japandasに行き着いた。
https://pypi.python.org/pypi/japandas/
さらに本家のpandas。
http://pandas.pydata.org
今日は、英文を読んで終わった。
また明日。