Sankey Diagram [Data Visualization]

Ittipon Bangudsareh
1 min readDec 24, 2019

--

Sankey diagram หรือ Sankey Chart เป็นหนึ่งใน visualize ที่ช่วยในการอธิบายข้อมูลที่มีความซับซ้อนด้วยรูปภาพ โดยคุณสมบัติของเจ้าแซนคีย์จะช่วยเราอธิบายถึงปริมาณและความสัมพันธ์ของข้อมูลด้วยการ flow ของเซตข้อมูลหนึ่งไปยังเซตข้อมูลหนึ่งที่สัมพันธ์กัน ซึ่งเจ้าแซนคีย์นี้ประกอบไปด้วย 2 ส่วนหลัก

  1. Node เป็นจุดเชื่อม/กระจายชุดของข้อมูล
  2. Links ทำหน้าที่เชื่อมต่อข้อมูลที่มีความสัมพันธ์ซึ่งกันและกัน
Sankey Diagram

จากรูปจะสังเกตเห็นว่าจุดที่เป็นสีเข้มนั้นเราจะเรียกว่า node และส่วนที่เป็นเส้นเชื่อมต่อจาก node หนึ่งไปยัง node หนึ่งนั้นเราจะเรียกว่า link หาก link มีปริมาณข้อมูลจำนวนมาก link จะมีขนาดที่กว้างดังเส้นสีดำ ในทำนองเดียวกันหาก link มีปริมาณข้อมูลจำนวนน้อย link จะมีขนาดที่แคบ

อีกนัยหนึ่งเราจะเห็นว่าหากข้อมูลบางส่วนมีการ backward ไปยัง node อื่น นั่นหมายความว่าปริมาณที่เอาต์หรือกระจายออกจาก node นั้นเป็นผลกับข้อมูล ณ จุดนั้น เพราะฉะนั้นหากข้อมูลที่ node หนึ่ง link ไปยัง node หนึ่ง โดยการ feed ข้อมูลไปเรื่อยๆ จะแสดงให้เห็นถึงความสัมพันธ์ระหว่าง node ที่ไม่ส่งผลต่อ node ใดๆ

ดังนั้นถ้าเราลองจินตนาการดูนะครับว่า หากเรามีจำนวน Data ที่มหาศาลในเซตหรือคลัง (warehouse) ของเรา นำมาวิเคราะห์โดยปราศจากแซนคีย์ มันอาจจะยุ่งยากสำหรับการอธิบายภายในช่วงเวลาอันสั้น อาทิเช่น หากเราต้องการพรีเซนต์ระบบหนึ่งที่มีความซับซ้อนให้แก่บุคคลอื่น เราอาจต้องใช้กราฟเป็นจำนวนมากเพื่อมาอธิบายสิ่งต่างๆ ที่เกิดขึ้นภายในระบบ ฯลฯ

import plotly
class pltlys:
def __init__(self, data_set, data_label, title):self.data_set = data_setself.data_label = data_labelself.title = titledef plt_sandkey(self):plotly.offline.init_notebook_mode(connected=True)data_plot = dict(type='sankey',domain = dict(x = [0,1],y = [0,1]),orientation = "h",valueformat = ".0f",node = dict(pad = 10,thickness = 30,line = dict(color = "black",width = 0.5),label = self.data_label['fields_label'],color = self.data_label['fields_color']),link = dict(source = self.data_set['source'],target = self.data_set['target'],value = self.data_set['value'],label = self.data_set['fields_description'],color = self.data_set['fields_color']))layout = dict(title = self.title,height = 3750,width = 6050,font = dict(size = 15))fig = dict(data=[data_plot], layout=layout)plotly.offline.plot(fig, validate=False)

--

--

No responses yet