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

news2024/12/24 0:15:41

目录

一、实验介绍

二、实验环境

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/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 = 0
        for k, v in nx.single_source_dijkstra_path_length(G_nx, i).items():
            pre_num += v
        cc[len(cc)] = (G.shape[0] - 1) / pre_num
    return 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] = item
    return 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 plt


def simulate_G(d):
    B = np.random.binomial(1, 0.3, size=(d, d))
    return np.triu(B, 1) + np.triu(B, 1).T


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 = 0
        for k, v in nx.single_source_dijkstra_path_length(G_nx, i).items():
            pre_num += v
        cc[len(cc)] = (G.shape[0] - 1) / pre_num
    return cc


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


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] = item
    return dc_res


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


if __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.coloradmin.cn/o/1054359.html

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

相关文章

《 新手》web前端(axios)后端(java-springboot)对接简解

文章目录 <font color red>1.何为前后端对接?2.对接中关于http的关键点2.1. 请求方法2.2. 请求参数设置简解&#xff1a; 3.对接中的跨域(CROS)问题**为什么后端处理跨域尽量在业务之前进行&#xff1f;**3.总结 1.何为前后端对接? “前后端对接” 是指前端和后端两个…

腾讯云中使用ubuntu安装属于自己的overleaf

在自己的云服务器上安装overleaf的需求是从写论文开始的&#xff0c;总担心自己的论文放在一个网站上被泄露&#xff0c;所以想要在自己的服务器上安装自己的overleaf&#xff0c;正好手边有一个云服务器&#xff0c;现在开始。 配置腾讯云 因为使用overleaf的优势就是在不同…

【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(UDP/TCP)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…

【知识梳理】多级页表的原理分析【地址形成过程】【扩充思考】

多级页表的地址形成过程 首先每个进程中都至少有一个页表&#xff08;段页式可以有多个页表&#xff09;&#xff0c;都有一个页表基地址寄存器&#xff08;PTBR&#xff09;&#xff0c;以下针对三级页表进行分析。 level1&#xff1a;PTBR代表的是一级页表的基地址&#xf…

链表经典面试题(三)

合并两个有序链表 1.题目2.图文分析3.代码实现 1.题目 2.图文分析 我们通过两个连接和指向的中介&#xff0c;我们可以将两个链表依次连接起来&#xff0c;并且当其中一个链表走完后&#xff0c;另一个链表剩余的值都会比另一个链表的值大&#xff0c;所以直接将指向中介指向他…

小谈设计模式(11)—模板方法模式

小谈设计模式&#xff08;11&#xff09;—模板方法模式 专栏介绍专栏地址专栏介绍 模板方法模式角色分类抽象类&#xff08;Abstract Class&#xff09;具体子类&#xff08;Concrete Class&#xff09;抽象方法&#xff08;Abstract Method&#xff09;具体方法&#xff08;C…

java复习回顾

文章目录 0 开发工具1. 对象和类、三大特性2. 成员/实例变量和实例变量&#xff08;this关键字&#xff09;3. 方法重载overload4. 构造方法和this关键字5. 继承6. 访问修饰符7. 方法重写8. 继承下的构造执行9. 多态9.1 向上转型9.2 向下转型9.3 多态的应用 0 开发工具 Maven是…

[DS资源推荐] Data Structure 严书配套代码

下图引入自康建伟老师博客 Github地址 使用说明&#xff1a;康老师博客 使用感受&#xff1a;Orz&#xff01;非常非常非常全面&#xff01;终于能看得下去严书了…

【DLoopDetector(C++)】DBow2词袋模型loop close学习

0.前言 最近读了两篇论文&#xff0c;论文作者开源了一种基于词袋模型DBoW2库的DLoopDetector算法&#xff0c;自己运行demo测试一下 对应论文介绍&#xff1a;Bags of Binary Words for Fast Place Recognition in Image Sequences 开源项目Github地址&#xff1a;https://gi…

【Java 进阶篇】JDBC Connection详解:连接到数据库的关键

