ComenzarEmpieza gratis

Encuentra los foros más populares día a día: II

¡Buen trabajo en el ejercicio anterior! Escribiste código que creó la lista de grafos en serie temporal. Ahora vas a terminar ese ejercicio: es decir, ¡averiguarás cuántos foros tuvieron la puntuación del foro más popular en cada día!

Una de las cosas que harás aquí es una "comprensión de diccionario" para filtrar un diccionario. Es muy similar a una comprensión de lista para filtrar una lista, excepto que la sintaxis es: {key: val for key, val in dict.items() if ...}. ¡Tenlo en cuenta!

Este ejercicio forma parte del curso

Análisis de redes intermedio en Python

Ver curso

Instrucciones del ejercicio

  • Obtén la centralidad de grado usando nx.bipartite.degree_centrality(), con G_sub y forum_nodes como argumentos.
  • Filtra el diccionario de modo que solo queden centralidades de grado de foros. El par key: val en la expresión de salida debe ser n, dc. Itera sobre dc.items() y comprueba si n está en forum_nodes.
  • Identifica el/los foro(s) más popular(es): debe(n) tener la centralidad de grado más alta (max(forum_dcs.values())) y su valor de DC no debe ser cero.
  • Añade los valores más altos de dc a highest_dcs.
  • Crea las gráficas:
    • Usa una comprensión de lista para la primera gráfica, en la que iteres sobre most_popular_forums (que es una lista de listas) usando forums como variable iteradora. La expresión de salida debe ser el número de foros más populares, calculado con len().
    • Para la segunda gráfica, usa highest_dcs y plt.plot() para visualizar la puntuación máxima de centralidad de grado.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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 y ejecutar código