python获取比特币价格时间序列数组并绘制蜡烛图(candlestick chart)
Posted 文仙草
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python获取比特币价格时间序列数组并绘制蜡烛图(candlestick chart)相关的知识,希望对你有一定的参考价值。
一、准备工作
使用到的包:
- pandas包
- pycoingecko包,用于获取coin数据
- plotly包:用于绘图
除plotly之外,可以用mplfinance绘制蜡烛图。
#安装上述需要用到的包
! pip install pycoingecko
! pip install plotly
备注:实际场景下一般会一次性导入所需要的包,但因为本文旨在一步步拆解分析代码,所以本文代码选择在调用包的前一刻才导入包,从而更明确该包在代码中的实际用途。
二、获取比特币数据
from pycoingecko import CoinGeckoAPI
cg = CoinGeckoAPI()
#获取bitcoin过去60天的价格数据,币种为美元
bitcoin_data = cg.get_coin_market_chart_by_id(id = 'bitcoin', vs_currency = 'usd', days = 60)
查看bitcoin_data的数据情况
#查看数据结构,是字典结构
type(bitcoin_data)
#查看字典里包含的键名
bitcoin_data.keys()
运行结果:
dict_keys(['prices', 'market_caps', 'total_volumes'])
查看bitcoin_data中价格数据的情况
#查看'prices'数据情况,展示前5行数据
bitcoin_data['prices'][0:5]
运行结果:
[[1624849233939, 34477.195054010124],
[1624852839980, 34547.50190473982],
[1624856467010, 34429.27367816914],
[1624860069521, 34533.512705287736],
[1624863623049, 34534.68096374058]]
将价格数据变成dataframe格式,便于处理
#将价格数据变成dataframe格式,便于处理
import pandas as pd
data = pd.DataFrame(bitcoin_data['prices'], columns = ['Timestamp', 'Prices'])
查看一下转换后的数据情况
#查看前五行数据
data.head()
运行结果:
Timestamp | Prices | |
---|---|---|
0 | 1624849233939 | 34477.195054 |
1 | 1624852839980 | 34547.501905 |
2 | 1624856467010 | 34429.273678 |
3 | 1624860069521 | 34533.512705 |
4 | 1624863623049 | 34534.680964 |
从上面数据中可以看出,Timestamp数据格式需要调整成便于理解的时间日期格式
#使用pandas包中的to_datetime功能,将Timestamp数据格式调整为便于阅读的时间格式(datetime)
#将unit(即展示精度)设置为微秒
data['Date'] = pd.to_datetime(data['Timestamp'],unit = 'ms')
#另一种调整方法
#data['date'] = data['TimeStamp'].apply(lambda d: datetime.date.fromtimestamp(d/1000.0))
查看一下调整日期后的数据(新增了Date列)
data.head()
运行结果:
Timestamp | Prices | Date | |
---|---|---|---|
0 | 1624849233939 | 34477.195054 | 2021-06-28 03:00:33.939 |
1 | 1624852839980 | 34547.501905 | 2021-06-28 04:00:39.980 |
2 | 1624856467010 | 34429.273678 | 2021-06-28 05:01:07.010 |
3 | 1624860069521 | 34533.512705 | 2021-06-28 06:01:09.521 |
4 | 1624863623049 | 34534.680964 | 2021-06-28 07:00:23.049 |
三、绘制蜡烛图(candlestick chart)
(一)蜡烛图的简介
candlestick图按照时间序列,展示当日最大值、最小值、第一个值和最后一个值,常见于时间序列数据分析,比如股票分析等。具体示例如下:
candlestick图中每个candlestick的含义:
- 绿色代表当日价格上涨,收盘价在上,开盘价在下,说明收盘价高于开盘价;
- 红色代表当日价格下跌,收盘价在下,开盘价在上,说明开盘价高于收盘价。
(二)绘图
创建candlestick图,用于展示数据情况
#将数据按照日期进行分组,获取当日价格的最大、最小、首个和最后一个值。
#dt.date()函数表示获取datetime对象对应的date对象,应用到此处data.Date.dt.date,表示获取Date字段里的日期值
candlestick_data = data.groupby(data.Date.dt.date).agg({'Prices':['min','max','first','last']})
查看一下分组后的数据情况
#查看前五行数据
candlestick_data.head()
运行结果
Prices | ||||
---|---|---|---|---|
min | max | first | last | |
Date | ||||
2021-06-28 | 34152.180490 | 35171.134943 | 34477.195054 | 34457.402932 |
2021-06-29 | 34397.355809 | 36412.012476 | 34556.842127 | 36189.095578 |
2021-06-30 | 34252.392988 | 36029.851031 | 35968.993668 | 34799.292228 |
2021-07-01 | 33056.069850 | 35171.486305 | 35171.486305 | 33681.582285 |
2021-07-02 | 32848.177624 | 33788.207268 | 33655.700450 | 33788.207268 |
导入绘图用的包
#导入画图使用的包
import plotly.graph_objects as go
绘制candlestick图时需要注意,因为data[‘Date’]列是index列,所以设置x轴的时候不能写 x=candlestick_data[‘date’],而是写 x=candlestick_data.index
#绘制candlestick图
fig = go.Figure(data=[go.Candlestick(x=candlestick_data.index,
open=candlestick_data['Prices']['first'],
high=candlestick_data['Prices']['max'],
low=candlestick_data['Prices']['min'],
close=candlestick_data['Prices']['last'])
])
#设置图片的标题、x轴和y轴坐标
fig.update_layout(xaxis_rangeslider_visible=False, xaxis_title = '日期', yaxis_title = '价格(USD$)', title = 'Bitcoin过去30天价格变化情况-candlestick图')
#在新的页面打开图
plot(fig, filename = 'bitcoin_candlestick_graph.html')
#在本代码下方展示图
fig.show()
运行结果:
以上是关于python获取比特币价格时间序列数组并绘制蜡烛图(candlestick chart)的主要内容,如果未能解决你的问题,请参考以下文章