在Java中&#xff0c;要与数据库进行交互&#xff0c;需要使用Java数据库连接&#xff08;JDBC&#xff09;。JDBC允许您连接到不同类型的数据库&#xff0c;并执行SQL查询、插入、更新和删除操作。在JDBC中&#xff0c;连接数据库是一个重要的步骤&#xff0c;而Connection对象…

公众号商城小程序的作用是什么

公众号是微信平台重要的生态体系之一&#xff0c;它可以与其它体系连接实现多种效果&#xff0c;同时公众号内容创作者非常多&#xff0c;个人或企业商家等&#xff0c;会通过公众号分享信息或获得收益等&#xff0c;而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…

springboot和vue:十、vue2和vue3的差异+组件间的传值

首先用vue-cli创建一个vue2的项目。 vue2和vue3的差异 main.js的语法有所差别。 vue2是 import Vue from vue import App from ./App.vuenew Vue({render: h > h(App), }).$mount(#app)vue3是 import { createApp } from vue import App from ./App.vuecreateApp(App).…

【OpenMV】形状识别 特征点检测 算法的组合使用

目录 形状识别 圆形检测 矩形识别 特征点检测 算法的组合使用 形状识别 圆形 霍夫圆检测算法 通过霍夫变换查找圆&#xff0c;支持openmv3以上 矩形 四元检测算法 识别任意大小任意角度的矩形&#xff0c;四元检测算法对图像的失真&#xff0c;畸变没有要求&#xff0c;畸…

spark SQL 任务参数调优1

1.背景 要了解spark参数调优&#xff0c;首先需要清楚一部分背景资料Spark SQL的执行原理&#xff0c;方便理解各种参数对任务的具体影响。 一条SQL语句生成执行引擎可识别的程序&#xff0c;解析&#xff08;Parser&#xff09;、优化&#xff08;Optimizer&#xff09;、执行…

Java性能调优必备知识学习路线

性能调优是Java开发中一个非常重要的环节&#xff0c;它可以帮助我们提高系统的性能、稳定性、可靠性和用户体验&#xff0c;从而提高用户体验和企业竞争力。 目录 一、为什么要学习Java性能调优&#xff1f; 二、如何做好性能调优&#xff1f; 2.1 扎实的计算机基础 2.2 …

Acwing 143. 最大异或对

Acwing 143. 最大异或对 题目描述思路讲解代码展示 题目描述 思路讲解 这道题的启示是&#xff1a;字典树不单单可以高效存储和查找字符串集合,还可以存储二进制数字 思路:将每个数以二进制方式存入字典树,找的时候从最高位去找有无该位的异. 代码展示 #include<iostream…

餐饮外卖配送小程序商城的作用是什么?

餐饮是支撑市场的主要行业之一&#xff0c;其市场规模很大&#xff0c;从业商家从大到小不计其数&#xff0c;对众商家来说&#xff0c;无论门店大小都希望不断生意增长&#xff0c;但在实际发展中却会面对不少痛点&#xff1b; 餐饮很适合线上经营&#xff0c;无论第三方外卖…

思维模型 周期

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。周期是一个看似极为简单&#xff0c;但背后却蕴藏着大智慧的模型&#xff0c;了解周期&#xff0c;对于了解王朝更替&#xff0c;数学之美&#xff0c;经济运转等都有帮助。 1 周期的应用 …

Swing程序设计(4)JLabel标签和导入图片

文章目录 前言一、JLabel标签 1.介绍2.实例展示二、JLabel中绘图和导入图片 1.自定义绘图2.导入图片总结 前言 本文介绍了Swing程序中JLabel标签的使用&#xff0c;以及在标签中导入图片和自定义图标的方法。 一、JLabel标签的使用 1.介绍 JLabel标签&#xff1a;在Swing程序中…

模拟实现map/set[改编红黑树实现map/set容器底层]

文章目录 1.搭建框架1.1map1.2set1.3RBTree1.4图解 2.代码剖析2.1RBTree.h2.2Map.h2.3Set.h2.4Test.cpp 1.搭建框架 1.1map 1.2set 1.3RBTree 1.4图解 2.代码剖析 2.1RBTree.h #pragma once #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <list&…