Finde die beliebtesten Foren Tag für Tag: II
Starke Leistung in der vorherigen Übung – du hast Code geschrieben, der die Zeitreihen-Grafliste erzeugt hat. Jetzt beendest du diese Aufgabe: Du findest heraus, wie viele Foren pro Tag den höchsten Popularitätswert hatten!
Eines der Dinge, die du hier machst, ist ein „Dictionary Comprehension“, um ein Dictionary zu filtern. Das ist sehr ähnlich zu einem List Comprehension für Listen, nur sieht die Syntax so aus: {key: val for key, val in dict.items() if ...}. Behalte das im Hinterkopf!
Diese Übung ist Teil des Kurses
Fortgeschrittene Netzwerkanalyse in Python
Anleitung zur Übung
- Ermittle die Degree Centrality mit
nx.bipartite.degree_centrality(), und verwendeG_subundforum_nodesals Argumente. - Filtere das Dictionary so, dass nur Degree-Centrality-Werte für Foren enthalten sind. Das
key: val-Paar im Output-Ausdruck sollten, dcsein. Iteriere überdc.items()und prüfe, obninforum_nodesist. - Bestimme die beliebtesten Foren – sie sollten die höchste Degree Centrality haben (
max(forum_dcs.values())) und ihr DC-Wert darf nicht null sein. - Hänge die höchsten
dc-Werte anhighest_dcsan. - Erstelle die Plots!
- Verwende für den ersten Plot ein List Comprehension, in dem du über
most_popular_forums(eine Liste von Listen) mitforumsals Iteratorvariable iterierst. Der Ausgabewert sollte die Anzahl der beliebtesten Foren sein, berechnet mitlen(). - Für den zweiten Plot verwende
highest_dcsundplt.plot(), um den höchsten Degree-Centrality-Wert zu visualisieren.
- Verwende für den ersten Plot ein List Comprehension, in dem du über
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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()