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

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

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

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

Q&A

解決済

2回答

1183閲覧

python matplotlibのエラー

paopao7

総合スコア29

Python

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

0グッド

0クリップ

投稿2021/10/09 22:47

前提・実現したいこと

pythonで以下のサイトを参考にbot作成を勉強中です。(https://www.mamu-trade.com/use-pandas/)

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

python

1Traceback (most recent call last): 2 File "/Users/tsuyoshi/bot/design_test.py", line 109, in <module> 3 plot(df) 4 File "/Users/tsuyoshi/bot/design_test.py", line 91, in plot 5 plt.plot( df.index, df.close ) # X軸、Y軸の値を指定 6 File "/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2796, in plot 7 is not None else {}), **kwargs) 8 File "/usr/local/lib/python3.7/site-packages/matplotlib/axes/_axes.py", line 1667, in plot 9 self.add_line(line) 10 File "/usr/local/lib/python3.7/site-packages/matplotlib/axes/_base.py", line 1902, in add_line 11 self._update_line_limits(line) 12 File "/usr/local/lib/python3.7/site-packages/matplotlib/axes/_base.py", line 1924, in _update_line_limits 13 path = line.get_path() 14 File "/usr/local/lib/python3.7/site-packages/matplotlib/lines.py", line 1027, in get_path 15 self.recache() 16 File "/usr/local/lib/python3.7/site-packages/matplotlib/lines.py", line 670, in recache 17 x = _to_unmasked_float_array(xconv).ravel() 18 File "/usr/local/lib/python3.7/site-packages/matplotlib/cbook/__init__.py", line 1390, in _to_unmasked_float_array 19 return np.asarray(x, float) 20 File "/usr/local/lib/python3.7/site-packages/numpy/core/_asarray.py", line 85, in asarray 21 return array(a, dtype, copy=False, order=order) 22TypeError: float() argument must be a string or a number, not 'Timestamp'

該当のソースコード

apiの部分は消しております。

from datetime import datetime from rich import print import math import pybybit import pandas as pd import numpy as np from tqdm import tqdm from matplotlib import pyplot as plt #--------------------設定項目-------------------- apis = bybit = pybybit.API(*apis, testnet = False) symbol = "BTCUSD" chart_min = 60 # 時間軸(1 3 5 15 30 60 120 240 360 720 ) start = '2021/01/01 09:00' # ローソク足取得開始時刻 get_days = 30 # 取得数[日] csv_path = "./60min_bybit_BTCUSD_2021-01-01 to 2021-01-31.csv" #====================価格データ取得(APIから)=================== def get_price_from_API(chart_min,start): get_start = int(datetime.strptime(start,'%Y/%m/%d %H:%M').timestamp()) # タイムスタンプ変換 price = [] req_times = math.ceil(1440/chart_min*get_days/200) #200*n本のローソク足を取得して、price[]に入れる for o in tqdm(range(req_times), desc = "{}分足データ取得中".format(chart_min)): # ()内の回数だけデータを取得 data = bybit.rest.inverse.public_kline_list( symbol = symbol, interval = chart_min, from_ = get_start ).json() #priceに取得したデータを入れる for i in data["result"]: price.append(i) #200本x足の長さ分だけタイムスタンプを進める get_start += 200*60*chart_min df = pd.DataFrame(price) df.open_time = pd.to_datetime(df.open_time*10**9,) df = df.set_index('open_time').tz_localize('UTC').tz_convert('Asia/Tokyo') df.drop(["symbol","interval","volume","turnover"],axis = 1,inplace=True) df = df.astype('float') return df[:int(1440/chart_min*get_days)] #====================ファイル出力=================== def output_file(df): # 表をCSVで出力 df.to_csv("./{0}min_bybit_BTCUSD_{1} to {2}.csv".format(chart_min,df.index[0].strftime('%Y-%m-%d'),df.index[-1].strftime('%Y-%m-%d'))) #====================価格データ取得(CSVから)=================== def get_price_from_csv(csv_path): df = pd.read_csv(csv_path).set_index('open_time') df.index = pd.to_datetime(df.index) return df #====================テーブル作成=================== def create_table(df): # MAの計算 df["7MA"] = round(df.close.rolling(7).mean(),2) df["28MA"] = round(df.close.rolling(28).mean(),2) # 売買シグナルの計算 df["Buy"] = np.where((df["7MA"].shift(1)<df["28MA"].shift(1))&(df["7MA"]>df["28MA"]),True,False) df["Sell"] = np.where((df["7MA"].shift(1)>df["28MA"].shift(1))&(df["7MA"]<df["28MA"]),True,False) # 注文・ポジションの計算 df["order"] = 0 df["order"] = df.order.mask(df.Buy==True,1) df["order"] = df.order.mask(df.Sell==True,-1) df["pos"] = df.order.cumsum() # 損益の計算 df["accrue_return"] = df.close.diff(-1)*-1 df["profit"] = df.accrue_return*df.pos df["pnl"] = df.profit.cumsum() return df #====================グラフ作成=================== def plot(df): plt.figure() # グラフの表示エリアを作成 plt.suptitle("Bybit [{0}min] {1} to {2}" .format(chart_min,df.index[0].strftime("%m/%d %H:%M"),df.index[-1].strftime("%m/%d %H:%M"))) # 終値チャート plt.subplot(2,1,1) plt.plot( df.index, df.close ) # X軸、Y軸の値を指定 plt.ylabel("{}".format(symbol), fontsize=25) # Y軸のラベル名 # 損益グラフ plt.subplot(2,1,2) plt.plot( df.index, df.pnl) # X軸、Y軸の値を指定 plt.xlabel("open_time", fontsize=25) # X軸のラベル名 plt.ylabel("pnl", fontsize=25) # Y軸のラベル名 plt.show() # グラフの表示 #====================メイン処理=================== # ohlc = get_price_from_API(chart_min,start) # output_file(df) ohlc = get_price_from_csv(csv_path) df = create_table(ohlc) print(df) plot(df)

試したこと

グラフ作成のplot関数に問題があるようです。https://stackoverflow.com/questions/47404653/pandas-0-21-0-timestamp-compatibility-issue-with-matplotlib
https://stackoverflow.com/questions/64841082/segmentation-fault-11-python-after-upgrading-to-os-big-sur
この二つのサイトを参考にしてみたのですが、
pd.plotting.register_matplotlib_converters()
を入れると、segmentation fault 11というエラーが出てしまいます。
matplotlibをインストールしなおしても変化はありません。

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

MacのバージョンはBig Sur
pandas 1.3.3
matplotlib 3.4.3

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

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

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

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

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

guest

回答2

0

自己解決

Pythonのバージョンが原因でした。Python3.8.8で動きました。

投稿2021/10/10 05:42

paopao7

総合スコア29

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

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

0

python

1df = df.astype('float')

はすべての列をfloatに変換しようとします。
しかし、df['open_time']はdatetime型なのでfloatに変換できないというエラーが起きています。

python

1df['A'] = df['A'].astype('float') 2df['B'] = df['B'].astype('float') 3df['B'] = df['B'].astype('float')

のように、floatに変換したい列だけをfloatに変換しましょう。
この方法で今出ているエラーはなくなります。

しかし、データが提示されていないので、最後まで動き、期待している結果がでるかどうかはわかりません。

投稿2021/10/09 23:24

ppaul

総合スコア24670

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

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

paopao7

2021/10/09 23:59

グラフ作成の関数を書くまで(df = df.astype('float')はある)は動くのですが、それを書いてからエラーが出ます。それでもdf = df.astype('float')が原因となるのでしょうか。
paopao7

2021/10/10 00:00

csvファイルは open_time,open,high,low,close 2021-01-01 09:00:00+09:00,28955.0,29064.5,28740.0,29044.5 2021-01-01 10:00:00+09:00,29044.5,29541.0,29006.5,29455.5 2021-01-01 11:00:00+09:00,29455.5,29500.0,29172.0,29276.0 2021-01-01 12:00:00+09:00,29276.0,29400.0,29229.5,29345.5 2021-01-01 13:00:00+09:00,29345.5,29443.0,29122.0,29282.0 2021-01-01 14:00:00+09:00,29282.0,29283.0,29157.5,29252.5 2021-01-01 15:00:00+09:00,29252.5,29326.0,29176.0,29243.0 このようになっております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問