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
Instrucciones del ejercicio
- Obtén la centralidad de grado usando
nx.bipartite.degree_centrality(), conG_subyforum_nodescomo argumentos. - Filtra el diccionario de modo que solo queden centralidades de grado de foros. El par
key: valen la expresión de salida debe sern, dc. Itera sobredc.items()y comprueba sinestá enforum_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
dcahighest_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) usandoforumscomo variable iteradora. La expresión de salida debe ser el número de foros más populares, calculado conlen(). - Para la segunda gráfica, usa
highest_dcsyplt.plot()para visualizar la puntuación máxima de centralidad de grado.
- Usa una comprensión de lista para la primera gráfica, en la que iteres sobre
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()