截至2021年3月,有8,000多种加密货币,因此一目了然地跟踪所有价格的发展可能是具有挑战性的。幸运的是,像coin360这样的网站以树形图的形式提供了加密货币价格发展的简洁可视化。树状图通过使用可变大小的矩形以嵌套结构的形式显示比例价格数据,从而提供了所有加密货币的快速概览。
对此概念感兴趣,我决定尝试使用Python创建我自己的版本的树形图以跟踪加密价格的想法。此树形图教程不仅限于显示加密信息,还可以应用于几乎任何其他数据。
为了最大程度地提高Python代码的可移植性,本教程使用Google Colab创建,因此笔记本可以在任何Chrome浏览器上运行。
本教程的3个主要组成部分是:
如何使用CoinMarketCapAPI调用和检索最近24小时内的加密货币价格
使用库Squarify在Python中绘制静态树图
使用库Plotly在Python中绘制交互式树图
从CoinMarketCap检索加密数据
免责声明:CoinMarketCap数据的免费版本仅供个人使用,出于商业目的,请参阅CMC的定价计划。
首先,如果您还没有的话,您需要在此处注册一个开发者帐户。登录后,导航至仪表板并复制唯一的API密钥。
CoinMarketCap截图
通过使用下面显示的代码片段,您应该能够从CoinMarketCap调用前10个加密数据。可以调整参数以包括更多或更少的数据以及所使用的货币。切记在第15行中替换您的API密钥。此代码段在发布时是最新的,有关将来的任何更新,请参阅官方文档。
#This example uses Python 2.7 and the python-request library.
from requests import Request, Session
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
import json
url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
parameters = {
'start':'1',
'limit':'10',
'convert':'USD'
}
headers = {
'Accepts': 'application/json',
'X-CMC_PRO_API_KEY': '#REPLACE YOUR API KEY HERE#',
}
session = Session()
session.headers.update(headers)
try:
response = session.get(url, params=parameters)
data = json.loads(response.text)
print(data)
except (ConnectionError, Timeout, TooManyRedirects) as e:
print(e)
API返回的数据为JSON格式,因此需要以pythonic数据框格式进行规范化(请参见第4行)。还对数据进行过滤,以仅保留与树图相关的几列,即加密货币的名称,排名,价格及其关联的市值(请参阅第5行)。
import pandas as pd
#normalize the data into dataframe format
df = pd.json_normalize(data["data"])
cols_to_keep = ['name','symbol','cmc_rank','quote.USD.price','quote.USD.percent_change_24h','quote.USD.market_cap',]
df_final = df[cols_to_keep]
#rename columns
df_final.columns = ['name','symbol','cmc_rank','USD_price','USD_percent_change_24h','USD_market_cap',]
#uncomment below to print the table
#df_final
创建一个静态树图
使用Squarify创建的树图
Squarify是树图布局算法的库实现。它通过计算数据大小并返回矩形的一系列坐标来工作,然后使用绘制这些坐标MatPlotLib。可以使用颜色编码的参数来可视化变化的规模,在此示例中,其是过去24小时内价格变化的百分比。但是,不利的一面是,目前尚无直接实现可根据变化的矩形的大小来缩放标签的方法。Python代码如下。
import matplotlib
import matplotlib.pyplot as plt
#!pip install squarify
import squarify
#load data
sizes=df_final["USD_market_cap"]
label=df_final["name"]
# color scale on the price development
# min and max values
cmap = matplotlib.cm.RdYlGn #RedYellowGreen
mini=min(df_final["USD_percent_change_24h"])
maxi=max(df_final["USD_percent_change_24h"])
norm = matplotlib.colors.Normalize(vmin=mini, vmax=maxi)
colors = [cmap(norm(value)) for value in df_final["USD_percent_change_24h"]]
# labels in treemap squares
labels = ["%sn%d USDn%0.2f%%" % (label) for label in zip(df_final.symbol, df_final["USD_price"], df_final["USD_percent_change_24h"])]
# make plot
fig = plt.figure(figsize=(20, 10))
ax = fig.add_subplot(111, aspect="auto")
ax = squarify.plot(df_final["USD_market_cap"], color=colors, label=labels, alpha=.8)
ax.set_title("Cryptomarket price change last 24 hoursn", fontsize=18)
# plot title and color bar
img = plt.imshow([df_final["USD_percent_change_24h"]], cmap=cmap)
img.set_visible(True)
fig.colorbar(img, orientation="vertical", shrink=.96)
fig.text(.76, .9, "Percentage change", fontsize=14)
# if you want to export the figure
#plt.savefig("cmc_treemaps.png")
plt.show()
说明:
第1至4行:导入并安装(如果需要)所需的库
第6-8行:加载树形图的数据
第10-16行:对价格变化百分比应用颜色编码的缩放比例
第18-19行:为要显示的文本创建字符串标签
第21–25行:绘制树形图
第27–31行:在侧面应用颜色条
第33–35行:显示树状图,并带有将其导出为png图像的选项
创建交互式树形图
扫码查看交互式树形图效果
绘制树图的一种更复杂的方法是将其激活!使用Plotly可以创建一个交互式树状图,当您在每个矩形块上悬停时,它会显示有关每个矩形块的详细信息。Plotly在后台为您完成了大部分工作,从而导致与Squarify相比,更少的代码行更加精简和优雅。
#!pip install --upgrade plotly
import plotly.graph_objects as go
import plotly.express as px
fig = px.treemap(df_final,
path=['name'],
values='USD_market_cap',
color_continuous_scale='RdYlGn',
color='USD_percent_change_24h',
)
fig.update_layout(title_text='Cryptomarket price change last 24 hours', title_x=0.5)
fig.show()
说明:
第1至3行:导入并安装所需的库
第5-10行:绘制树形图
第11行:在树形图上添加标题
第12行:显示树状图
如何在媒体/网站中嵌入交互式树图
想知道您上面看到的嵌入式树形图是如何完成的?您可以使用Plotly Studio轻松地做到这一点,而好处是您可以直接将Google Colab笔记本与Plotly Studio关联(您需要有一个帐户)。只需在下面添加此代码段,然后使用您的Plotly用户名和API密钥即可完成。
#To push your GC plot to Plotly Studio automatically
#!pip install chart_studio
import chart_studio
import chart_studio.plotly as py
username = '#REPLACE YOUR USERNAME HERE#' # your username
api_key = '#REPLACE YOUR API KEY HERE#' # your api key - go to profile > settings > regenerate key
chart_studio.tools.set_credentials_file(username=username, api_key=api_key)
py.plot(fig, filename = 'cmc_treemap', auto_open=True)
将您的Plotly树图推入/同步到Plotly Studio后,只需将链接复制到Plotly Studio,然后将该链接粘贴到Medium中作为嵌入式链接,然后按Enter键,就可以了!
如何在网站上上插入嵌入式链接
总结
通过可视化不同矩形和颜色的层次结构数据,树形图是讲述故事的好方法。当您要按大小顺序快速可视化大量数据,以及可以选择对第二维使用不同色调和颜色强度的选项时,此功能非常有效。但是,树形图的一个缺点是进行精确的定量比较可能具有挑战性。
使用Tableau绘制的条形图
只需看一下上面的两种可视化效果,树状图中的瑞典和罗马尼亚之间的细微差别几乎是看不到的,但是当以条形图显示时,细微的差异会变得更加明显。
底线:在快速概述大量层次结构或分类数据时,最好使用树状图-但是,请考虑使用更量化的可视化效果,例如陈旧的条形图或可以使用单个维度进行编码的其他图,即条的长度/高度或点/线的位置。
作者:链三丰,来源:区块链研究实验室
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。