Знайдіть найпопулярніші форуми щодня: 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()