一、准备工作
使用到的包:
- pandas包
- pycoingecko包,用于获取coin数据
- plotly包:用于绘图
除plotly之外,可以用mplfinance绘制蜡烛图。
! pip install pycoingecko
! pip install plotly
备注:实际场景下一般会一次性导入所需要的包,但因为本文旨在一步步拆解分析代码,所以本文代码选择在调用包的前一刻才导入包,从而更明确该包在代码中的实际用途。
二、获取比特币数据
from pycoingecko import CoinGeckoAPI
cg = CoinGeckoAPI()
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中价格数据的情况
bitcoin_data['prices'][0:5]
运行结果:
[[1624849233939, 34477.195054010124],
[1624852839980, 34547.50190473982],
[1624856467010, 34429.27367816914],
[1624860069521, 34533.512705287736],
[1624863623049, 34534.68096374058]]
将价格数据变成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数据格式需要调整成便于理解的时间日期格式
data['Date'] = pd.to_datetime(data['Timestamp'],unit = 'ms')
查看一下调整日期后的数据(新增了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图,用于展示数据情况
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
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'])
])
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()
运行结果:
|