Вычисление средней центральности по степени для раздела студентов по дням
В этом упражнении вы проверите, коррелирует ли средняя центральность по степени всех узлов с количеством рёбер, отображаемых на временно́м графике. Корреляция может оказаться слабой — давайте посмотрим, так ли это на самом деле.
Это упражнение является частью курса
Средний уровень сетевого анализа на Python
Инструкции к упражнению
- Создайте новый граф
G_sub, который будет содержать подмножество рёбер. - Добавьте узлы из
G, включая метаданные узлов. - Добавьте рёбра, удовлетворяющие заданному условию, с помощью метода
.add_edges_from(). - Получите проекцию студентов
G_student_subизG_subс помощью функцииnx.bipartite.projected_graph(). - Вычислите центральность по степени для проекции студентов, используя
nx.degree_centrality()(не применяйте двудольную версию). - Добавьте среднюю центральность по степени в список
mean_dcs. Не забудьте предварительно преобразоватьdc.values()в список. - Нажмите «Отправить ответ», чтобы увидеть график!
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
from datetime import datetime, timedelta
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
# Initialize a new list: mean_dcs
mean_dcs = []
curr_day = dayone
td = timedelta(days=2)
while curr_day < lastday:
if curr_day.day == 1:
print(curr_day)
# Instantiate a new graph containing a subset of edges: G_sub
G_sub = ____
# Add nodes from G
G_sub.____(____)
# Add in edges that fulfill the criteria
G_sub.____([(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 students projection
G_student_sub = ____
# Compute the degree centrality of the students projection
dc = ____
# Append mean degree centrality to the list mean_dcs
mean_dcs.____(np.mean(____(dc.values())))
# Increment the time
curr_day += td
plt.plot(mean_dcs)
plt.xlabel('Time elapsed')
plt.ylabel('Degree centrality.')
plt.show()