การสืบค้นข้อมูลในกราฟ
ตอนนี้คุณรู้จักคุณสมบัติพื้นฐานของกราฟแล้ว และได้ฝึกใช้ฟีเจอร์การวาดกราฟของ NetworkX ไปบ้างแล้ว ถึงเวลาสำรวจวิธีสืบค้นโหนดและเอดจ์จากกราฟกัน โดยเฉพาะการค้นหา "โหนดที่สนใจ" และ "เอดจ์ที่สนใจ" เพื่อทำสิ่งนี้ จะใช้เมธอด .nodes() และ .edges() ที่ Eric อธิบายไว้ในวิดีโอ เมธอด .nodes() คืนค่าเป็น Node view iterable ส่วนเมธอด .edges() คืนค่าเป็น edge view iterable ซึ่งแต่ละ tuple จะแสดงโหนดที่อยู่บนเอดจ์นั้น อย่าลืมว่าการระบุ keyword argument data=True ในเมธอดเหล่านี้จะดึงข้อมูล metadata ที่เกี่ยวข้องกับโหนดและเอดจ์มาด้วย
จะใช้ลิสต์คอมพรีเฮนชันในการสร้างคำสืบค้นเหล่านี้ในบรรทัดเดียว หากต้องการทบทวนเรื่องลิสต์คอมพรีเฮนชัน สามารถดูได้ที่ ส่วนที่ 2 ของคอร์ส Python Data Science Toolbox ของ DataCamp โครงสร้างของลิสต์คอมพรีเฮนชันมีดังนี้
[ output expression for iterator variable in iterable if predicate expression ]
ต้องเติมส่วน _iterable_ และ _predicate expression_ ให้ครบ ลองทดสอบคำตอบใน IPython Shell ก่อนกด ส่งคำตอบ ได้เลย
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์เครือข่ายเบื้องต้นด้วย Python
คำแนะนำการฝึกหัด
- ใช้ลิสต์คอมพรีเฮนชันเพื่อดึง รายการโหนด จากกราฟ
Tที่มีป้ายกำกับ'occupation'เป็น'scientist'- output expression
nและ iterator variablesnกับdถูกกำหนดไว้ให้แล้ว หน้าที่คือเติมส่วน iterable และ conditional expression - ใช้เมธอด
.nodes()ของTเพื่อเข้าถึงโหนด และระบุdata=Trueเพื่อดึง metadata ของโหนดด้วย - iterator variable
dคือดิกชันนารี คีย์ที่ต้องการคือ'occupation'และค่าที่ต้องการคือ'scientist'
- output expression
- ใช้ลิสต์คอมพรีเฮนชันเพื่อดึง รายการเอดจ์ จากกราฟ
Tที่ก่อตัวมาอย่างน้อย 6 ปี กล่าวคือก่อน 1 ม.ค. 2010- เติมส่วน iterable และ conditional expression เช่นเดียวกับข้อก่อนหน้า
- ใช้เมธอด
.edges()ของTเพื่อเข้าถึงเอดจ์ และดึง metadata ของเอดจ์ด้วย - วันที่จะถูกเก็บเป็นออบเจ็กต์
datetime.dateใน metadata dictionarydภายใต้คีย์'date'ตัวอย่างเช่น หากต้องการเข้าถึงวันที่ 1 ม.ค. 2009 ค่าในดิกชันนารีจะเป็นdate(2009, 1, 1)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Use a list comprehension to get the nodes of interest: noi
noi = [n for n, d in ____ if d['____'] == '____']
# Use a list comprehension to get the edges of interest: eoi
eoi = [(u, v) for u, v, d in ____ if ____ < ____]