主页 > 最新版官网imtoken > 比特币一年翻6倍?用Python动态可视化比特币价格变化趋势

比特币一年翻6倍?用Python动态可视化比特币价格变化趋势

最新版官网imtoken 2023-02-15 07:47:51

近年来,比特币一直处于被吹捧为最佳投资产品的风口浪尖。 拥护者将加密货币视为一种类似黄金的保值手段,可以对冲通货膨胀和美元疲软。 其他人则认为,比特币的飙升只是一个必然会破灭的巨大刺激泡沫。

1.获取数据

很多网站都有比特币数据,也有很多成熟的API,所以获取数据很简单,直接调用API接口即可,以下是获取和写入数据的全部代码

导入请求

导入 json

导入 csv

导入时间

time_stamp = int(time.time())

url = f"https://web-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical?convert=USD&slug=bitcoin&time_end={time_stamp}&time_start=1367107200"

rd = 请求。 得到(网址=网址)

# 返回数据为JSON格式,使用json模块解析

co = json。 负载(rd.内容)

list1 = co['数据']['引号']

用 open('BTC.csv','w' ,encoding='utf8',newline='') 作为 f:

csvi = csv。 作家(女)

csv_head = ["日期","价格","成交量"]

csvi.writerow(csv_head)

对于列表 1 中的我:

quote_date = i["time_open"][:10]

quote_price = "{:.2f}".format(i["quote"]["USD"]["close"])

quote_volume = "{:.2f}".format(i["quote"]["USD"]["volume"])

csvi.writerow([quote_date, quote_price, quote_volume])

执行后,当前目录会生成BTC.csv数据文件

sitebishijie.com 比特币价格今日的价格_比特币中国莱特币价格走势图_比特币初始价格

2. BTC价格变化动态可视化

首先导入需要的包和相关设置

比特币中国莱特币价格走势图_比特币初始价格_sitebishijie.com 比特币价格今日的价格

将熊猫导入为 pd

将 matplotlib 导入为 mpl

从 matplotlib 导入 cm

将 numpy 导入为 np

将 matplotlib.pyplot 导入为 plt

导入 matplotlib.ticker 作为代码

将 matplotlib.animation 导入为动画

从 IPython.display 导入 HTML

从日期时间导入日期时间

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

plt.rc('axes',axisbelow=True)

mpl.rcParams['animation.embed_limit'] = 2**128

plt.rcParams[]两句用来设置中文的显示

plt.rc('axes',axisbelow=True)的作用是设置外观要求,即坐标轴放在底部。

mpl.rcParams['animation.embed_limit'] = 2**128 这句话是用来生成动画的,因为动画默认的最大体积是20971520.bytes。 如果需要调整生成动画的最大音量,需要更改该参数。

接下来用数据查看前5行和后5行

sitebishijie.com 比特币价格今日的价格_比特币中国莱特币价格走势图_比特币初始价格

比特币中国莱特币价格走势图_sitebishijie.com 比特币价格今日的价格_比特币初始价格

初看表就知道,2013年初的价格在100美元左右,而现在21年的时间,价格已经飙升到5万左右。 什么时候飙升的这么快,我们通过动态区域可视化的方式来探究一下。

在可视化之前,需要对数据进行处理,因为我们的原始数据是这样的

比特币中国莱特币价格走势图_比特币初始价格_sitebishijie.com 比特币价格今日的价格

是csv格式,Date字段是string类型,而用matplotlib在Python中画时间序列图需要datetime时间戳格式才好看,所以我们用下面代码转换

df = pd.read_csv('BTC.csv')

df['date']=[datetime.strptime(d, '%Y/%m/%d').date() for d in df['date']]

比特币中国莱特币价格走势图_比特币初始价格_sitebishijie.com 比特币价格今日的价格

让我们制作一个静态面积图。 如果使用单色填充,可以使用如下代码

跨度=180

N_跨度=0

df_temp=df.loc[N_Span*跨度:(N_Span+1)*跨度,:]

df_temp.head(5)

图=plt.图(图大小=(6,4),dpi=100)

plt.subplots_adjust(top=1,bottom=0,left=0,right=0.9,hspace=0,wspace=0)

