Najdi nejpopulárnější fóra den po dni: II
Skvělá práce v předchozím cvičení – napsal/a jsi kód, který vytvořil seznam grafů časové řady. Teď ho dokončíš: zjistíš, kolik fór dosáhlo skóre nejpopulárnějšího fóra v jednotlivých dnech!
Jednou z věcí, které tu budeš dělat, je "slovníkové porozumění" pro filtrování slovníku. Je velmi podobné listovému porozumění pro filtrování seznamu, jen syntaxe vypadá takto: {key: val for key, val in dict.items() if ...}. Měj to na paměti!
Toto cvičení je součástí kurzu
Intermediate Network Analysis in Python
Pokyny k cvičení
- Získej centralitu stupňů pomocí
nx.bipartite.degree_centrality()s argumentyG_subaforum_nodes. - Filtruj slovník tak, aby obsahoval pouze centralitu stupňů pro fóra. Pár
key: valve výstupním výrazu by měl býtn, dc. Iteruj přesdc.items()a zkontroluj, zda jenvforum_nodes. - Urči nejpopulárnější fórum (nebo fóra) – musí mít nejvyšší centralitu stupňů (
max(forum_dcs.values())) a hodnota DC nesmí být nulová. - Přidej nejvyšší hodnoty
dcdohighest_dcs. - Vytvoř grafy!
- Pro první graf použij listové porozumění, ve kterém iteruješ přes
most_popular_forums(což je seznam seznamů) sforumsjako iterační proměnnou. Výstupní výraz by měl být počet nejpopulárnějších fór, vypočítaný pomocílen(). - Pro druhý graf použij
highest_dcsaplt.plot()k vizualizaci nejvyššího skóre centrality stupňů.
- Pro první graf použij listové porozumění, ve kterém iteruješ přes
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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()