ПочатиПочніть безкоштовно

Знайдіть найпопулярніші форуми щодня: II

Чудова робота в попередній вправі — ви написали код, який створив список графів часових рядів. Тепер ви завершите цю вправу — з'ясуєте, скільки форумів мали найвищий бал популярності щодня!

Одне з того, що ви тут робитимете, — це «словникове включення» для фільтрації словника. Воно дуже схоже на включення списку для фільтрації списку, лише синтаксис має вигляд: {key: val for key, val in dict.items() if ...}. Зверніть на це увагу!

Ця вправа є частиною курсу

Середній рівень Network Analysis у Python

Переглянути курс

Інструкції до вправи

  • Отримайте степеневу центральність за допомогою nx.bipartite.degree_centrality(), передавши G_sub і forum_nodes як аргументи.
  • Відфільтруйте словник так, щоб залишилися лише степеневі центральності форумів. Пара key: val у виразі виходу має бути n, dc. Ітеруйтеся по dc.items() і перевіряйте, чи n є в forum_nodes.
  • Визначте найпопулярніші форуми — вони мають найвищу степеневу центральність (max(forum_dcs.values())), і її значення не повинно дорівнювати нулю.
  • Додайте найвищі значення dc до highest_dcs.
  • Створіть візуалізації!
    • Використайте включення списку для першого графіка: ітеруйтеся по most_popular_forums (це список списків), використовуючи forums як змінну-ітератор. Вираз виходу має повертати кількість найпопулярніших форумів за допомогою len().
    • Для другого графіка використайте highest_dcs і plt.plot(), щоб візуалізувати найвищий показник степеневої центральності.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

# 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()
Редагувати та запускати код