图论(二):图的度分析——度数bar图度数等级图度数直方图根据度数渲染节点颜色

news2024/12/25 23:40:18

本期所用数据集,空手道俱乐部关系数据集:

  • 数据集中共有34个节点,每个节点代表俱乐部中的一名成员
  • 数据集中共有78条边,每条边表示两名成员之间的友谊关系或社交联系
  • 常见数据集格式为GML和TXT格式,还可能包含其他格式的文件,如邻接矩阵、权值矩阵、net格式
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

G = nx.karate_club_graph() # 空手道俱乐部图。
#调用 nx.karate_club_graph() 时,返回一个NetworkX图对象(Graph object)
#该对象包含了上述的节点和边信息。这个图对象可以使用NetworkX提供的各种函数进行进一步的分析和可视化
pos = nx.spring_layout(G,seed=1)  
#设置节点位置。seed随机种子决定了每次运行后节点分布确定
#pos 是一个字典,其中键是图中的节点,值是该节点在二维空间中的位置(通常是x和y坐标)
#这些位置是由Spring布局算法计算得出

plt.figure(figsize = (14,8))

nx.draw_networkx(G, pos, node_color = 'green',edge_color = 'red')
plt.savefig('全图.svg')


度分析(确定关系中心)

连通性:

  • 用于描述“图的节点如何通过边相连”;
  • 连通图中任意两点间都有路径相连;非连通图存在至少一对节点间无路径相连
  • 连通分量无向图中最大的连通子图
  • 有向图强连通意味着任意两点间存在双向路径弱连通则至少通过将所有边视为无向边可实现连通
  • 是图中 移除后 增加连通分量数量 的边,局部桥是除非两端直接相连外,不属于任何其他更小的循环的边

度分析:使用图的节点度数帮助分析图的连通性

1、节点标签-度数bar图

degree_sequence = sorted((d for n, d in G.degree()), 
                         reverse=True)
# 度数从大到小排序(n为序号,d为度数,但是只取度数d)——返回结果为数组形式

dmax = max(degree_sequence) #取度数的最大值

dict_degree = dict(G.degree()) #将结果转为字典(节点标签:度数)

pd.DataFrame(list(dict_degree.items()), columns=['Key', 'Values']) #字典转换为列表再转换为DataFrame,列名'节点标签Key', 度数值'Values'

# 每个节点的具体度数
plt.bar(dict_degree.keys(),dict_degree.values())
plt.xlabel('Node label')
plt.ylabel('Degree')
plt.savefig('节点度数bar chart.svg')


2、度数等级图

set(degree_sequence) #将sorted排序后的数组转换为集合set格式

fig, ax = plt.subplots(figsize = (14,8))
ax.plot(degree_sequence, "g-", marker="o")
ax.set_ylabel("Degree")
ax.set_xlabel("Rank")
ax.set_xlim(0,34)
ax.set_ylim(0,17)
plt.savefig('度数等级图.svg')


3、度数直方图(度数-该度数频数)

fig, ax = plt.subplots(figsize = (14,8))
ax.bar(*np.unique(degree_sequence, return_counts=True))
ax.set_xlabel("Degree")
ax.set_ylabel("Number of Nodes")
plt.savefig('度数直方图.svg')

4、根据度数渲染颜色

试着绘制最大连通分量:

#这次不用空手道俱乐部图数据了,用随机图
G = nx.gnp_random_graph(100, 0.02, seed=1) # 创建随机图对象
#plt.figure(figsize = (14,9))
#pos = nx.spring_layout(G, seed = 8)
#nx.draw_networkx(G, pos, 
                 with_labels = False,
                 node_size=20, node_color = 'green')
#plt.savefig('全图.svg')  #绘制全图

Gcc = G.subgraph(sorted(nx.connected_components(G), 
                        key=len, reverse=True)[0])  #连通分量(节点数最多)

pos_Gcc = {k: pos[k] for k in list(Gcc.nodes())}
# 取出子图节点坐标。返回一个字典

