Znajdź najpopularniejsze fora dzień po dniu: II
Świetna robota w poprzednim ćwiczeniu – napisano w nim kod tworzący listę grafów szeregów czasowych. Teraz czas to dokończyć: sprawdzisz, ile forów uzyskało najwyższy wynik popularności w poszczególnych dniach!
Jedną z rzeczy, które tu zrobisz, jest „słownikowe wyrażenie składane" służące do filtrowania słownika. Działa podobnie jak listowe wyrażenie składane, ale jego składnia wygląda tak: {key: val for key, val in dict.items() if ...}. Miej to na uwadze!
To ćwiczenie jest częścią kursu
Analiza sieci w Pythonie – poziom średniozaawansowany
Instrukcje do ćwiczenia
- Oblicz centralność stopnia za pomocą
nx.bipartite.degree_centrality(), przekazującG_subiforum_nodesjako argumenty. - Przefiltruj słownik tak, aby zawierał tylko centralności stopnia forów. Para
key: valw wyrażeniu wyjściowym powinna mieć postaćn, dc. Iteruj podc.items()i sprawdź, czynnależy doforum_nodes. - Wskaż najpopularniejsze forum (lub fora) – powinno mieć najwyższą centralność stopnia (
max(forum_dcs.values())), a jego wartość DC nie może być równa zero. - Dołącz najwyższe wartości
dcdohighest_dcs. - Utwórz wykresy!
- Do pierwszego wykresu użyj wyrażenia składanego, w którym iterujesz po
most_popular_forums(będącym listą list), używającforumsjako zmiennej iteratora. Wyrażenie wyjściowe powinno zwracać liczbę najpopularniejszych forów, obliczoną za pomocąlen(). - Do drugiego wykresu użyj
highest_dcsiplt.plot(), aby zwizualizować najwyższy wynik centralności stopnia.
- Do pierwszego wykresu użyj wyrażenia składanego, w którym iterujesz po
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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()