【生物信息学】计算图网络中节点的中心性指标:聚集系数、介数中心性、度中心性

目录

一、实验介绍

二、实验环境

1. 配置虚拟环境

2. 库版本介绍

3. IDE

三、实验内容

0. 导入必要的工具

1. 生成邻接矩阵simulate_G:

2. 计算节点的聚集系数 CC(G):

3.计算节点的介数中心性 BC(G)

4. 计算节点的度中心性 DC(G)

5. 综合centrality(G)      

6. 代码整合


一、实验介绍

        本实验实现了计算图网络中节点的中心性指标,包括聚集系数、介数中心性、度中心性

二、实验环境

    本系列实验使用了PyTorch深度学习框架,相关操作如下(基于深度学习系列文章的环境):

1. 配置虚拟环境

深度学习系列文章的环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn

新增加

conda install pandas
conda install seaborn
conda install networkx
conda install statsmodels
pip install pyHSICLasso

注:本人的实验环境按照上述顺序安装各种库,若想尝试一起安装(天知道会不会出问题)

2. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

新增

networkx2.6.33.1
pandas1.2.32.1.1
pyHSICLasso1.4.21.4.2
seaborn0.12.20.13.0
statsmodels0.13.50.14.0

3. IDE

        建议使用Pycharm(其中,pyHSICLasso库在VScode出错,尚未找到解决办法……)

win11 安装 Anaconda(2022.10)+pycharm(2022.3/2023.1.4)+配置虚拟环境_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/128693741https://blog.csdn.net/m0_63834988/article/details/128693741icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/128693741

三、实验内容

0. 导入必要的工具

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

1. 生成邻接矩阵simulate_G:

def simulate_G(d):B = np.random.binomial(1, 0.3, size=(d, d))return np.triu(B, 1) + np.triu(B, 1).T
  • 生成一个随机的邻接矩阵表示的图,其中节点数为 d。
    • 使用numpy 库的 random.binomial 函数生成一个具有一定概率连接的邻接矩阵
    • 通过 triu 函数提取出上三角部分(不包括对角线),然后与其转置相加,得到一个无向图的邻接矩阵。

  2. 计算节点的聚集系数 CC(G):

def CC(G):cc = {}# single_source_dijkstra_path_length 从点i到其他点的最短路径长度# nx.single_source_dijkstra_path(G_nx, i)for i in range(G.shape[0]):pre_num = 0for k, v in nx.single_source_dijkstra_path_length(G_nx, i).items():pre_num += vcc[len(cc)] = (G.shape[0] - 1) / pre_numreturn cc

        通过遍历图中的每个节点,使用 networkx 库的 single_source_dijkstra_path_length 函数计算该节点到其他节点的最短路径长度,并将这些路径长度求和。然后,通过计算 (节点总数 - 1) / 最短路径长度之和,得到该节点的聚集系数。

3. 计算节点的介数中心性 BC(G)

def BC(G):bc_res = {}bc = [0.] * G.shape[0]for i in range(G.shape[0]):for j in range(G.shape[0]):shortest_paths = list(nx.all_shortest_paths(G_nx, i, j))for v in shortest_paths:for pre in v[1:-1]:bc[pre] += 1. / len(shortest_paths)for i in range(G.shape[0]):bc_res[i] = bc[i] / ((G.shape[0] - 1) * (G.shape[0] - 2))return bc_res

        遍历图中的每对节点,使用 networkx 库的 all_shortest_paths 函数找到它们之间的所有最短路径,并对每条路径上的中间节点进行计数。然后,通过计算每个节点的介数值(即通过该节点的最短路径数除以所有最短路径数的总和),得到节点的介数中心性。

4. 计算节点的度中心性 DC(G)

def DC(G):dc_res = {}degree = np.sum(G, axis=1)dc = degree / (G.shape[0] - 1)for index, item in enumerate(dc):dc_res[index] = itemreturn dc_res

        计算节点的度中心性(degree centrality)。首先计算每个节点的度(与其相连的边的数量),然后将度除以节点总数减去 1,得到节点的度中心性。

5. 综合 centrality(G)      

def centrality(G):cc = CC(G)bc = BC(G)dc = DC(G)return dc, cc, bc

  

        这个函数是一个综合函数,用于计算节点的三种中心性指标:度中心性、聚集系数和介数中心性。它调用上述三个函数,并返回这些中心性指标的字典。

