Hitta de mest populära forumen dag för dag: II
Bra jobbat med föregående övning – du skrev kod som skapade listan med tidsseriegraferna. Nu ska du slutföra den övningen, det vill säga ta reda på hur många forum som hade den högsta popularitetspoängen per dag!
En av de saker du kommer att göra här är en "ordlistetolkning" (dictionary comprehension) för att filtrera en ordlista. Det liknar en listtolkning för att filtrera en lista, men syntaxen ser ut så här: {key: val for key, val in dict.items() if ...}. Ha det i åtanke!
Den här övningen är en del av kursen
Nätverksanalys i Python – fortsättningskurs
Övningsinstruktioner
- Hämta gradsentraliteten med hjälp av
nx.bipartite.degree_centrality(), medG_subochforum_nodessom argument. - Filtrera ordlistan så att den bara innehåller gradsentraliteter för forum. Paret
key: vali utdatauttrycket ska varan, dc. Iterera överdc.items()och kontrollera omnfinns iforum_nodes. - Identifiera det eller de mest populära forumen – de ska ha den högsta gradsentraliteten (
max(forum_dcs.values())) och DC-värdet ska inte vara noll. - Lägg till de högsta
dc-värdena ihighest_dcs. - Skapa diagrammen!
- Använd en listtolkning för det första diagrammet, där du itererar över
most_popular_forums(som är en lista av listor) medforumssom iteratorvariabel. Utdatauttrycket ska vara antalet mest populära forum, beräknat medlen(). - För det andra diagrammet, använd
highest_dcsochplt.plot()för att visualisera den högsta gradsentralitetspoängen.
- Använd en listtolkning för det första diagrammet, där du itererar över
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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()