การแสดงผลด้วย Matrix Plot
ถึงเวลาลองใช้วิธีการแสดงผลกราฟแบบ "พิเศษ" เป็นครั้งแรก นั่นคือ matrix plot โดย nxviz มีฟังก์ชัน matrix() ให้ใช้งาน ฟังก์ชันนี้ เช่นเดียวกับฟังก์ชัน API ระดับบนสุดทั้งหมดของ nxviz จะคืนค่าเป็น matplotlib axes object ที่แสดงผลได้ด้วย plt.show()
nxviz เป็นแพ็กเกจสำหรับแสดงผลกราฟอย่างเป็นระบบ ภายในฟังก์ชัน matrix จะใช้ nx.to_numpy_array(G) ซึ่งคืนค่าเป็นรูปแบบเมทริกซ์ของกราฟ โดยแต่ละโหนดจะเป็นหนึ่งคอลัมน์และหนึ่งแถว และเส้นเชื่อม (edge) ระหว่างโหนดสองโหนดจะแสดงด้วยค่า 1 อย่างไรก็ตาม วิธีนี้จะเก็บเฉพาะ metadata ที่ชื่อว่า weight เท่านั้น ส่วน metadata อื่น ๆ จะสูญหายไป ซึ่งจะได้ตรวจสอบด้วยคำสั่ง assert
นอกจากนี้ยังมี nx.from_numpy_array(A) ที่ช่วยให้สร้างกราฟจาก NumPy array ได้อย่างรวดเร็ว โดยค่าเริ่มต้นจะเป็นกราฟประเภท Graph() หากต้องการสร้างเป็น DiGraph() ต้องระบุผ่าน keyword argument ชื่อ create_using เช่น nx.from_numpy_array(A, create_using=nx.DiGraph)
หมายเหตุ: matplotlib.pyplot และ networkx ได้ถูก import ไว้แล้วในชื่อ plt และ nx ตามลำดับ และกราฟ T ได้ถูกโหลดไว้ล่วงหน้าแล้ว เพื่อความสะดวกและรวดเร็ว เราได้สุ่มตัวอย่างเพียง 100 เส้นเชื่อมจากเครือข่ายนี้
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์เครือข่ายเบื้องต้นด้วย Python
คำแนะนำการฝึกหัด
- Import
matrixจากnxviz - พล็อตกราฟ
Tในรูปแบบ matrix plot โดย:- สร้าง matrix plot ที่ชื่อ
mโดยใช้ฟังก์ชันnv.matrix()พร้อมส่งTเป็น argument - แสดงผลกราฟด้วย
plt.show()
- สร้าง matrix plot ที่ชื่อ
- แปลงกราฟให้อยู่ในรูปแบบเมทริกซ์ แล้วแปลงกลับมาเป็นกราฟในรูปแบบ NetworkX ในฐานะ directed graph ซึ่งได้ดำเนินการให้แล้ว
- ตรวจสอบว่า metadata field ชื่อ
categoryหายไปจากแต่ละโหนด ซึ่งได้ดำเนินการให้เรียบร้อยแล้วเช่นกัน กด 'ส่งคำตอบ' เพื่อดูผลลัพธ์!
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Import nxviz
____
# Create the matrix plot: m
m = ____
# Display the plot
____
# Convert T to a matrix format: A
A = nx.to_numpy_array(T)
# Convert A back to the NetworkX form as a directed graph: T_conv
T_conv = nx.from_numpy_array(A, create_using=nx.DiGraph())
# Check that the `category` metadata field is lost from each node
for n, d in T_conv.nodes(data=True):
assert 'category' not in d.keys()