區塊鏈研究實驗室 | 在Python中搭建幣價樹形圖

買賣虛擬貨幣

截至2021年3月,有8,000多種加密貨幣,因此一目瞭然地跟蹤所有價格的發展可能是具有挑戰性的。幸運的是,像coin360這樣的網站以樹形圖的形式提供了加密貨幣價格發展的簡潔視覺化。樹狀圖透過使用可變大小的矩形以巢狀結構的形式顯示比例價格資料,從而提供了所有加密貨幣的快速概覽。

對此概念感興趣,我決定嘗試使用Python建立我自己的版本的樹形圖以跟蹤加密價格的想法。此樹形圖教程不僅限於顯示加密資訊,還可以應用於幾乎任何其他資料。

為了最大程度地提高Python程式碼的可移植性,本教程使用Google Colab建立,因此筆記本可以在任何Chrome瀏覽器上執行。

本教程的3個主要組成部分是:

  • 如何使用CoinMarketCap API呼叫和檢索最近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, Sessionfrom requests.exceptions import ConnectionError, Timeout, TooManyRedirectsimport 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 formatdf = 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 columnsdf_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 matplotlibimport matplotlib.pyplot as plt#!pip install squarifyimport squarify 
#load datasizes=df_final["USD_market_cap"]label=df_final["name"]
# color scale on the price development # min and max valuescmap = matplotlib.cm.RdYlGn #RedYellowGreenmini=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 squareslabels = ["%sn%d USDn%0.2f%%" % (label) for label in zip(df_final.symbol, df_final["USD_price"], df_final["USD_percent_change_24h"])]
# make plotfig = 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 barimg = 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 plotlyimport plotly.graph_objects as goimport 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_studioimport chart_studio import chart_studio.plotly as py
username = '#REPLACE YOUR USERNAME HERE#' # your usernameapi_key = '#REPLACE YOUR API KEY HERE#' # your api key - go to profile > settings > regenerate keychart_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繪製的條形圖

只需看一下上面的兩種視覺化效果,樹狀圖中的瑞典和羅馬尼亞之間的細微差別幾乎是看不到的,但是當以條形圖顯示時,細微的差異會變得更加明顯。

底線:在快速概述大量層次結構或分類資料時,最好使用樹狀圖-但是,請考慮使用更量化的視覺化效果,例如陳舊的條形圖或可以使用單個維度進行編碼的其他圖,即條的長度/高度或點/線的位置。

作者:鏈三豐,來源:區塊鏈研究實驗室

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读