НачатьНачать бесплатно

Поиск самых популярных форумов по дням: 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()
Редактировать и запускать код