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

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

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

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

Q&A

解決済

2回答

574閲覧

FTX(暗号資産取引所)のヒストリカルデータ取得の際のコードを省略したい

Lynx111

総合スコア2

Python 3.x

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

0グッド

0クリップ

投稿2022/07/01 11:44

FTX(暗号資産取引所)のヒストリカルデータを取得したいのですが、スポットで銘柄を指定する場合、私のやり方だと1つ1つ同じ作業を繰り返していて、無駄にコードが長くなっているのですが、繰り返しの部分を省略して、コードを短くしたいです。下記が実際のコードになります。

Python jupyter

1import datetime 2import requests 3import pandas as pd 4 5btc = requests.get('https://ftx.com/api/markets/BTC/USD/candles?resolution=3600&start=1641013200.0').json() 6btc = pd.DataFrame(btc['result']) 7btc['date'] = pd.to_datetime(btc['startTime']) 8btc = btc.set_index('date') 9btc = btc.drop(columns=['startTime', 'time', 'open', 'high', 'low', 'volume']) 10btc.columns = ["btc_close"] 11 12eth = requests.get('https://ftx.com/api/markets/ETH/USD/candles?resolution=3600&start=1641013200.0').json() 13eth = pd.DataFrame(eth['result']) 14eth['date'] = pd.to_datetime(eth['startTime']) 15eth = eth.set_index('date') 16eth = eth.drop(columns=['startTime', 'time', 'open', 'high', 'low', 'volume']) 17eth.columns = ["eth_close"] 18 19df = pd.concat([btc, eth], axis=1) 20df

実行結果↓
イメージ説明

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

既に解決済みですが、以下は pandas.read_json を使う方法です。

python

1import pandas as pd 2 3url = 'https://ftx.com/api/markets/{}/USD/candles?resolution=3600&start=1641013200.0' 4df = pd.concat([ 5 pd.read_json(url.format(i))['result'].apply(pd.Series)[['startTime', 'close']] 6 .set_axis(['date', f'{i.lower()}_close'], axis=1).set_index('date') 7 for i in ('BTC', 'ETH')], axis=1) 8 9df.index = pd.DatetimeIndex(df.index) 10print(df)

投稿2022/07/01 13:49

melian

総合スコア19703

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

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

Lynx111

2022/07/02 04:26

ありがとうございます。やっぱりいろいろなやり方があるのですね!
guest

0

ベストアンサー

無駄にコードが長くなっているのですが、繰り返しの部分を省略して、コードを短くしたいです

共通している部分を抜き出して、変化する部分を変数にしてループ処理すれば良いです。

Python

1import datetime 2import requests 3import pandas as pd 4 5names = ['BTC', 'ETH'] 6dfs = [] 7 8for name in names: 9 df = requests.get(f'https://ftx.com/api/markets/{name}/USD/candles?resolution=3600&start=1641013200.0').json() 10 df = pd.DataFrame(df['result']) 11 df['date'] = pd.to_datetime(df['startTime']) 12 df = df.set_index('date') 13 df = df.drop(columns=['startTime', 'time', 'open', 'high', 'low', 'volume']) 14 df.columns = [f'{name}_close'] 15 dfs.append(df) 16 17df = pd.concat(dfs, axis=1)

投稿2022/07/01 12:01

meg_

総合スコア10579

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

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

Lynx111

2022/07/01 12:16

ありがとうございます!urlに対して、ループ処理を行う発想はなかったです。とても勉強になりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問