plt.fill_between(df_temp.date.values, y1=df_temp.price.values, y2=0, alpha=0.75, facecolor='r', linewidth=1, edgecolor='none', zorder=1)

plt.plot(df_temp.date, df_temp.price, color='k', zorder=2)

plt.scatter(df_temp.date.values[-1], df_temp.price.values[-1], color='white',s=150,edgecolor='k',linewidth=2,zorder=3)

plt.text(df_temp.date.values[-1], df_temp.price.values[-1]*1.18, s=np.round(df_temp.price.values[-1],1), size=10,ha ='中心', va='顶部')

plt.ylim(0, df_temp.price.max()*1.68)

plt.xticks(ticks=df_temp.date.values[0:Span+1:30],labels=df_temp.date.values[0:Span+1:30],rotation=0)

plt.边距(x=0.01)

ax = plt.gca()#获取边框

ax.spines['top'].set_color('none') # 将上面的'spine'设置为无色

ax.spines['right'].set_color('none') # 将上面的'spines'设置为无色

ax.spines['left'].set_color('none') # 将上面的'spine'设置为无色

plt.grid(axis="y",c=(217/256,217/256,217/256),linewidth=1) #设置网格线

铂。 展示()

其中Span设置的价格是多少天,这里我们用200天。 N_Span代表权重;

df_temp=df.loc[N_Span*Span:(N_Span+1)*Span,:]表示选择数据到第179行,即180天。

plt.fill_between() 是用单色——红色填充

得到如下效果

比特币中国莱特币价格走势图_比特币初始价格_sitebishijie.com 比特币价格今日的价格

比特币初始价格_比特币中国莱特币价格走势图_sitebishijie.com 比特币价格今日的价格

但是颜色填充总感觉不够好,所以下面使用渐变颜色填充,并使用plt.bar()函数实现Spectral_r颜色映射。 代码如下:

跨度日期=180

Num_Date =360 #结束日期

df_temp=df.loc[Num_Date-Span_Date: Num_Date,:] #选择Num_Date-Span_Date到Num_Date这180天的数据

颜色 = cm.Spectral_r(df_temp.price / float(max(df_temp.price)))

图=plt.图(图大小=(6,4),dpi=100)

plt.subplots_adjust(top=1,bottom=0,left=0,right=0.9,hspace=0,wspace=0)

plt.bar(df_temp.date.values,df_temp.price.values,color=colors,width=1,align="center", zorder=1)

plt.plot(df_temp.date, df_temp.price, color='k', zorder=2)

plt.scatter(df_temp.date.values[-1], df_temp.price.values[-1], color='white',s=150,edgecolor='k',linewidth=2,zorder=3)

plt.text(df_temp.date.values[-1], df_temp.price.values[-1]*1.18, s=np.round(df_temp.price.values[-1],1), size=10, ha ='中心', va='顶部')

plt.ylim(0, df_temp.price.max()*1.68)

plt.xticks(ticks=df_temp.date.values[0: Span_Date +1:30],labels=df_temp.date.values[0:Span_Date +1:30],rotation=0)

plt.边距(x=0.01)

ax = plt.gca()#获取边框

ax.spines['top'].set_color('none') # 将上面的'spine'设置为无色

ax.spines['right'].set_color('none') # 将上面的'spines'设置为无色

ax.spines['left'].set_color('none') # 将上面的'spine'设置为无色

plt.grid(axis="y",c=(217/256,217/256,217/256),linewidth=1) #设置网格线

铂。 展示()

这里的数据过滤稍有不同,这里Span_Date设置的是初始时间,这里设置为180,表示从开始日期算起180天。

Num_Date 设置结束时间。

df_temp=df.loc[Num_Date-Span_Date: Num_Date,:]使用loc函数过滤180天到结束日期的数据。

效果如下:

sitebishijie.com 比特币价格今日的价格_比特币中国莱特币价格走势图_比特币初始价格

比特币中国莱特币价格走势图_比特币初始价格_sitebishijie.com 比特币价格今日的价格

3.动态可视化

最后再动一下这张图,先把刚才画的部分封装一下

def draw_areachart(Num_Date):

跨度日期=180

斧头。 清除()

如果 Num_Date

df_temp=df.loc[0:Num_Date,:]

