はじめに
本記事では、DataFrame(階層構造)を木構造にして 可視化する関数 を作成したので紹介します。(ネスト構造の辞書であればより簡単に作成できます!)
下図例
アドバイスや間違いがあれば、ご指導よろしくお願いします!
利用ライブラリ
pandas, graphviz
DataFrameからネスト構造の辞書型へ変換
扱いやすくするために、データフレームから辞書型へ変換します。
example1.py
def make_genre(df, col1, col2, col3) -> dict: # col1, col2, col3にはそれぞれのカラムを入れる
genre1 = df[col1].unique()
genre2 = df[col2].unique()
process_dict = {}
for i in genre1:
dict1 = {}
genre2 = df[df[col1] == i][col2].unique()
for j in genre2:
dict2 = {}
category = df[df[col2] == j][col3].unique()
dict2[j] = category
dict1.update(dict2)
process_dict[i] = dict1
return process_dict
ネスト構造の辞書を可視化
example2.py
from graphviz import Digraph
from tqdm import tqdm
def make_tree(classifer:dict, DIR:str): # classiferには可視化したい辞書、DIRには保存するディレクトリを入れる
for nums, unique_name in enumerate(tqdm(classifer.keys())):
# formatはpngを指定(他にはPDF, PNG, SVGなどが指定可)
G = Digraph(format="png")
G.attr('node', shape='circle')
# ノードを追加
for i, j in classifer[unique_name].items():
G.node(i)
for k in j:
if type(k) == str:
G.node(k)
# 辺を追加
for i, j in classifer[unique_name].items():
G.edge(unique_name, i)
for k in j:
if type(k) == str:
G.edge(i, k)
# 画像を保存(拡張子は不要)
G.render(DIR+unique_name)
出力結果(ディレクトリへ保存)
例:アジア・エスニック.png
おわりに
今回は階層構造になっているデータフレームを木構造にして可視化しました。可視化することで、スッキリ整理できます。Graphvizは気軽に扱うことができて楽しいので、ぜひ使ってみてください(笑)
謝辞
以下を参照しています。ありがとうございます。