Получите края с цветами, основанными на степени входа / выхода в сети x с Python - PullRequest
0 голосов
/ 10 марта 2020

Я работаю над проблемой анализа социальных сетей, где у меня есть ориентированный граф. Я хочу, чтобы моим краям присваивался цвет в зависимости от степени входа и выхода. Как бы вы предложили это сделать? Кроме того, какие крутые и проницательные изменения и изменения могут быть внесены в сюжет помимо цвета краев в зависимости от степени? Если вы знаете, как изменить размер узла на основе определенного веса или количества соседей, которые будут оценены.

Вот весь мой сценарий:

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
import pandas as pd

импорт ребра и узла pandas dataframe

edges = pd.read_csv("./edges.csv", sep = ";")

nodes = pd.read_csv("./nodes_coordinates.csv", sep = ";")
# assigning nodes to own dataframe with a unique identifier
node = nodes.set_index("node").to_dict("index").items()

настройка ориентированного графа

# adding nodes and edges to a graph object
D = nx.from_pandas_edgelist(edges, source = "from",
                                   target = "to",
                                   create_using = nx.DiGraph)
D.add_nodes_from(node)
nx.is_directed(D)

вывод: true

настройка координат

coordinates_dict = {}
for node in nodes.node:
    coordinates_dict[node] = list(nodes.loc[nodes.node == node ,['lon','lat']].values[0])

построение графиков с координатами

plt.subplots(figsize =(20,10))

nx.draw_networkx_nodes(D, pos= coordinates_dict, node_size = 0, with_labels = True)
nx.draw_networkx_edges(D, pos = coordinates_dict, edge_color= "gray", alpha = .1)
nx.draw_networkx_labels(D, pos = coordinates_dict, label_pos = 10.3, font_size=16)
plt.show()

Пока что нет цвета, основанного на степени зелени, как я хочу, но я начал делать что-то подобное (хотя я знаю, что это пока не работает):

# Compute the in-degree centrality for nodes.
inn = D.in_edges()
out = D.out_edges()

color1 = [G[u][v]["red"] for u,v in inn]

Я думаю, мне нужно каким-то образом создать столбец, основываясь на том, имеют ли они степень входа / выхода, и повторить это через мой фрейм данных, и каким-то образом получить к нему доступ для графика, но не уверен, как это вообще сделать .

Кроме того, имейте в виду, что я тоже хочу что-то сделать с размером.

Большое вам спасибо за внимание к этому!

edge csv файл

файл узла

...