Python/NetworkX:动态计算边权重

2023-12-29

我有一个未加权的创建的图表networkx为此,我想根据边缘出现的计数/频率来计算节点之间的边缘权重。我的图中的一条边可以多次出现,但事先并不知道边出现的频率。目的是根据连接节点之间移动的权重(例如计数/频率)可视化边缘。本质上,我想创建连接节点之间移动的网络流量图,并根据颜色或边缘宽度进行可视化。例如,从节点 0 到 1 的边在它们之间有 10 次移动,节点 1 到 2 有 5 次移动,因此边 0-1 将使用不同的边颜色/大小来可视化。

如何动态计算两个节点之间的边权重(将它们添加到图中后)g.add_edges_from()),然后重新应用于我的图表以进行可视化?下面是我最初用来创建图表的图表、数据和代码的示例,以及我尝试失败的解决方案。

Graph

样本数据

集群质心(节点)

cluster_label,latitude,longitude
0,39.18193382,-77.51885109
1,39.18,-77.27
2,39.17917928,-76.6688633
3,39.1782,-77.2617
4,39.1765,-77.1927
5,39.1762375,-76.8675441
6,39.17468,-76.8204499
7,39.17457332,-77.2807235
8,39.17406072,-77.274685
9,39.1731621,-77.2716502
10,39.17,-77.27

轨迹(边缘)

user_id,trajectory
11011.0,"[[340, 269], [269, 340]]"
80973.0,"[[398, 279]]"
608473.0,"[[69, 28]]"
2139671.0,"[[382, 27], [27, 285]]"
3945641.0,"[[120, 422], [422, 217], [217, 340], [340, 340]]"
5820642.0,"[[458, 442]]"
6060732.0,"[[291, 431]]"
6912362.0,"[[68, 27]]"
7362602.0,"[[112, 269]]"
8488782.0,"[[133, 340], [340, 340]]"

Code

import csv
import networkx as nx
import pandas as pd
import community
import matplotlib.pyplot as plt
import time
import mplleaflet

g = nx.MultiGraph()

df = pd.read_csv('cluster_centroids.csv', delimiter=',')
df['pos'] = list(zip(df.longitude,df.latitude))
dict_pos = dict(zip(df.cluster_label,df.pos))
#print dict_pos

for row in csv.reader(open('edges.csv', 'r')):
    if '[' in row[1]:       #
        g.add_edges_from(eval(row[1]))

# Plotting with mplleaflet
fig, ax = plt.subplots()
nx.draw_networkx_nodes(g,pos=dict_pos,node_size=50,node_color='b')
nx.draw_networkx_edges(g,pos=dict_pos,linewidths=0.01,edge_color='k', alpha=.05)
nx.draw_networkx_labels(g,dict_pos)
mplleaflet.show(fig=ax.figure)

我尝试过使用g.add_weighted_edges_from()并添加weight=1作为一个属性,但没有任何运气。我也尝试使用这个也不起作用:

for u,v,d in g.edges():
    d['weight'] = 1
g.edges(data=True)
edges = g.edges()
weights = [g[u][v]['weight'] for u,v in edges]

