見出し画像

【Symbol Blog】シンボルノードの統計情報の視覚化

この記事は2023年2月14日にSymbol Blogにて投稿された記事「14 FEB VISUALISING SYMBOL NODE STATS」をChatGPTを用いて翻訳されたものです。



前回の投稿「Symbolノードの総ハーベスティング残高の取得」では、Symbol Python SDKとMongoDBを使用して、Symbolネットワーク全体のすべてのAPIノードでハーベスティングしているすべてのアカウントのアドレスと残高を取得する方法を示しました。今日はこれをさらに進めて、これらの数字が実際に何を表しているのかを視覚化してみたいと思います。最初はサークルパッキングプロットを使用する予定でしたが、Pythonでこれを作成するためのパッケージが実際には非常に使い勝手が悪いことが判明しました(コードを実行し、それに付随する記事を書いた後に気づきました)。Rで以前に行ったことがありますが、これは少し手間がかかるため、今回はまた別の日になるでしょう。

したがって、代わりに、前回のJupyterノートブックの最後に追加できる、各ノードが総ハーベスティングパワーに対する相対的な貢献を示すツリーマップを出力するための簡単なコードを書きました(少なくともAPIノードに関しては)。これを実行する前に、plotlyをインストールする必要があります:`pip install plotly`

import plotly.graph_objects as go

# First, sum the balances for each node
node_sums = {node: sum(balances) for node, balances in balance_details.items()}

# Prepare data for Plotly
labels = ["Total harvesting balance"] + list(node_sums.keys()) 
parents = [""] + ["Total harvesting balance"] * len(node_sums)  
values = [0] + list(node_sums.values())  

# Create the treemap
fig = go.Figure(go.Treemap(
    labels=labels,
    parents=parents,
    values=values,
    textinfo="label+value",
    hoverinfo="label+value+percent parent"
))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0))

# Save the figure to an HTML file

fig.write_html('node_balance_treemap.html')

出力はこのようになるはずだ:

残念ながら、この投稿にインタラクティブなHTMLファイルを埋め込むことはできないし、少なくとも投稿をプレビューしても表示されない。しかし、ここで開くことはできる。

言われる通り、一枚の絵は千言に値します。このようにデータを視覚化する方が、数百行からなるリストを理解するよりもずっと簡単だと思います。ラベルが小さいことは分かっていますが、ノードの上にマウスを重ねると、テキストが小さすぎて読めない場合でも詳細な情報が表示されます。自分のノードを見つけ、総ハーベスティング残高の0.0904%を表しているようです 😂

編集部:各ノードボックスの中に、アカウントの重み付けを含めることもできます:

import plotly.graph_objects as go

# Initialize lists for labels, parents, and values
labels = ["Total"]  # Root label for the treemap
parents = [""]  # The root has no parent
values = [sum(sum(balances) for balances in balance_details.values())]  # Total sum of all balances

# Loop through each node to add it and its accounts to the treemap data
for node, balances in balance_details.items():
    # Ensure the node total is the sum of its accounts
    node_total = sum(balances)
    labels.append(node)
    parents.append("Total")
    values.append(node_total)
    
    # Add accounts to node
    if node in address_details:
        for i, balance in enumerate(balances):
            # Append account details
            account = address_details[node][i] if i < len(address_details[node]) else f"{node} Account {i}"
            labels.append(account)  # Use a unique identifier for each account
            parents.append(node)
            values.append(balance)

# Create the treemap
fig = go.Figure(go.Treemap(
    labels=labels,
    parents=parents,
    values=values,
    textinfo="label+value",
    hoverinfo="label+value+percent parent",
    branchvalues="total"  # Ensures the visualization uses the sum of child values
))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0))

fig.write_html('node_account_balance_treemap_detailed.html')

そのため、ノードをクリックすると、収穫の総残高に対する各勘定の貢献度が表示されるようになった:

インタラクティブ版はこちら


著者(NineLives)について

私はシンボルとNEMの熱狂的なファンで、英語圏でこのプラットフォームの認知度を高めようとこのブログを運営しています。シンボルに関するニュースや、掲載を希望される記事がありましたら、ぜひお知らせください!


この記事が気に入ったらサポートをしてみませんか?