3.4 绘制BTC(比特币)和ETH(以太币)的价格走势图
在本节的内容中,将远程获取当前国际市场中BTC(比特币)和ETH(以太币)的实时价格,并绘制BTC(比特币)和ETH(以太币)的价格走势曲线图。
3.4.1 抓取数据
编写实例文件Assignment_Step1.py,功能是抓取权威网站中BTC和ETH的报价数据,并打印输出显示BTC和ETH的当前价格。
源码路径:codes\3\3-4\Crypto-Analysis\Assignment_Step1.py
import requests
def price(symbol, comparison_symbols=['USD'], exchange=''):
url = 'https://min-api.cryptocompare.com/data/price?fsym={}&tsyms={}'\
.format(symbol.upper(), ','.join(comparison_symbols).upper())
if exchange:
url += '&e={}'.format(exchange)
page = requests.get(url)
data = page.json()
return data
print("当前BTC的美元价格为: "+str(price('BTC')))
print("当前ETH的美元价格为: "+str(price('ETH')))
2020年5月13日执行本实例后会输出:
当前BTC的美元价格为: {'USD': 8910.06}
当前ETH的美元价格为: {'USD': 190.47}
3.4.2 绘制BTC/美元价格曲线
编写实例文件Assignment_Step2.py,功能是根据当前的BTC价格,使用库Matplotlib绘制BTC/美元价格曲线图。
源码路径:codes\3\3-4\Crypto-Analysis\Assignment_Step2.py
from Assignment_Step1 import price
import datetime
import matplotlib.pyplot as plt
x=[0]
y=[0]
fig = plt.gcf()
fig.show()
fig.canvas.draw()
plt.ylim([0, 20000])
i=0
while(True):
data = price('BTC')
i+=1
x.append(i)
y.append(data['USD'])
plt.title("BTC vs USD, Last Update is: "+str(datetime.datetime.now()))
plt.plot(x,y)
fig.canvas.draw()
plt.pause(1000)
执行后的效果如图3-37所示。
图3-37 执行效果
3.4.3 绘制BTC和ETH的历史价格曲线图
编写实例文件Assignment_Step3.py,功能是首先爬取权威网站中的BTC和ETH的历史价格数据,然后使用库Matplotlib和pandas绘制BTC和ETH的历史价格曲线图。
源码路径:codes\3\3-4\Crypto-Analysis\Assignment_Step3.py
import requests
import datetime
import pandas as pd
import matplotlib.pyplot as plt
def hourly_price_historical(symbol, comparison_symbol, limit, aggregate, exchange=''):
url = 'https://min-api.cryptocompare.com/data/histohour?fsym={}&tsym={}&limit={}&aggregate={}'\
.format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
if exchange:
url += '&e={}'.format(exchange)
print(url)
page = requests.get(url)
data = page.json()['Data']
df = pd.DataFrame(data)
df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
return df
def plotchart(axis, df, symbol, comparison_symbol):
axis.plot(df.timestamp, df.close)
df1 = hourly_price_historical('BTC','USD', 2000, 1)
df2 = hourly_price_historical('ETH','USD', 2000, 1)
f, axarr = plt.subplots(2)
plotchart(axarr[0],df1,'BTC','USD')
plotchart(axarr[1],df2,'ETH','USD')
plt.show()
执行后的效果如图3-38所示。
图3-38 执行效果