推移の可視化
最近, ChatGPTを使用してさまざまな実験を行っている. その中で, サンキーダイアグラムという可視化手法について知る機会があり, 調査の上で実装してみた. サンキーダイアグラムは, 流入やフローの推移を視覚的に表現する図である. この図は, 特定のプロセスやシステムにおけるリソースやエネルギーの流れを視覚化するために用いられることが一般的であるが, 言語学的にトピックの遷移みたいなもので使えないかとぼんやり思った次第である.
pip install --upgrade plotly nbformat ipywidgets
# 必要なライブラリをインポート
import plotly.graph_objects as go
# サンプルデータの準備
# ここでは、架空のニュース記事から抽出されたトピック間の遷移を示します。
# トピックのラベル
labels = [
"政治", # 0
"経済", # 1
"テクノロジー", # 2
"健康", # 3
"スポーツ", # 4
"エンタメ", # 5
"環境" # 6
]
# ソースとターゲットのインデックス(labelsの位置を参照)
# 各ペアはトピック間の遷移を示します
source = [
0, # 政治 -> 経済
0, # 政治 -> テクノロジー
1, # 経済 -> テクノロジー
1, # 経済 -> 健康
2, # テクノロジー -> エンタメ
2, # テクノロジー -> スポーツ
3, # 健康 -> 環境
4, # スポーツ -> エンタメ
5 # エンタメ -> 環境
]
target = [
1, # 政治 -> 経済
2, # 政治 -> テクノロジー
2, # 経済 -> テクノロジー
3, # 経済 -> 健康
5, # テクノロジー -> エンタメ
4, # テクノロジー -> スポーツ
6, # 健康 -> 環境
5, # スポーツ -> エンタメ
6 # エンタメ -> 環境
]
# 各遷移の値(頻度や重みを示す)
value = [
10, # 政治 -> 経済
5, # 政治 -> テクノロジー
15, # 経済 -> テクノロジー
5, # 経済 -> 健康
7, # テクノロジー -> エンタメ
3, # テクノロジー -> スポーツ
2, # 健康 -> 環境
4, # スポーツ -> エンタメ
6 # エンタメ -> 環境
]
# サンキーダイアグラムの作成
# go.Sankeyを使用して、ノードとリンクの情報を定義します
fig = go.Figure(data=[go.Sankey(
node=dict(
pad=15, # ノード間の間隔
thickness=20, # ノードの厚さ
line=dict(color="black", width=0.5), # ノードの枠線
label=labels, # ノードのラベル
color="blue" # ノードの色
),
link=dict(
source=source, # 各リンクの始点ノード(インデックス)
target=target, # 各リンクの終点ノード(インデックス)
value=value, # 各リンクの値(重み)
color="lightblue" # リンクの色
)
)])
# レイアウトの更新(タイトルやフォントサイズなど)
fig.update_layout(
title_text="ニュース記事におけるトピック間の遷移",
font_size=12
)
# ダイアグラムの表示
fig.show()