Stanford Snap.py for Python学习记录(一)

Stanford Snap.py for Python学习记录(一)

本文主要用来生成Goh无标度网络的数据集,并进行可视化展示,本来是用Matlab一起联合调用的,但是无奈我的matlab总是莫名其妙地崩溃,所以就用数据集的方式了。

1.如何下载安装

目前已经出到了2020年发布的6.0版本,下载安装使用的话可以直接在anaconda的命令行窗口里面输入:

#确保您的Windows操作系统是64位,Python是64位版本。
pip install snap-stanford

或者手动下载相应的包,把snap.py 和 _snap.so (or _snap.pyd) 放到你的工作目录下面就可以使用了。

Snap.py是独立的,其基本功能不需要任何其他软件包。 但是,它需要外部程序包来支持绘图和可视化功能。 如果要在Snap.py中使用绘图和可视化,除了Snap.py之外,还需要安装以下软件包:

  • Gnuplot用于绘制网络的结构特性(例如度分布)
  • Graphviz用于绘制和可视化小图

通过设置系统PATH变量,以便Gnuplot和Graphviz可用,或将其可执行文件放在工作目录中。

顺便吐槽一下:这个pyd文件比较烦人,打不开里面的内容,不支持反编译,所以他们写的代码具体是怎么实现的就搞不明白,老外真谨慎,一是怕你看到代码里面的内容,二是怕你看到了去乱改最后用不了了哈哈。

2.生成指定幂指数的无标度网络模型

import snap
GenRndPowerLaw(Nodes, PowerExp, ConfModel=True, Rnd=TRnd)

生成幂指数度分布且幂为PowerExp的随机无标度网络。 该方法使用“配置”模型(快速但结果是近似的)或“边缘重新布线”方法(缓慢但精确的)。

参数说明

  • Nodes:节点个数,int型
  • PowerExp:指定的幂指数,float型,必须大于1
  • ConfModel:配置模型,bool型,默认为True

返回值

无向的随机无标度网络

示例

import snap

UGraph1 = snap.GenRndPowerLaw (9, 10)
for NI in UGraph1.Nodes():
    print("node: %d, out-degree %d, in-degree %d" % (NI.GetId(), NI.GetOutDeg(), NI.GetInDeg()))

UGraph2 = snap.GenRndPowerLaw (5, 2, False)
for NI in UGraph2.Nodes():
    print("node: %d, out-degree %d, in-degree %d" % (NI.GetId(), NI.GetOutDeg(), NI.GetInDeg()))

3.画图

基于Graphviz的配置太麻烦,我就没有用,而且时间比较紧当时用的时候也没有心思去下载外部软件(因为它不是简单的python tool),所以使用了另外的手段,这里仅作为参考,不喜勿喷!

Python生成数据集

#生成100个节点数为300,幂指数为1.5的无标度网络
import snap

def BAA(Num,gamma):
    return snap.GenRndPowerLaw(Num,gamma)
    
if __name__ == '__main__':
    Num_of_Nodes = 300
    Gamma = 1.5
    for i in range(1,101):
        filename = 'C:\\Users\\Yu\\300_1.5\\test_' + str(i) +'.txt'
        G = BAA(Num_of_Nodes, Gamma)
        snap.SaveEdgeList(G, filename)

Matlab读取数据

for i=1:100
    filename = strcat('C:\Users\Yu\300_1.5\test_',num2str(i),'.txt');
    d=textread(filename,'','headerlines',3);%跳过第3行开始读数据
    s=[];t=[];
    for i=1:length(d)
        s=[s,d(i,1)+1];
        t=[t,d(i,2)+1];
    end
    g = graph(s,t);
    figure
    plot(g)
end

可视化示例
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Haleine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值