ÎncepețiÎncepe gratuit

Găsește cele mai populare forumuri zi de zi: II

Bravo pentru exercițiul anterior – ai scris codul care a creat lista de grafuri temporale. Acum vei finaliza acel exercițiu: vei afla câte forumuri au obținut cel mai mare scor de popularitate în fiecare zi!

Unul dintre lucrurile pe care le vei face aici este o „comprehensiune de dicționar" pentru a filtra un dicționar. Este foarte asemănătoare cu o comprehensiune de listă pentru a filtra o listă, cu excepția că sintaxa arată astfel: {key: val for key, val in dict.items() if ...}. Ține asta în minte!

Acest exercițiu face parte din cursul

Analiză intermediară a rețelelor în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Calculează centralitatea de grad folosind nx.bipartite.degree_centrality(), cu G_sub și forum_nodes ca argumente.
  • Filtrează dicționarul astfel încât să conțină doar centralitățile de grad ale forumurilor. Perechea key: val din expresia de ieșire trebuie să fie n, dc. Iterează peste dc.items() și verifică dacă n se află în forum_nodes.
  • Identifică forumul (sau forumurile) cele mai populare – trebuie să aibă cea mai mare centralitate de grad (max(forum_dcs.values())), iar valoarea DC să nu fie zero.
  • Adaugă cele mai mari valori dc în highest_dcs.
  • Creează graficele!
    • Folosește o comprehensiune de listă pentru primul grafic, în care iterezi peste most_popular_forums (care este o listă de liste) cu forums ca variabilă iterator. Expresia de ieșire trebuie să fie numărul de forumuri cele mai populare, calculat cu len().
    • Pentru al doilea grafic, folosește highest_dcs și plt.plot() pentru a vizualiza cel mai mare scor de centralitate de grad.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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()
Editează și rulează codul