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
Instrucțiuni pentru exercițiu
- Calculează centralitatea de grad folosind
nx.bipartite.degree_centrality(), cuG_subșiforum_nodesca argumente. - Filtrează dicționarul astfel încât să conțină doar centralitățile de grad ale forumurilor. Perechea
key: valdin expresia de ieșire trebuie să fien, dc. Iterează pestedc.items()și verifică dacănse află înforum_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înhighest_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) cuforumsca variabilă iterator. Expresia de ieșire trebuie să fie numărul de forumuri cele mai populare, calculat culen(). - Pentru al doilea grafic, folosește
highest_dcsșiplt.plot()pentru a vizualiza cel mai mare scor de centralitate de grad.
- Folosește o comprehensiune de listă pentru primul grafic, în care iterezi peste
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()