質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3137閲覧

Python UnixTime 変換

ebr40112

総合スコア7

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/03/28 05:14

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
https://qiita.com/shion1118/items/2979e1cd465a59aeb95c を参考に仮想通貨の予測を行おうとなれないpythonを使用していると、UNIXtimeの変換で躓きました。

発生している問題・エラーメッセージ

UNIXtimeを変換できない

エラーメッセージ File "C:/Users/kosuke/.spyder-py3/temp.py", line 22, in <module> time_stamp = dt.datetime.fromtimestamp(time_stamp) TypeError: only length-1 arrays can be converted to Python scalars

該当のソースコード

python

1import requests 2import json 3import datetime as dt 4import pandas as pd 5import numpy as np 6import matplotlib.pyplot as plt 7 8startDate="2018-03-23 00:00:00" 9endDate="2018-03-23 23:00:00" 10startDate = dt.datetime.strptime(startDate, '%Y-%m-%d %H:%M:%S') 11endDate = dt.datetime.strptime(endDate, '%Y-%m-%d %H:%M:%S') 12 13startTimestamp = startDate.timestamp() 14endTimestamp = endDate.timestamp() 15 16query = {"periods": "3600", "after": str(int(startTimestamp)), "before": str(int(endTimestamp))} 17res = json.loads(requests.get("https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc", params=query).text)["result"]["3600"] 18res = np.array(res) 19 20time_stamp = res[:, 0].reshape(len(res), 1) 21time_stamp = dt.datetime.fromtimestamp(time_stamp) 22close_price = res[:, 4].reshape(len(res), 1) 23 24tmp_data = np.hstack((time_stamp, close_price)) 25data = pd.DataFrame(tmp_data, columns={"y", "ds"}) 26data.to_csv("C:/pythondata/bitflyer-" + str(int(startTimestamp)) + "-" + str(int(endTimestamp)) + ".csv", index=False) 27 28data = pd.read_csv("C:/pythondata/bitflyer-1521730800-1521813600.csv") 29data.plot() 30plt.show()

試したこと

time_stamp = dt.datetime.fromtimestamp(time_stamp)の部分をコメントアウトするとエラーを吐かず、とりあえずグラフが表示されるのでここの変換がうまくいっていないと思われます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

pd.to_datetimeを使うか、dt.datetime.fromtimestampを指定する形にすれば、良いかと。

あとでGittaの記事の方にもコメントしておきますが、Gittaの元ソースコードには列の並び順が変わるという再現性の低いバグがあります。

Python

1time_stamp = res[:, 0].reshape(len(res), 1) 2# 1,↓をコメントアウト 3#time_stamp = dt.datetime.fromtimestamp(time_stamp) 4close_price = res[:, 4].reshape(len(res), 1) 5 6tmp_data = np.hstack((time_stamp, close_price)) 7# 2,dictからlistに変更(dictは並び順を保証していない元バグ) 8data = pd.DataFrame(tmp_data, columns=['ds', 'y']) 9# 3,↓の行を追加 10data['ds'] = data['ds'].apply(lambda x: dt.datetime.fromtimestamp(x)) 11data.to_csv("C:/pythondata/bitflyer-" + str(int(startTimestamp)) + "-" + str(int(endTimestamp)) + ".csv", index=False)

◇参考情報
PythonのDataFrameでまとめて日付のデータ操作したい
Pythonの UTC ⇔ JST、文字列(UTC) ⇒ JST の変換とかのメモ

◇余談
1,Gittaの記事の出力と合わせていますが、列dsの内容にタイムゾーンが付いていないので、
タイムゾーンを着けたい時は以下のコードにしてくださいな。

Python

1from pytz import timezone 2 3data['ds'] = data['ds'].apply(lambda x: dt.datetime.fromtimestamp(x,tz=timezone('Asia/Tokyo')))

2,テスト性が悪いので、適度に関数化してくださいな。

投稿2018/03/28 18:18

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージに答えが書いてありますよね。
only length-1 arrays can be converted to Python scalars
といわれているのだから、単純値を関数に渡しように修正が必要です。リスト内包表記を使うか、forループを回すかですね。

投稿2018/03/28 05:18

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ebr40112

2018/03/28 06:02

#time_stamp = res[:, 0].reshape(len(res), 1) #time_stamp = dt.datetime.fromtimestamp(time_stamp) ↓ time_stamp = res[:, 0] newary = [] for x in time_stamp: newary.append(dt.datetime.fromtimestamp(time_stamp[x])) これでは動かないのですがappendの中身はどのように書くのが正しいのでしょうか? pythonになれていなくて簡単な質問でをしてしまっているとは思うのですがご教授いただきたいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問