Поиск самых популярных форумов по дням: II
Отличная работа в предыдущем упражнении — вы написали код, который создал список графов временного ряда. Теперь пора завершить его: вы выясните, сколько форумов набирали наивысший показатель популярности в каждый отдельный день!
Одна из задач здесь — использовать «генератор словаря» для фильтрации словаря. Он очень похож на генератор списка, но синтаксис выглядит так: {key: val for key, val in dict.items() if ...}. Держите это в голове!
Это упражнение является частью курса
Средний уровень сетевого анализа на Python
Инструкции к упражнению
- Получите центральность по степени с помощью
nx.bipartite.degree_centrality(), передавG_subиforum_nodesв качестве аргументов. - Отфильтруйте словарь так, чтобы оставить только значения центральности по степени для форумов. Пара
key: valв выражении результата должна бытьn, dc. Перебирайтеdc.items()и проверяйте, входит лиnвforum_nodes. - Определите наиболее популярный форум (или форумы) — он должен иметь наивысшую центральность по степени (
max(forum_dcs.values())), и его значение DC не должно быть равно нулю. - Добавьте наибольшие значения
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()