plt.figure(figsize = (14,9))
nx.draw_networkx(Gcc, pos_Gcc, 
                 with_labels = False,
                 node_size=50, node_color = 'red')
plt.savefig('最大连通分量.svg')

根据度数渲染节点颜色:

#前处理:类比上面俱乐部数据处理方法
degree_sequence = sorted((d for n, d in G.degree()), 
                         reverse=True)  # 度数大小排序
dmax = max(degree_sequence)
dict_degree = dict(G.degree())  # 将结果转为字典
set(degree_sequence)

# 自定义函数,过滤dict:从字典中提取 value 满足特定要求的部分,结果还是一个字典
def filter_value(dict_, unique):
    
    newDict = {}
    for (key, value) in dict_.items():
        if value == unique:
            newDict[key] = value
            
    return newDict

unique_deg = set(degree_sequence)
# 取出节点度数独特值:用集合运算提取节点度数的独特值

colors = plt.cm.RdYlBu_r(np.linspace(0, 1, len(unique_deg)))
# 独特值的颜色映射:节点度数独特值的颜色映射;度数高用暖色调,度数低用冷色调

plt.figure(figsize = (14,9))
nx.draw_networkx_edges(G, pos)
# 绘制图的边

# 分别绘制不同度数节点:根据节点度数大小分批绘制节点
for deg_i, color_i in zip(unique_deg,colors):
    
    dict_i = filter_value(dict_degree,deg_i)
    nx.draw_networkx_nodes(G, pos, 
                           nodelist = list(dict_i.keys()), 
                           node_size=40,
                           node_color = color_i)
plt.savefig('根据度数大小渲染节点.svg')


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

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

相关文章

检索增强生成算法

