Encontre os fóruns mais populares dia a dia: II
Ótimo trabalho no exercício anterior — você escreveu um código que criou a lista de grafos em série temporal. Agora, você vai finalizar aquele exercício — isto é, descobrir quantos fóruns tiveram a pontuação de fórum mais popular em cada dia!
Uma das coisas que você fará aqui é uma “compreensão de dicionário” para filtrar um dicionário. É muito parecida com uma compreensão de lista para filtrar uma lista, exceto que a sintaxe é: {key: val for key, val in dict.items() if ...}. Tenha isso em mente!
Este exercício faz parte do curso
Análise de Redes Intermediária em Python
Instruções do exercício
- Obtenha a centralidade de grau usando
nx.bipartite.degree_centrality(), comG_subeforum_nodescomo argumentos. - Filtre o dicionário para que haja apenas centralidades de grau de fóruns. O par
key: valna expressão de saída deve sern, dc. Itere sobredc.items()e verifique senestá emforum_nodes. - Identifique o(s) fórum(s) mais popular(es) — deve(m) ter a maior centralidade de grau (
max(forum_dcs.values())) e seu valor de DC não deve ser zero. - Adicione os valores mais altos de
dcahighest_dcs. - Crie os gráficos!
- Use uma compreensão de lista para o primeiro gráfico, na qual você itera sobre
most_popular_forums(que é uma lista de listas) usandoforumscomo sua variável iteradora. A expressão de saída deve ser o número de fóruns mais populares, calculado usandolen(). - Para o segundo gráfico, use
highest_dcseplt.plot()para visualizar a maior pontuação de centralidade de grau.
- Use uma compreensão de lista para o primeiro gráfico, na qual você itera sobre
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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()