df_span=df.loc[0:Span_Date,:]

colors = cm.Spectral_r(df_span.price.values / float(max(df_span.price.values)))

plt.bar(df_temp.date.values,df_temp.price.values,color=colors,width=1.5,align="center", zorder=1)

plt.plot(df_temp.date, df_temp.price, color='k', zorder=2)

plt.scatter(df_temp.date.values[-1], df_temp.price.values[-1], color='white',s=150,edgecolor='k',linewidth=2,zorder=3)

plt.text(df_temp.date.values[-1], df_temp.price.values[-1]*1.18, s=np.round(df_temp.price.values[-1],1),

size=10, ha='center', va='top')

plt.ylim(0, df_span.price.max()*1.68)

plt.xlim(df_span.date.values[0], df_span.date.values[-1])

plt.xticks(ticks=df_span.date.values[0:Span_Date+1:30],labels=df_span.date.values[0:Span_Date+1:30],rotation=0,fontsize=9)

别的:

df_temp=df.loc[Num_Date-Span_Date:Num_Date,:]

颜色 = cm.Spectral_r(df_temp.price / float(max(df_temp.price)))

plt.bar(df_temp.date.values[:-2],df_temp.price.values[:-2],color=colors[:-2],width=1.5,align="center",zorder=1)

plt.plot(df_temp.date[:-2], df_temp.price[:-2], color='k',zorder=2)

plt.scatter(df_temp.date.values[-4], df_temp.price.values[-4], color='white',s=150,edgecolor='k',linewidth=2,zorder=3)

plt.text(df_temp.date.values[-1], df_temp.price.values[-1]*1.18, s=np.round(df_temp.price.values[-1],1),

size=10, ha='center', va='top')

比特币中国莱特币价格走势图_比特币初始价格_sitebishijie.com 比特币价格今日的价格

plt.ylim(0, df_temp.price.max()*1.68)

plt.xlim(df_temp.date.values[0], df_temp.date.values[-1])

plt.xticks(ticks=df_temp.date.values[0:Span_Date+1:30],labels=df_temp.date.values[0:Span_Date+1:30],rotation=0,fontsize=9)

plt.边距(x=0.2)

ax.spines['top'].set_color('none') # 将上部的 'spine' 设置为红色

ax.spines['right'].set_color('none') # 将上面的'spines'设置为无色

ax.spines['left'].set_color('none') # 将上面的'spine'设置为无色

plt.grid(axis="y",c=(217/256,217/256,217/256),linewidth=1) #设置网格线

plt.text(0.01, 0.95,"BTC平均价格($)", transform=ax.transAxes, size=10, weight='light', ha='left')

ax.text(-0.07, 1.03, 'BTC 价格从 2013 年到 2021 年的变化', transform=ax.transAxes, size=17, weight='light', ha='left')

图,ax = plt.subplots(figsize=(6,4),dpi=100)

plt.subplots_adjust(top=1,bottom=0.1,left=0.1,right=0.9,hspace=0,wspace=0)

draw_areachart(150)

然后使用matplotlib包的animation.FuncAnimation()函数,再调用上面写的draw_areachart(Num_Date)函数。

输入参数Num_Date与静态可视化中提到的日期相同,赋值为np.arange(0,df.shape[0],1)。

最后使用Ipython包的HTML()函数将动画转换成动画页面进行演示。 代码如下:

将 matplotlib.animation 导入为动画

从 IPython.display 导入 HTML

图,ax = plt.subplots(figsize=(6,4),dpi=100)

plt.subplots_adjust(左=0.12比特币初始价格,右=0.98,上=0.85,下=0.1,hspace=0,wspace=0)

animator = animation.FuncAnimation(fig, draw_areachart, frames=np.arange(0,df.shape[0],1),interval=100)

HTML(animator.to_jshtml())

函数 FuncAnimation(fig, func, frames, init_func, interval, blit) 是一个绘制动画的函数。 其参数如下:

“”

这是最终效果

可以看出,在过去的一年里比特币初始价格,由于机构兴趣的增加,比特币上涨了6倍多,最高突破58000美元/币。 当然,看得出来摔的也很吓人。 关于比特币,你怎么看? ?返回搜狐查看更多