ComeçarComece de graça

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

Ver curso

Instruções do exercício

  • Obtenha a centralidade de grau usando nx.bipartite.degree_centrality(), com G_sub e forum_nodes como argumentos.
  • Filtre o dicionário para que haja apenas centralidades de grau de fóruns. O par key: val na expressão de saída deve ser n, dc. Itere sobre dc.items() e verifique se n está em forum_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 dc a highest_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) usando forums como sua variável iteradora. A expressão de saída deve ser o número de fóruns mais populares, calculado usando len().
    • Para o segundo gráfico, use highest_dcs e plt.plot() para visualizar a maior pontuação de centralidade de grau.

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()
Editar e executar o código