Bắt đầu ngayBắt đầu miễn phí

Tìm các diễn đàn phổ biến nhất theo ngày: II

Làm rất tốt ở bài trước — bạn đã viết mã để tạo danh sách đồ thị chuỗi thời gian. Giờ, bạn sẽ hoàn tất bài đó — tức là bạn sẽ tìm xem mỗi ngày có bao nhiêu diễn đàn đạt điểm phổ biến nhất!

Một việc bạn sẽ làm ở đây là “dictionary comprehension” để lọc một dictionary. Nó rất giống với list comprehension để lọc danh sách, chỉ khác là cú pháp trông như thế này: {key: val for key, val in dict.items() if ...}. Hãy ghi nhớ điều đó!

Bài tập này là một phần của khóa học

Phân tích mạng nâng cao với Python

Xem khóa học

Hướng dẫn bài tập

  • Lấy degree centrality bằng nx.bipartite.degree_centrality(), với G_subforum_nodes làm đối số.
  • Lọc dictionary để chỉ còn các degree centrality của diễn đàn. Cặp key: val trong biểu thức đầu ra phải là n, dc. Lặp qua dc.items() và kiểm tra n có thuộc forum_nodes hay không.
  • Xác định (các) diễn đàn phổ biến nhất — tức là có degree centrality cao nhất (max(forum_dcs.values())) và giá trị DC của nó không bằng 0.
  • Thêm các giá trị dc cao nhất vào highest_dcs.
  • Tạo biểu đồ!
    • Dùng list comprehension cho biểu đồ đầu tiên, trong đó bạn lặp qua most_popular_forums (một danh sách các danh sách) dùng forums làm biến lặp. Biểu thức đầu ra nên là số lượng diễn đàn phổ biến nhất, tính bằng len().
    • Với biểu đồ thứ hai, dùng highest_dcsplt.plot() để trực quan hóa điểm degree centrality cao nhất.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# Import necessary modules
from datetime import timedelta
import networkx as nx
import matplotlib.pyplot as plt

most_popular_forums = []
highest_dcs = []
curr_day = dayone 
td = timedelta(days=1)  

while curr_day < lastday:  
    if curr_day.day == 1:  
        print(curr_day)  
    G_sub = nx.Graph()
    G_sub.add_nodes_from(G.nodes(data=True))   
    G_sub.add_edges_from([(u, v, d) for u, v, d in G.edges(data=True) if d['date'] >= curr_day and d['date'] < curr_day + td])
    
    # Get the degree centrality 
    dc = ____
    # Filter the dictionary such that there's only forum degree centralities
    forum_dcs = {____:____ for ____, ____ in ____ if n in ____}
    # Identify the most popular forum(s) 
    most_popular_forum = [n for n, dc in ____ if dc == ____(____) and dc != 0] 
    most_popular_forums.append(most_popular_forum) 
    # Store the highest dc values in highest_dcs
    highest_dcs.append(max(____))
    
    curr_day += td  
    
plt.figure(1) 
plt.plot([len(____) for ____ in ____], color='blue', label='Forums')
plt.ylabel('Number of Most Popular Forums')
plt.show()

plt.figure(2)
plt.plot(____, color='orange', label='DC Score')
plt.ylabel('Top Degree Centrality Score')
plt.show()
Chỉnh sửa và Chạy Mã