今回はPythonによるdatetime、unixtimeの変換方法を見ていきましょう。
Pythonでプログラムを作っているとunixtimeで(パラメータとして)時間指定したい場合があると思います。unixtimeはコンピュータにとってはありがたい形式ですが、人間にとっては可読性が低くて扱いづらい形式です。ですから、これらを変換できる様なコードを予め準備をしておくと便利です。
今回はcryptowatch APIから取得したOHLCデータ等を使用してdatetime⇔unixtimeの活用の仕方を紹介していきたいと思います。
※cryptowatch APIについても理解が深まると思います。
datetime⇔unixtimeの変換は仕事でも個人開発でもよく使いますよ!
使い方をしっかりと覚えておきましょう!
コンテンツ
unixtimeは「UTC」「JST」どちらが基準?
さて、具体的な解説に入る前に一つだけ大切なお話をします。
ここを掴んでおかないと、たぶん後で混乱するので、しっかりと覚えておいて下さいね。※といっても簡単な話です。
unixtimeを扱う際に注意が必要なのです。
それは「日本時間(JST)と世界標準時間(UTC)は異なる」という事です。
プログラミングをするために時刻変換を行う場合、ライブラリ関数などではUTC基準で考える事の方が多いので注意しましょう。
Pythonはシステムトレード(プログラムによって自動でトレードする事がある)などでも使われますが、トレーディングの場合も基本的にはUTC基準で考える事が多い様です。しかし、人によっては日本時間で作られたチャートだけを使用する方もいます。特に正解はありませんが、自分のトレード手法がどちらの時間を基準にすべきかをしっかりと考えておく事が大切です。
いずれにしても、扱い方によって基準時間を変える必要があるという事は覚えておいて下さい。
■datetimeとunixtimeを変換できるサイト(日本時間との変換です)
https://url-c.com/tc/
https://tool.konisimple.net/date/unixtime
Pythonコードでdatetime⇔unixtimeを変換する際の構文
さっそく、変換手順を見ていきます。変換方法はたくさんありますが、今回はPythonに標準で付属しているdatetimeというモジュールを活用しましょう。
※qiitaのこちらの記事も参考にさせていただきました。https://qiita.com/mykysyk@github/items/e15d7b2b1a988b8e29d4
datetimeモジュールの読み込み
モジュールの使い方は簡単です。ソースコードの先頭で、
from datetime import datetime
と記載をすればOKです。ちなみに、fromとimportの構文は以下です。
[from モジュール名 import クラス名(または関数名)]
先頭でこの様に記載しておけばdatetimeクラスを使い放題です!
unixtime⇒datetimeへの変換
以下のコードでunixtime⇒datetime(UTC)への変換ができます。すっごく簡単です。
■Pythonコード
datetime.fromtimestamp(1519862400)
■printした場合の実行結果
2018-03-01 00:00:00
datetime⇒unixtimeへの変換
以下のコードでdatetime(UTC)⇒unixtimeへの変換ができます。
datetimeで指定するのは
■Pythonコード
datetime(2018,3,1,0,0).strftime(‘%s’)
■printした場合の実行結果
1519862400
Pythonで行うdatetime⇔unixtime変換例
では実際に、datetime⇔unixtimeの変換を行いましょう。3月1日~10日までのデータを使って、お互いに変換してみました。変換した結果をそのままprintで画面出力しています。
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from datetime import datetime print("・unixtime⇒datetimeに変換") print(datetime.fromtimestamp(1519862400)) print(datetime.fromtimestamp(1519948800)) print(datetime.fromtimestamp(1520035200)) print(datetime.fromtimestamp(1520121600)) print(datetime.fromtimestamp(1520208000)) print("・datetime⇒unixtimeに変換") print(datetime(2018,3,1,0,0).strftime('%s')) print(datetime(2018,3,2,0,0).strftime('%s')) print(datetime(2018,3,3,0,0).strftime('%s')) print(datetime(2018,3,4,0,0).strftime('%s')) print(datetime(2018,3,5,0,0).strftime('%s')) |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
・unixtime⇒datetimeに変換 2018-03-01 00:00:00 2018-03-02 00:00:00 2018-03-03 00:00:00 2018-03-04 00:00:00 2018-03-05 00:00:00 ・datetime⇒unixtimeに変換 1519862400 1519948800 1520035200 1520121600 1520208000 |
Pythonのループで対象期間のデータだけを引っこ抜く
では、少しループ処理なども使って遊んでみましょう。
今回は、「3/11~3/20までのOHLCデータをループで呼び出して出力する」という事をやってみます。cryptowatch APIへのリクエストのパラメータで指定するのは「日足(periods=86400)」で「2018/3/1以降(after=1519862400)」のデータになります。
ではさっそく!
と、
その前に!
まずはちょっとしたテストプログラムを作ってみます。プログラムというのは段階的に作っていった方が力も付くと思います。
Pythonで作るループ処理の練習①
datetime⇒unixtimeで11日~20日のunixtimeを取得してみましょう。for文の使い方等が分からないとう場合には良い練習になると思います。
■Pythonコード
1 2 3 4 |
from datetime import datetime for i in range(11,20): print(datetime(2018,3,i,0,0).strftime('%s')) |
■実行結果
1 2 3 4 5 6 7 8 9 |
1520726400 1520812800 1520899200 1520985600 1521072000 1521158400 1521244800 1521331200 1521417600 |
Pythonで作るループ処理の練習②
上記のPythonのコードではdatetime⇒unixtime変換をしながらループ処理を行いました。今度は、cryptowatch APIから取得したデータの中で対象データを抜き出してみましょう。3月11日(unixtime=1520726400)のデータにマッチするOHLCデータを取得してみます。
今回もループ処理を使います。
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 12 |
import requests def get_data(min): response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc",params = {"periods":min,"after":1519862400}) data = response.json() return data r_min = 86400 out_data = get_data(r_min) for j in range(0,50): if 1520726400 == out_data["result"][str(r_min)][j][0]: print(out_data["result"][str(r_min)][j]) |
■実行結果
1 |
[1520726400, 1001000.0, 1015909.0, 938630, 945000, 528.43677, 525670820.0] |
※テスト用なので、for文のrangeを0~50としていますが、普通は50とはせずにデータ件数の最大値を設定します。
PythonのループでOHLCデータから対象データを引っこ抜いてみよう
では実際に作ってみましょう。datetime⇔unixtime変換の勉強にもなりますよ。
おさらいをすると、「cryptowatch APIから取得したデータの中で、3/11~3/20までのOHLCデータだけを抜き出す」という処理を行います。
処理の流れはざっくり以下の通りになります。
1)ライブラリのインポート
2)cryptowatch APIを使ってOHLCデータを取得
3)ループ処理で3月1日~10日までのデータを順番に取得して出力する。
先ほどテストで実施したループ処理を組み合わせれば簡単にできてしまいます。
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import requests from datetime import datetime def get_data(min): response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc",params = {"periods":min,"after":1519862400}) data = response.json() return data r_min = 86400 out_data = get_data(r_min) for i in range(11,20): for j in range(0,50): if datetime(2018,3,i,0,0).strftime('%s') == str(out_data["result"][str(r_min)][j][0]): print( out_data["result"][str(r_min)][j] ) |
■実行結果
1 2 3 4 5 6 7 8 9 |
[1520726400, 1001000.0, 1015909.0, 938630, 945000, 528.43677, 525670820.0] [1520812800, 947300, 1043710.0, 914990, 1021800.0, 353.6606, 336881340.0] [1520899200, 1030000.0, 1062040.0, 942400, 979180, 127.056725, 127181340.0] [1520985600, 978500, 1015300.0, 960450, 981802, 73.22334, 72052184.0] [1521072000, 986800, 1003000.0, 850410, 880000, 214.63618, 198082770.0] [1521158400, 883990, 898057, 818680, 888000, 225.50304, 195849280.0] [1521244800, 887714, 917550, 849500, 882511, 183.19766, 160797170.0] [1521331200, 881370, 890000, 826360, 846700, 73.67776, 63623816.0] [1521417600, 843390, 879060, 777870, 872057, 163.74, 134433740.0] |
まとめ
今回はdatetime⇔unixtimeの変換について解説をしてきましたが、実際に扱ってみると簡単だったのではないでしょうか?
Pythonで仮想通貨BOTを作成する際、もしくはcryptowatch APIを使用する際には絶対に必要な考え方になりますので、しっかりと理解を深めておいて下さいね。といっても全然簡単ではないですか?
ちなみに、Pythonのプログラムの作り方の全貌についてはこちらの記事を参考にして下さい。
この記事ではPythonの使い方について解説をしていきます。 Pythonは記述方法が簡単で、人工知能のライブラリが非常に豊富な言語です。データサイエンティストの方からも人気があり、ここ数年では特に注目度の高い言語でもあ …
Pythonを基本からしっかりと身に付けたいという場合はプログラミングスクールも検討されると良いと思います。転職サポート等もあるので、心強いです。
Pythonを習得したいという二ーズは年々高くなっています。 Pythonは人口知能(AI)や機械学習を活用できる強力なライブラリを活用する事ができるので、最先端の技術を扱いたいエンジニアにとっては非常に魅力的です。社会 …
Pythonを覚えると本当に色々な事ができる様になります。Pythonで色々なものを作っていきましょう。