6. 代码整合

import numpy as np
import networkx as nx
import matplotlib.pyplot as pltdef simulate_G(d):B = np.random.binomial(1, 0.3, size=(d, d))return np.triu(B, 1) + np.triu(B, 1).Tdef CC(G):cc = {}# single_source_dijkstra_path_length 从点i到其他点的最短路径长度# nx.single_source_dijkstra_path(G_nx, i)for i in range(G.shape[0]):pre_num = 0for k, v in nx.single_source_dijkstra_path_length(G_nx, i).items():pre_num += vcc[len(cc)] = (G.shape[0] - 1) / pre_numreturn ccdef BC(G):bc_res = {}bc = [0.] * G.shape[0]for i in range(G.shape[0]):for j in range(G.shape[0]):shortest_paths = list(nx.all_shortest_paths(G_nx, i, j))for v in shortest_paths:for pre in v[1:-1]:bc[pre] += 1. / len(shortest_paths)for i in range(G.shape[0]):bc_res[i] = bc[i] / ((G.shape[0] - 1) * (G.shape[0] - 2))return bc_resdef DC(G):dc_res = {}degree = np.sum(G, axis=1)dc = degree / (G.shape[0] - 1)for index, item in enumerate(dc):dc_res[index] = itemreturn dc_resdef centrality(G):cc = CC(G)bc = BC(G)dc = DC(G)return dc, cc, bcif __name__ == '__main__':# np.random.seed(0)# G = simulate_G(8)G = np.array([[0, 1, 0, 1, 1],[1, 0, 1, 0, 0],[0, 1, 0, 0, 1],[1, 0, 0, 0, 1],[1, 0, 1, 1, 0]])G_nx = nx.from_numpy_matrix(G)nx.draw_kamada_kawai(G_nx, with_labels=True)plt.show()dc, cc, bc = centrality(G)print("dc_nx", nx.degree_centrality(G_nx))print("dc   ", dc)print("cc_nx", nx.closeness_centrality(G_nx))print("cc   ", cc)print("bc_nx", nx.betweenness_centrality(G_nx))print("bc   ", bc)

  

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第3章-指标体系与数据可视化-3.1.2-Seaborn绘图库

目录 3.1.2 Seaborn绘图库 1. 带核密度估计的直方图 2. 二元分布图 一维正态分布 联合分布

xilinx的原语的使用

xilinx的原语的使用 在学习FPGA实现千兆网时需要GMII转RGMII,这就涉及了原语的使用,特此记录! 一、原语 与RGMII接口相关的原语: BUFG:全局时钟网络 BUFIO:只能采集IO的数据,采集IO数据的时候延时是最低的…

【【萌新的Risc-V学习之再看读不懂的流水线设计-10】】

萌新的Risc-V学习之再看读不懂的流水线设计-10 我们将流水线和之前案例中洗衣服的例子进行对照 我们把整个流水线分为5个阶段 也就是做成五级流水线 IF: 取指令ID: 指令译码和读寄存器堆EX: 执行或计算地址MEM: 数据存储器访问WB: 写回 我先在这里表述一下基本的几个指令的用…

四、cadence ic 617 ——添加工艺库文件

1.打开软件 linux界面与window不同,打开软件是由代码实现的。 打开软件时要在设定的工作区域打开,因为软件使用时会返回很多文件,在设定的工作区打开软件,这些文件就会返回到工作区域内。 输入ls回车,可以查询当前所在目录下的文件 输入cd+空格+文件名可以进入该文件 输…

【Java基础】抽象类和接口的使用

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得,欢迎大家在评论区讨论💌 目录 一、抽象类抽象类概念…

无设计经验也能制作专业国庆微传单

如果你正在计划一个国庆活动,或者想要创建一个微传单来宣传你的品牌或产品,那么你可以尝试使用乔拓云微传单平台。通过这个平台,你可以轻松地创建和发布一个精美的微传单,而且完全免费。 以下是制作国庆微传单H5的步骤&#xff1a…

react的组件

组件 组件是用来实现局部功能的代码和资源的集合(html/css/js),用来复用代码。 react中分为函数式组件和类式组件。函数式组件就是一个函数,函数的返回值就是组件的视图内容。类式组件就是通过class关键字创建的类,类…

力扣每日一题(+日常水几题)

