IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Ottieni la degree centrality usando nx.bipartite.degree_centrality(), con G_sub e forum_nodes come argomenti.
  • Filtra il dizionario in modo da avere solo le degree centralities dei forum. La coppia key: val nell'espressione di output deve essere n, dc. Itera su dc.items() e verifica che n sia in forum_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 dc più alti a highest_dcs.
  • Crea i grafici!
    • Usa una list comprehension per il primo grafico, in cui iteri su most_popular_forums (che è una lista di liste) usando forums come variabile di iterazione. L'espressione di output deve essere il numero di forum più popolari, calcolato con len().
    • Per il secondo grafico, usa highest_dcs e plt.plot() per visualizzare il punteggio massimo di degree centrality.

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()
Modifica ed esegui il codice