检索增强生成算法(Retrieval-Augmented Generation,RAG)是由Patrick Lewis等人于2020年提出的(https://arxiv.org/pdf/2005.11401),主要用于辅助大规模语言模型(Large Language Models, LLMs)在…

【网络】代理服务器

目录 正向代理 反向代理 个人主页:东洛的克莱斯韦克-CSDN博客 正向代理 正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标 服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户…

晓北斗 - 北斗七星、北斗导航系统

北斗导航 北斗卫星导航 芯片、模块、天线、板卡等基础产品,是北斗系统应用的基础。通过卫星导航专项的集智攻关,我国实现了卫星导航基础产品的自主可控,形成了完整的产业链。 北斗卫星导航系统(Beidou Navigation Satellite System,简称:BD…

Effective-Java-Chapter5-泛型

https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual/blob/dev/Chapter-5/Chapter-5-Introduction.md 准则一 不要使用原始类型 首先来看一下什么是原始类型呢? List 对应的原始类型是 List,那其实就是说不带参数化类…

Selenium + Python 自动化测试13(HTML报告)

我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上一篇我们讨论了unittest中discover 的构建,可以组织测试更多测试用例。 本篇文章我们接着讲。如何生成HTML报告,提高我们测试报告的可读性。 1、引入…

IOS 01 CocoaPods 安装与使用

什么是CocoaPods CocoaPods是一个依赖管理工具,类似Java语言的Maven,Gradle这样的工具;只是他是管理iOS,macOS等平台项目的依赖而已。 同类软件 Carthage,Swift官方提供的Swift Package Manager。 流行程度 Cocoa…

若依框架将Mybatis改成MybatisPlus

1.引入MybatisPlus的maven依赖 <mybatis-plus.version>3.2.0</mybatis-plus.version> <dependencies><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifac…

国联证券:蛇吞象

券商蛇吞象&#xff0c;难解业绩荒 今天我们来聊——国联证券 重大资产重组预案发布两个半月后&#xff0c;国联证券最新重组方案出炉&#xff0c;作价294.92亿收购民生证券99.26%的股份。 炒了这么久的券商重组&#xff0c;终于迎来实质性落地。 也因为这两家的营收差异&…

PHP多商家营销活动平台系统小程序源码

解锁营销新境界&#xff01;「多商家营销活动平台」让你的品牌火出圈✨ &#x1f680;【聚合力量&#xff0c;共创辉煌】&#x1f680; 在这个竞争激烈的市场中&#xff0c;单打独斗早已不是最佳选择&#xff01;「多商家营销活动平台」横空出世&#xff0c;它像一座桥梁&…

Redis操作--RedisTemplate(一)介绍

一、介绍 1、简介 RedisTemplate 是 Spring Data Redis 提供的一个高级抽象&#xff0c;由 Spring 官方提供的方便操作 Redis 数据库的一个工具类&#xff0c;支持模板设计模式&#xff0c;使得操作 Redis 更加符合 Spring 的编程模型。还支持序列化机制&#xff0c;可以处理…

基于SpringBoot的航空公司管理系统设计与实现,源码、部署+讲解

摘要 随着互联网时代的日益发展&#xff0c;互联网技术得到了广泛的应用。互联网正在经历一场由传统线下管理模式转变为以互联网主导的线上管理模式的深刻变革。在线管理技术犹如雨后春笋一般冒芽而出&#xff0c;这为我们的生活带来了许多变动。 在近些年国内航空业的蓬勃发…

LVS理论知识

目录 1.描述以及工作原理 1.什么是LVS 2.LVS调度算法 1.静态调度算法 1.轮询RR 2.加权轮询WRR 3.目标地址hash---DH 4.源地址hash---SH 2.动态调度算法 1.LC最少连接 2.wlc加权最少连接 3.sed最少期望延迟 4.nq不排队调度算法 5.lblc基于本地最少连接 6.lnlcr带…

BioMistral 7B: 生物医学领域的开源多语言AI模型

人工智能咨询培训老师叶梓 转载标明出处 尽管目前有许多开源的针对健康领域的大模型可供使用&#xff0c;但现有模型在数据隐私风险、模型性能以及多语言支持方面的局限性&#xff0c;限制了它们在医疗领域的应用。为了克服这些限制&#xff0c;研究者们提出了BioMistral&#…

吴恩达机器学习 笔记四十二 基于内容过滤的深度学习

在电影评分的案例中&#xff0c;基于内容过滤的方法需要用到两个向量&#xff0c;一个是来自用户的特征向量Vu,另一个是电影特征的向量 Vm。以用户的特征为例&#xff0c;原始的向量Xu作为一个神经网络的输入&#xff0c;经过几层之后输出一个有32个单元的向量Vu&#xff0c;电…

中芯国际:回暖

业绩稳重向好&#xff0c;半导体周期逆转&#xff1f;或许可以去掉问号。 今天我们来聊国产晶圆代工龙头——中芯国际 半导体复苏的风已经吹了几个月&#xff0c;各家业绩预告亮眼&#xff0c;但只有数据真正落地才能下定结论。而半导体看晶圆代工&#xff0c;晶圆代工看中芯国…

14.1 NumPy基础

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

uni-app 吸顶方案总结

效果 页面级 uni.pageScrollTo 官方文档&#xff1a;https://uniapp.dcloud.net.cn/api/ui/scroll.html#pagescrollto 原生头部导航 uni.pageScrollTo({selector: #tabs,duration: 300 });(推荐)需要兼容自定义头部导航 <template><view id"demo1" :styl…

Sakana.ai 迈向完全自动化的开放式科学发现

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

设计模式-标识域(Identity Field)

目的 为了在内存对象和数据库行之间维护标识而在对象内保存的一个数据库标识域。 关系数据库和内存对象的区别 区分行&#xff1a;关系数据库使用键来区分数据行&#xff0c;而内存对象不需要这样一个键 引用方法&#xff1a;对象系统中通过原始内存位置直接区分对象&#x…

【3】字节码文件的组成

一.应用场景与学习路线 二.以正确的姿势打开文件 使用记事本和NotePad打开字节码文件很不方便 三.字节码文件的组成