Trova i forum più popolari giorno per giorno: II
Ottimo lavoro con l'esercizio precedente: hai scritto del codice che ha creato l'elenco di grafi come serie temporale. Ora porterai a termine quell'esercizio: scoprirai quanti forum hanno avuto il punteggio di forum più popolare su base giornaliera!
Una delle cose che farai qui è una "dictionary comprehension" per filtrare un dizionario. È molto simile a una list comprehension per filtrare una lista, ma la sintassi è: {key: val for key, val in dict.items() if ...}. Tienilo a mente!
Questo esercizio fa parte del corso
Analisi di reti intermedia in Python
Istruzioni dell'esercizio
- Ottieni la degree centrality usando
nx.bipartite.degree_centrality(), conG_subeforum_nodescome argomenti. - Filtra il dizionario in modo da avere solo le degree centralities dei forum. La coppia
key: valnell'espressione di output deve esseren, dc. Itera sudc.items()e verifica chensia inforum_nodes. - Identifica il o i forum più popolari: devono avere la degree centrality più alta (
max(forum_dcs.values())) e il suo valore di DC non deve essere zero. - Aggiungi i valori
dcpiù alti ahighest_dcs. - Crea i grafici!
- Usa una list comprehension per il primo grafico, in cui iteri su
most_popular_forums(che è una lista di liste) usandoforumscome variabile di iterazione. L'espressione di output deve essere il numero di forum più popolari, calcolato conlen(). - Per il secondo grafico, usa
highest_dcseplt.plot()per visualizzare il punteggio massimo di degree centrality.
- Usa una list comprehension per il primo grafico, in cui iteri su
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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()