当前位置: 首页 > 科技观察

用Python构建币价树图

时间:2023-03-21 20:43:43 科技观察

本文转载自微信公众号《区块链研究实验室》,作者连三丰。转载本文请联系区块链研究实验室公众号。截至2021年3月,有超过8,000种加密货币,因此一目了然地跟踪所有价格走势可能具有挑战性。幸运的是,像coin360这样的网站以树形图的形式提供了加密货币价格发展的简洁可视化。树状图通过使用大小可变的矩形在嵌套结构中显示比例价格数据,提供所有加密货币的快速概览。对这个概念很感兴趣,我决定尝试使用Python创建我自己版本的树状图来跟踪加密货币价格的想法。此树形图教程不仅限于显示加密信息,还可以应用于几乎任何其他数据。为了最大限度地提高Python代码的可移植性,本教程是使用GoogleColab创建的,因此笔记本可以在任何Chrome浏览器上运行。本教程的3个主要组成部分是:如何使用CoinMarketCapAPI调用和检索过去24小时的加密货币价格使用库Squarify在Python中绘制静态树图使用库Plotly在Python中绘制交互式树图从CoinMarketCap数据中检索加密货币免责声明:免费版CoinMarketCap数据仅供个人使用,商业用途见CMC定价方案。首先,如果您还没有的话,您需要在这里注册一个开发者帐户。登录后,导航到仪表板并复制您唯一的API密钥。CoinMarketCap截图通过使用下面显示的代码片段,您应该能够从CoinMarketCap调用前10个加密货币数据。可以调整参数以包括更多或更少的数据和使用的货币。请记住在第15行替换您的API密钥。此代码片段在发布时是最新的,请参阅官方文档以获取任何未来更新。#ThisexampleusesPython2.7andthepython-requestlibrary.fromrequestsimportRequest,Sessionfromrequests.exceptionsimportConnectionError,Timeout,TooManyRedirectsimportjsonurl='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':'#REPLACEYOURAPIKEYHERE#',}session=Session()session.headers。update(headers)try:response=session.get(url,params=parameters)data=json.loads(response.text)print(data)except(ConnectionError,Timeout,TooManyRedirects)ase:print(e)API返回的数据是JSON格式,因此需要将其规范化为pythonic数据帧格式(见第4行)。数据也被过滤以仅保留与树状图相关的几列,即加密货币的名称、它们的等级、它们的价格和它们相关的市值(见第5行)。importpandasaspd#normalizethedataintodataframeformatdf=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]#renamecolumnsdf_final.columns=['name','symbol','cmc_rank','USD_price','USD_percent_change_24h','USD_market_cap',]#uncommentbelowtoprintthetable#df_final创建静态树使用Squarify创建的图形树图Squarify是树图布局算法的库实现。它的工作原理是计算数据的大小并返回矩形的一系列坐标,然后使用MatPlotLib绘制这些坐标。可以使用颜色编码参数可视化变化的规模,在本例中是过去24小时内价格变化的百分比。然而,不利的一面是,目前还没有直接的方法来根据不断变化的矩形的大小来缩放标签。Python代码如下。importmatplotlibimportmatplotlib.pyplotasplt#!pipinstallsquarifyimportsquarify#loaddatasizes=df_final["USD_market_cap"]label=df_final["name"]#colorscaleonthepricedevelopment#minandmaxvaluescmap=matplotlib.cm.RdYlGn#RedYellowGreenmini=min(df_final["USD_percent_change_24h_finalmax(d)])maxifinalmax["USD_percent_change_24h"])norm=matplotlib.colors.Normalize(vmin=mini,vmax=maxi)colors=[cmap(norm(value))forvalueindf_final["USD_percent_change_24h"]]#labelsintreemapsquareslabels=["%s\n%dUSD\n%0.2f%%"%(label)forlabelinzip(df_final.symbol,df_final["USD_price"],df_final["USD_percent_change_24h"])]#makeplotfig=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("Cryptomarketpricechangelast24hours\n",fontsize=18)#plottitleandcolorbarimg=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,"Percentagechange",fontsize=14)#ifyouwanttoexportthefigure#plt.savefig("cmc_treemaps.png")plt.show()说明:第1至4行:导入和安装(如有必要)所需的库第6-8行:加载树图第10-16行:对价格变化百分比应用颜色编码比例第18-19行:为要显示的文本创建字符串标签第21-25行:绘制树状图第27-31行:在侧面应用的颜色条中第33-35行:显示带有导出为png图片选项的树状图创建交互式树状图扫码查看交互式树状图效果更复杂的绘制树状图的方法要做到这一点的方法是激活它!使用Plotly创建一个交互式树状图,当您将鼠标悬停在每个图块上时,它会显示有关每个图块的详细信息#!pipinstall--upgradeplotlyimportplotly.graph_objectsasgoimportplotly.expressaspxfig=px.treemap(df_final,path=['name'],values='USD_market_cap',color_continuous_scale='RdYlGn',color='USD_percent_change_24h',)fig.update_layout=t'Cryptomarketpricechangelast24hours',title_x=0.5)fig.show()描述:第1至3行:导入和安装所需的库第5-10行:绘制树图第11行:为树图添加标题第12行:显示树图如何可以在媒体/网站中嵌入交互式树状图想知道您在上面看到的嵌入式树状图是如何完成的吗?您可以使用PlotlyStudio轻松完成此操作,好处是您可以直接将GoogleColab笔记本与PlotlyStudio链接(您需要有一个帐户)。只需在下面添加此代码片段并使用您的Plotly用户名和API密钥即可。#TopushyourGCplottoPlotlyStudioautomatically#!pipinstallchart_studioimportchart_studioimportchart_studio.plotlyaspyusername='#REPLACEYOURUSERNAMEHERE#'#yourusernameapi_key='#REPLACEYOURAPIKEYHERE#'#yourapikey-gotoprofile>settings>regeneratekeychart_studio.tools.set_credentials_file(username=username,api_key=api_key)py.plot(fig,filename='cmc_treemap',auto_open=True)将Plotly树图推送/同步到PlotlyStudio后,只需将链接复制到PlotlyStudio,然后将链接作为嵌入式链接粘贴到Medium中,然后按Enter,就是这样!如何在您的网站上插入嵌入式链接摘要树状图是通过以不同矩形和颜色可视化层次结构数据来讲述故事的好方法。当您想要按数量级快速可视化大量数据时,此功能非常有效,可以选择为第二个维度使用不同的色调和颜色强度。然而,树状图的一个缺点是很难进行精确的定量比较。