121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09;(很水) class Solution { public:int maxProfit(vector<int>& prices) {int ans 0;int pre prices[0];for(auto & x : prices){pre min(pre,x);ans max(ans, x - pre);}return ans;} }; 64…

stl格式-3D三角形

文章目录 什么是stl文件?格式首选stl的语法1.这是一个stl格式的文件:(ASCII码)2.下面先举个例子(难度略微提示)补充:关于\<\<我试了一下:这个法线你随便写好像也没问题\>> 3.来个立方体4.最后再写一个由三个直角形组成的立方体(直棱锥)5.amend 修正(右手定则,法线…

Java 多态

Java 多态 目录 Java 多态 实例 虚方法 多态是同一个行为具有多个不同表现形式或形态的能力。 多态性是对象多种表现形式的体现。 比如我们说"宠物"这个对象&#xff0c;它就有很多不同的表达或实现&#xff0c;比如有小猫、小狗、蜥蜴等等。那么我到宠物店说&q…

决策树剪枝:解决模型过拟合【决策树、机器学习】

如何通过剪枝解决决策树的过拟合问题 决策树是一种强大的机器学习算法&#xff0c;用于解决分类和回归问题。决策树模型通过树状结构的决策规则来进行预测&#xff0c;但在构建决策树时&#xff0c;常常会出现过拟合的问题&#xff0c;即模型在训练数据上表现出色&#xff0c;…

【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层

一、MapTool简介 在ArcGIS Pro SDK中&#xff0c;MapTool是一个重要的组件&#xff0c;用于自定义地图操作工具&#xff0c;使用户能够在ArcGIS Pro中执行特定的地图交互操作。 在VS中添加新项&#xff0c;可以找到ArcGIS Pro 地图工具&#xff0c;即为MapTool。 新建后打开c…

HNU-CSer的推免经历记录

写在前面 本篇不是一个经验贴&#xff0c;不包含任何考核的具体内容。关于本校本年的推免情况&#xff0c;一些准备资料和我校主要推免到的学校的基本情况介绍我正在整理&#xff0c;后续完成后会放链接到这里&#xff08;也是因为一部分这个原因才决定写这一篇&#xff0c;同学…

站点信息搜集

站点信息搜集 1. whatweb 工具 kali自带的工具, 命令: whatweb httpbin.org http://httpbin.org [200 OK] Country[UNITED STATES][US], Email[mekennethreitz.org], HTML5, HTTPServer[gunicorn/19.9.0], IP[54.161.141.91], JQuery, Script[text/javascript], Title[ht…

javaee SpringMVC 乱码问题解决

方法一 在web.xml文件中注册过滤器 <!-- 注册过滤器 设置编码 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param&…

优雅的写Controller 层代码这样写才可以

前 言 本篇主要要介绍的就是controller层的处理&#xff0c;一个完整的后端请求由4部分组成&#xff1a; 接口地址(也就是URL地址)请求方式(一般就是get、set&#xff0c;当然还有put、delete)请求数据(request&#xff0c;有head跟body)响应数据(response) 本篇将解决以下3个…

Vue+element开发Simple Admin后端管理系统页面

最近看到各种admin&#xff0c;头大&#xff0c;内容太多&#xff0c;根本不知道怎么改。所以制作了这个项目&#xff0c;只包含框架、和开发中最常用的表格和表单&#xff0c;不用自己从头搭建架构&#xff0c;同时也容易上手二次开发。可以轻松从其他开源项目整合到本项目。项…

基于Qt Creator开发的坦克大战小游戏

目录 介绍开发环境技术介绍安装说明项目目录设计思想项目介绍运行演示知识点记录Gitee源码链接 介绍 &#xff01;&#xff01;&#xff01;资源图片是从网上免费下载&#xff0c;源码都是原创&#xff0c;供个人学习使用&#xff0c;非盈利&#xff01;&#xff01;&#xff…

UE5报错及解决办法

1、编译报错&#xff0c;内容如下&#xff1a; Unable to build while Live Coding is active. Exit the editor and game, or press CtrlAltF11 if iterating on code in the editor or game 解决办法 取消Enable Live Coding勾选

Java编码

Java编码问题 Unicode与码点 所谓Unicode就是全世界的字符字典&#xff0c;也就是把字符给一个编号&#xff0c;这个编码就是码点。比如 2. 编码 由于这种分配的编码无论从占用空间角度&#xff0c;还是读取速度&#xff0c;以及逻辑划分角度&#xff0c;都不是完善。所以出…