NetworkX : การใช้งาน Python Package สำหรับศึกษา Graph Theory

เพื่อให้การศึกษา Graph Theory สามารถทได้สะดวกและเห็นภาพ อีกทั้งสามารถ พิสูจน์ Concept ที่คิดขึ้นได้อย่างสะดวก รวดเร็ว จึงได้ออกแบบขั้นตอนไว้ดังนี้

  1. ใช้ yED เพื่อสร้างรูปแบบ Graph ที่สนใจ แล้ว Save ไว้เป็น .graphml (XML รูปแบบหนึ่ง)
  2. เขียน Python Code โดยอาศัย NetworkX เพื่อให้สามารถอ่าน File .graphml มาเก็บไว้เป็น Data Structure แบบ Graph()
  3. ใช้ Python ทำงานกับ Graph() ได้ด้วย Algorithm ที่เราคิด
  4. สามารถ Save เป็น Graphic File (.png) , Graph File Format (.DOT Format : ยังไม่สมบูรณ์ ไม่สามารถ Save weight ของ Edge ได้) หรือ แสดงผล GUI

แต่ก่อนอื่น ทดสอบสร้าง Graph ใน Graph() Data Structure ของ NetworkX แล้วแสดงผล GUI ซึ่งทำบน Windows พร้อมกับ Install : GraphViz + PyDot + Python + NetworkX + Eclipse + PyDev

หลังจากได้ติดตั้ง และทดสอบเรียบร้อยแล้ว ลองมาทดสอบใช้งาน Function ต่างๆที่มีให้ใช้ใน NetworkX กัน โดยอ้างอิงเอกสารจาก NetworkX

ลองทดสอบ Code ต่อไปนี้ เพื่อ Manipulate Node และ Edge ภายใน Graph ดู

import

networkx as nx

G = nx.Graph()

G.add_edge( 1 , 2 )

G.add_node( spam )

print G.nodes()

print G.edges()

nx.draw(G)

#nx.draw_graphviz(G) # Using graphviz engine

#nx.write_dot(G, ‘graph.dot’)

import matplotlib.pyplot as plt

plt.savefig( “graph.png ) # Save figure to graphic file

plt.show()

ผลที่ได้คือ


จาก yED : สร้าง File .graphml

test.graphml


ทดสอบเขียน Python: NetworkX

import

networkx as nx

G = nx.read_graphml( “../graph/test.graphml )

print “Graph G: nodes ..” , G.nodes()

print “Graph G: edges ..” , G.edges(data= True )

G.directed = False # Change Digraph to Undirected graph

”’——————————————————–”’

”’——————————————————–”’

nx.draw_circular(G)

import matplotlib.pyplot as ploter

ploter.show()

ผลที่ได้คือ

ปล. เนื่องจาก NetworkX version 0.9x ยังไม่สมบูรณ์ จะไม่สามารถอ่าน และแสดงค่า Edge ของ Graph ที่ .graphml บันทึกไว้เป็น Label ได้ จึงได้ทำการแก้ไข Python File: NetworkXไว้ใน file ต่อไปนี้

  • แก้เพื่อให้อ่าน Label ของ Node และ Edge มาเก็บใน Graph Structure : networkx/drawing/nx_pylab.py
  • แก้เพื่อให้ Edge แสดงค่า Weight ได้ : networkx/readwrite/graphml.py
Advertisements

10 thoughts on “NetworkX : การใช้งาน Python Package สำหรับศึกษา Graph Theory

  1. พี่ ครับขอรายละเอียดในการ install และวิธีการใช้งานที่ละเอียดกว่านี้หน่อยครับ

  2. พี่ครับ ขอรายละเอียดในการลงโปรแกรม และวิธีการลองใช้งานหน่อยครับ คือยังไม่ค่อยเข้าใจครับ

  3. @bird
    โอ้ว ขอโทษด้วยครับ ไปติดอยู่ใน spam เสียนาน
    คือสำหรับเรื่อง Install อยากเก็บไว้ให้ผจญภัยเองดีกว่า 🙂 น่าจะตื่นเต้นดี

    หรือหากมีจุดไหนที่เป็นประเด็น ก็สามารถส่ง mail หรือมา post ไว้ได้นะครับ

    แต่ข้อสำคัญสำหรับบทความที่เขียนคือ ต้องเข้าใจก่อนว่า ตัวละครมีใครบ้าง
    -Pyhon
    -NetworkX
    -yED

  4. โห พี่ตื่นเต้นมากถ้าไม่เสร็จ น้องไม่ขอผจญภัยดีกว่า
    #yED ขอ link โหลดด้วยครับ
    #พี่ด้วย capture หน้าจอในการทําด้วยยิ่งดีมากเลยครับ
    แล้วส่งมาทาง mail คือน้องต้องการให้เสร็จภายในวันอาทิตย์ครับ
    คือไม่แค่นั้น ต้องศึกษา doc Networrk x อีก
    ป.ล. กรุณาเถิด T_T

  5. เคลียร์ก่อนที่พี่จะตอบกลับแย้ว
    ป.ล. – ขอบคุณครับพี่ ถึงแม้จะช้าหน่อย…
    – น้องอยากลองเล่น Zoundry Raven บ้างครับ พี่พอจะมีวิธีติดตั้งและการใช้งาน บ้างไหมครับ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s