加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 创建网络图

发布时间:2020-12-16 23:13:17 所属栏目:Python 来源:网络整理
导读:我以CSV格式设置的样本数据如下. 无向图具有90个节点,以数字{10,11,12 …. 99} 其边缘与权重的定义如下. [样本数据] node1 node2 weight23 89 34.9 (i.e. there is an edge between node 23 and 89 with weight 34.9)75 14 28.5so on.... 我想以网络形式表示
我以CSV格式设置的样本数据如下.

无向图具有90个节点,以数字{10,11,12 …. 99}
其边缘与权重的定义如下.

[样本数据]

node1 node2 weight
23     89    34.9  (i.e. there is an edge between node 23 and 89 with weight 34.9)
75     14    28.5
so on....

我想以网络形式表示.代表它的有效方法是什么(例如Gephi,networkx等).边缘厚度应代表边缘重量.

解决方法

如果你在Linux,并且假设你的csv文件看起来像这样(例如):
23;89;3.49
23;14;1.29
75;14;2.85
14;75;2.9
75;23;0.9
23;27;4.9

您可以使用此程序:

import os

def build_G(csv_file):

    #init graph dict
    g={}

    #here we open csv file
    with open(csv_file,'r') as f:
        cont=f.read()

    #here we get field content
    for line in cont.split('n'):
        if line != '':

            fields=line.split(';')

            #build origin node
            if g.has_key(fields[0])==False:
                g[fields[0]]={}

            #build destination node         
            if g.has_key(fields[1])==False:
                g[fields[1]]={}

            #build edge origin>destination
            if g[fields[0]].has_key(fields[1])==False:
                g[fields[0]][fields[1]]=float(fields[2])

    return g

def main():

    #filename
    csv_file="mynode.csv"

    #build graph
    G=build_G(csv_file)

    #G is now a python dict
    #G={'27': {},'75': {'14': 2.85,'23': 0.9},'89': {},'14': {'75': 2.9},'23': {'27': 4.9,'89': 3.49,'14': 1.29}}


    #write to file
    f = open('dotgraph.txt','w')
    f.writelines('digraph G {nnode [width=.3,height=.3,shape=octagon,style=filled,color=skyblue];noverlap="false";nrankdir="LR";n')
    f.writelines

    for i in G:
        for j in G[i]:
            #get weight
            weight = G[i][j]
            s= '      '+ i
            s +=  ' -> ' +  j + ' [dir=none,label="' + str(G[i][j]) + '",penwidth='+str(weight)+',color=black]'
            if s!='      '+ i:
                s+=';n'
                f.writelines(s)

    f.writelines('}')
    f.close()

    #generate graph image from graph text file
    os.system("dot -Tjpg -omyImage.jpg dotgraph.txt")

main()

我以前正在寻找一个有效的解决方案来构建复杂的图形,这是最简单的(没有任何python模块依赖)方法我发现.

以下是无向图的图像结果(使用dir = none):

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读