igraph基本用法
官方参考文档http://www.cs.rhul.ac.uk/home/tamas/development/igraph/tutorial/tutorial.html
Starting igraph
从igraph模块中导入所有函数
from igraph import *
g = Graph(1) # 此时的graph只有1个顶点,0条边
print(g)
Out: IGRAPH U— 1 0 –
add_vertices()
Graph.add_vertices()的作用是给graph添加顶点数,并且返回这个graph
g.add_vertices(2) # 此时的graph有3个顶点,0条边
graph的顶点从0开始标号,即3个顶点对应编号为0, 1, 2
add_edges()
1.Graph.add_edges()的作用是添加边的,边必须由整数对指定,比如(0, 1)表示顶点0与顶点1之间添加边
2.函数添加边时需要列表符号[]
3.当添加的边的顶点编号不存在比如g.add_edges((5, 0)),程序报错
4.边也存在编号,同样是从0开始
g.add_edges([(0, 1), (1, 2)]) # 此时的graph有3个顶点,2条边
# 添加更多的边和顶点数
g.add_edges([(2, 0)])
g.add_vertices(3)
g.add_edges([(2, 3), (3, 4), (4, 5), (5, 3)])
Out: IGRAPH U— 6 7 –
edges: 0–1 1–2 0–2 2–3 3–4 4–5 3–5
此时的graph (无向图)6个顶点,7条边;edges表示哪些顶点之间存在边的关系
delete_edges()
delete_edges()作用为边的删除,函数需要由边的编号组成的列表或者是单独的边的编号
delete_vertices()
1.delete_edges()作用为顶点的删除,函数需要由顶点的编号组成的列表或者是单独的顶点的编号
get_eid()
get_eid作用为获取连接两个顶点边的编号,当你不知道需要删除的边的编号时,可以使用这个函数
g.get_eid(2, 3) # out: 3
# 此时graph删除编号为3的边
g.delete_edges(3)
print(g)
Out: IGRAPH U— 6 6 –
edges: 0–1 1–2 0–2 3–4 4–5 3–5
summary()
summary()作用是获取给定的graph的概述
1.列举出边和顶点的个数
2.检查图有向或无向
3.计算图连通分量的个数
4.计算图的直径, 边缘密度,平均路径的长度
summary(g)
官方文档上的结果是 :
Out: 6 vertices, 6 edges, undirected
Number of components: 2
Diameter: 1
Density: 0.4000
Average path length: 1.0000
我自己运行的结果是:
Out: IGRAPH U— 6 6 –
不知道哪里出了问题,可能跟igraph的版本有关
Generating graphs
igraph包含了大量的图生成器,具体可以被分为两大类,确定性图生成器和随机性图生成器
确定性图生成器:只要输入相同的参数,就会生成相同的图
随机性图生成器即每次都生成不同的图
Graph.Tree()
Graph.Tree()作用是生成一个常规的树形图
g1 = Graph.Tree(127, 2)
summary(g1)
Out: IGRAPH U— 127 126 –
生成127个节点;除叶子节点,每个节点有两个子节点
只要参数不改变,生成的图都是一样的
g2 = Graph.Tree(127, 2)
get_edgelist()
get_edgelist()作用是返回包含整数对的列表
其中的整数对就是边两端的顶点整数对
g2.get_edgelist() == g1.get_edgelist() # out: True
证明了 只要参数不改变,生成的图都是一样的
输出前10条边对应的顶点整数对
print(g2.get_edgelist()[0: 10])
Out: [(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (2, 6), (3, 7), (3, 8), (4, 9), (4, 10)]
Graph.GRG()
Graph.GRG()作用是生成一个几何随机图
原理是在单位正方形里随机均匀的选择n个点,任意两个点之间的距离如果比预定的距离d小,就用边相连
g1 = Graph.GRG(100, 0.2)
summary(g1)
Out: IGRAPH U— 100 509 –
因为是随机生成图,无论是同一个参数,同一台电脑,每次生成的图都不一样
验证:
g2 = Graph.GRG(100, 0.2)
g1.get_edgelist() == g2.get_edgelist()
Out: False
isomorphic()
isomorphic()作用是判断两个图是不是同构图,即两个图是否完全等价
原理是检查两个图顶点的度
g1.isomorphic(g2)
Out: False
Setting and retrieving attributes
手动创建一个设想中的社交关系图 顶点表示人,边代表他们之间的社交关系
g = Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)])
vs和es
创建额外的列表储存信息与顶点ID相关联 每个Graph都包含两个特殊的成员: vs表示所有顶点的序列;es表示所有边的序列 如果使用vs或es作为字典,可以操作图的属性存储区域
g.vs["name"] = ["Alice", "Bob", "Claire", "Dennis", "Esther", "Frank", "George"]
g.vs["age"] = [25, 31, 18, 47, 22, 23, 50]
g.vs["gender"] = ["f", "m", "f", "m", "f", "m", "m"]
g.es["is_formal"] = [False, False, True, True, True, False, True, False, False]
当使用vs或es作为字典,都在将属性分配给图的所有顶点或边;
可以使用下标索引号对单独的顶点或边进行修改
g.es[0]
Out: igraph.Edge(<igraph.Graph object at 0x000002CA4CDB1228>, 0, {‘is_formal’: False})
g.es[0].attributes()
Out: {‘is_formal’: False}
g.es[0]["is_formal"]
Out: False
使用下标索引号对属性进行修改
g.es[0]["is_formal"] = True
g.es[0]["is_formal"]
Out: True
attributes()
无论是单独的索引号还是使用attributes()函数,都会输出此顶点或边的对应信息
g.vs[0]
Out: igraph.Vertex(<igraph.Graph object at 0x000002CA4CDB1228>, 0, {‘name’: ‘Alice’, ‘age’: 25, ‘gender’: ‘f’})
g.vs[0].attributes()
Out: {‘age’: 25, ‘gender’: ‘f’, ‘name’: ‘Alice’}
Grap本身也可以作为一个字典, 为整个图分配属性
g["date"] = "2021-10-30"
print(g["date"])
Out: 2021-10-30
del
del是python的关键词,可以直接删除属性
g.vs[3]["foo"] = "bar"
g.vs["foo"]
Out: [None, None, None, ‘bar’, None, None, None]
del g.vs["foo"]
g.vs["foo"]
Out: ‘Attribute does not exist’
Structural properties of graphs
igraph提供了很多函数计算不同图的结构属性
degree()
计算顶点的度
如果图是有向图,可以使用degree(type=“in”)和degree(type=“out”)计算入度和出度
g.degree()
Out: [3, 1, 4, 3, 2, 3, 2]
也可以输入单个顶点ID或者是一个列表的顶点ID查询,如果省略括号内的内容就默认为顶点的集合
g.degree(6)
g.degree([2, 3, 4])
Out: 2
Out: [4, 3, 2]
未完待续
igraph基本用法相关推荐
- Statistical Analysis of Network Data with R(第二版) 上机实操 3
4.2.1 节点的度 顶点的度是与顶点相连的边的数量,注意是边的数量.不是顶点的数量,因为存在多重边 > g <- make_ring(10) > plot(g) > degr ...
- 采用igraph包分析网络数据
欢迎关注微信公众号<生信修炼手册>! 对于网络的可视化和数据挖掘,有很多图形界面的软件可供选择,比如cytoscape, gephi 等等,这些软件使用方便,操作简单,功能的强大,但是同时 ...
- R语言中igraph包的使用(邻接矩阵)
先导入igraph包: library(igraph) graph包最简单的用法就是graph方法,两句代码就完成绘制如下所示,1的loop表示为(1,1),1和2之间有3条edge,表示为(1,2, ...
- R语言igraph软件包方法
一.igraph软件包创建图和网络 R语言的术语网络是加权无向图和加权有向图.igraph 是一个独立的库,底层是 C,上层有 Python 和 R 接口,主要做图和网络方面的计算,附带绘图功能. 调 ...
- c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...
- Pandas_transform的用法
先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...
- Python中yield和yield from的用法
yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...
- pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...
- python yield 和 yield from用法总结
#例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...
最新文章
- 模拟线程切换 C++
- 字符串扩展_JAVA
- Android与Javascript交互示例(二)
- CentOS 环境下配置MySQL8.0
- C0304 备份最后一天所有修改的文件
- python中的数组是什么_Python中的数组
- GBin1专题之Web热点秀#15
- html怎么关闭组合页面,html - 向HTML页面添加内部包装div [关闭] - 堆栈内存溢出
- ASP.NET Forms权限验证
- 智能家居简单实现---使用ESP8266简单实现和APP通讯
- .net core2 单元测试
- 新版代shua社区源码(云商城1.0)
- android 安装包反编译,Android逆向之反编译APK和安装包漏洞解析
- 2021-06-18
- CART 分类决策树
- 分享抖音上热门技巧!短视频涨粉+运营攻略!
- 使用vue-giant-tree根据id定位位置
- 60秒轻松计算出任意一年任意一天星期几?
- unity入门精要之第6 章 Unity 中的基础光照概述-1
- error [XXX.zip]: start of central directory not found; zipfile corrup