由于这个问题没有得到解答,因此提出了关于该主题的第二个问题(此处:Python/NetworkX:根据边缘出现的频率为边缘添加权重 https://stackoverflow.com/questions/43644210/python-networkx-add-weights-to-edges-by-frequency-of-edge-occurance)收到回复。根据边出现的次数向边添加权重:

g = nx.MultiDiGraph()

df = pd.read_csv('G:\cluster_centroids.csv', delimiter=',')
df['pos'] = list(zip(df.longitude,df.latitude))
dict_pos = dict(zip(df.cluster_label,df.pos))
#print dict_pos


for row in csv.reader(open('G:\edges.csv', 'r')):
    if '[' in row[1]:       #
        g.add_edges_from(eval(row[1]))

for u, v, d in g.edges(data=True):
    d['weight'] = 1
for u,v,d in g.edges(data=True):
    print u,v,d

根据上述计数缩放颜色和边缘宽度:

minLineWidth = 0.25

for u, v, d in g.edges(data=True):
    d['weight'] = c[u, v]*minLineWidth
edges,weights = zip(*nx.get_edge_attributes(g,'weight').items())

values = range(len(g.edges()) 
jet = cm = plt.get_cmap('YlOrRd')
cNorm  = colors.Normalize(vmin=0, vmax=values[-1])
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
colorList = []

for i in range(len(g.edges()):
    colorVal = scalarMap.to_rgba(values[i])
    colorList.append(colorVal)

并经过width=[d['weight'] for u,v, d in g.edges(data=True)], edge_color=colorList作为参数nx.draw_networkx_edges()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python/NetworkX:动态计算边权重 的相关文章

随机推荐

  • Scala:以高效的方式将字符串迭代器写入文件

    我有数千个文件 50K 每个文件大约有 10K 行 我读取文件并进行一些处理 然后将这些行写回输出文件 虽然我的读取和处理速度更快 但将字符串迭代器转换回单个字符串并将其写入文件的最后一步需要很长时间 几乎一秒钟 我不会为整个过程进行数学计
  • 如何生成唯一的订单号?

    我正在寻找一种生成唯一订单 ID 的好方法 你能看出下面的代码有什么问题吗 int customerId 10000000 long ticks DateTime UtcNow Ticks long orderId customerId t
  • 我尝试将 postgresql md5 更改为 scram-sha-256,但出现 FATAL 密码身份验证失败

    我在用着postgresql作为学习的一部分 我尝试更改登录方法以获得更安全的登录方法 例如使用scram sha 256代替md5 我试图改变我的password encryption to scram sha256 in postgre
  • Ansible,字段 args 具有无效值[重复]

    这个问题在这里已经有答案了 我向我的 playbook yml 添加了一个名为 common 的角色 但配置失败并显示以下消息 TASK common Host is present gt cd fatal localhost FAILED
  • HTTP请求头X-Requested-With从哪里来

    众所周知 我们可以使用X Requested Withhttp请求头来判断http请求是否来自Ajax 许多 javascript 框架会自动添加X Requested Withajax请求中的header 比如jQuery Ajax ht
  • Java:如何通过 org.w3c.dom.document 上的 xpath 字符串定位元素

    如何通过给定 org w3c dom document 上的 xpath 字符串快速定位一个或多个元素 似乎没有FindElementsByXpath 方法 例如 html body p div 3 a 我发现当存在大量同名元素时 递归迭代
  • 如何访问白色的消息框?

    我在 WPF 应用程序中有一个简单的消息框 启动方式如下 private void Button Click object sender RoutedEventArgs e MessageBox Show Howdy Howdy 我可以得到
  • 如何检查一个 JavaScript 对象中的值是否存在于另一个 JavaScript 对象中?

    我正在尝试比较 json str1 和 json str2 这里它应该返回 true 因为 json str1 中的所有元素都存在于 json str2 中 现在我正在这样做 json str1 0 a 1 b 2 c json str2
  • jsp 包含中的 HTTP 状态 500 文件未找到错误

    我包含根目录中的文件 它在本地工作正常 但当我托管我的网站时 它给我 错误 HTTP 状态 500 未找到 connection jsp 我的文件在 public html myfolder connection jsp 在共享主机上 我想
  • 将集合绑定到 StackPanel

    我想获取一个对象集合并将其绑定到 StackPanel 所以基本上如果该集合有 4 个元素 那么在堆栈面板内应该生成 4 个按钮 我尝试过这个 但我认为这不是正确的方法 我过去使用 DataTemplated 做过这种类型的想法 如果我错了
  • 尽管集群已启动,Flink localhost 仪表板仍无法工作

    我已经下载了Flink 1 5 0并运行启动集群脚本 集群似乎已成功启动 bin start cluster sh Starting cluster Starting standalonesession daemon on host LAP
  • 为什么 Microsoft.NET.CoreRuntime.1.1.appx 出现依赖性 - UWP APPX

    当我用来创建项目的appx文件 x64发布模式 时 在依赖文件夹下只创建了Microsoft VCLibs x64 14 00 appx文件 但现在 当我尝试创建 appx 时 还在依赖项文件夹下创建了一个附加文件 Microsoft NE
  • 在 C# Blazor 中的分部类中初始化 RenderFragment

    我正在使用第三方包中的组件 该组件接受 RenderFragment 作为参数 并且我想通过索引页的部分类为该 RenderFragment 分配一个值 我意识到当我在中构建 RenderFragment 时code标签 它有效 但一旦你把
  • iPhone 5 (4") 底部工具栏没有响应

    我正在尝试修改一个应用程序以适应新的 iPhone 5 4 屏幕 我添加了新的启动图像 电子邮件受保护 cdn cgi l email protection 之后一切似乎都很好 我的视图的中间部分可以调整大小 但是我注意到 在有底部工具栏的
  • 获取 UIScrollView 内容的可见矩形

    我怎样才能找到屏幕上实际可见的显示视图内容的矩形 CGRect myScrollView bounds 上面的代码在没有缩放时有效 但一旦允许缩放 它就会在 1 以外的缩放比例下中断 为了澄清 我想要一个 CGRect 包含滚动视图内容相对
  • Rust:从标准输入读取和映射行并处理不同的错误类型

    我正在学习 Rust 并尝试用它解决一些基本的算法问题 在许多情况下 我想从标准输入读取行 对每行执行一些转换并返回结果项的向量 我这样做的一种方法是这样的 Fully working Rust code let my values Vec
  • Boost::Spirit 后跟默认值时字符加倍

    我使用 boost spirit 来解析单项式的 一部分 如 x y xy x 2 x 3yz 我想将单项式的变量保存到一个映射中 该映射还存储相应的指数 因此 语法还应该保存 1 的隐式指数 因此 x 存储起来就像写成 x 1 一样 st
  • 单击 R 字符串输出中的 URL

    假设我有 R 的 cat 函数的输出 它是一个 URL 例如 cat https en wikipedia org wiki Statistics Output https en wikipedia org wiki Statistics
  • 使用泛型类型时,“From”的实现如何会发生冲突?

    我正在尝试实现一个错误枚举 它可以包含与我们的特征之一相关的错误 如下所示 trait Storage type Error enum MyError
  • Python/NetworkX:动态计算边权重

    我有一个未加权的创建的图表networkx为此 我想根据边缘出现的计数 频率来计算节点之间的边缘权重 我的图中的一条边可以多次出现 但事先并不知道边出现的频率 目的是根据连接节点之间移动的权重 例如计数 频率 可视化边缘 本质上 我想创建连