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()

运行结果:

TimestampPrices
0162484923393934477.195054
1162485283998034547.501905
2162485646701034429.273678
3162486006952134533.512705
4162486362304934534.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()

运行结果:

TimestampPricesDate
0162484923393934477.1950542021-06-28 03:00:33.939
1162485283998034547.5019052021-06-28 04:00:39.980
2162485646701034429.2736782021-06-28 05:01:07.010
3162486006952134533.5127052021-06-28 06:01:09.521
4162486362304934534.6809642021-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
minmaxfirstlast
Date
2021-06-2834152.18049035171.13494334477.19505434457.402932
2021-06-2934397.35580936412.01247634556.84212736189.095578
2021-06-3034252.39298836029.85103135968.99366834799.292228
2021-07-0133056.06985035171.48630535171.48630533681.582285
2021-07-0232848.17762433788.20726833655.70045033788.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)的主要内容,如果未能解决你的问题,请参考以下文章

Python监控比特币价格走势

比特币最新消息今天比特币今日人民币价格挖矿一天能赚2000元比特币美元实时图比特币今天最新实情6亿元的比特币一下归零

tableau高级绘图-tableau绘制蜡烛图

tableau高级绘图-tableau绘制蜡烛图

可视化 | Pyecharts动态绘制比特币近几年股价变迁

python 比特币价格通知