首页 > 其他分享 >gephi导入networkx:使用经纬度绘图并根据情景计算节点指标与网络整体指标(关联gephi导入networkx一文)

gephi导入networkx:使用经纬度绘图并根据情景计算节点指标与网络整体指标(关联gephi导入networkx一文)

时间:2023-09-22 21:22:54浏览次数:42  
标签:weight nx 导入 gephi networkx print csv 节点 row

此随笔为储存代码用

首先展示gephi的json文件

{
  "attributes": {
    "creator": "Gephi 0.10.1"
  },
  "options": {
    "multi": false,
    "allowSelfLoops": true,
    "type": "undirected"
  },
  "nodes": [
    {
      "key": "4551",
      "attributes": {
        "label": "国贸",
        "x": 1935.75,
        "y": -1055.0312,
        "size": 10.0,
        "color": "#000000",
        "stationname": "国贸",
        "lon": 114.1138257,
        "lat": 22.54233276
      }
    },
    {
      "key": "4552",
      "attributes": {
        "label": "左炮台东",
        "x": -1881.375,
        "y": -2363.5312,
        "size": 10.0,
        "color": "#000000",
        "stationname": "左炮台东",
        "lon": 113.8951198,
        "lat": 22.47307276
      }
    }
 ],
"edges": [
    {
      "key": "1920",
      "source": "4551",
      "target": "4460",
      "attributes": {
        "color": "#c0c0c0",
        "weight": 735.4556665
      }
    },
    {
      "key": "1708",
      "source": "4461",
      "target": "4443",
      "attributes": {
        "color": "#c0c0c0",
        "weight": 1149.758641
      }
    }
 ]
}

对这样的结构,使用如下代码进行导入networkx并计算相应指标

import csv
import json
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

#初始化G图
G = nx.Graph()
#初始化pos布局属性
pos={}
#打开gephi输出的json文件(此处只是由于我在gephi中构建好了....)
f = open('Untitled.json', 'r',encoding = 'utf-8')
content = f.read()
a = json.loads(content)
print(type(a))
#读取节点信息到列表
list_1=a['nodes']
#读取边信息到列表
list_2=a['edges']


#我使用索引key值去确定边的两个节点,因此需要构建一个字典储存key值与站点名称的关系
dic={}


#将节点添加到G图中
for lis1 in list_1:
    pid=lis1['key']
    label=lis1['attributes']['label']
    lon=lis1['attributes']['lon']
    lat=lis1['attributes']['lat']
    pos[label]=(lon,lat)#将每个节点的名称与其经纬度联系起来,后续绘图时可以根据经纬度布局
    dic[pid]=label
    print(pid,label,lon,lat)
    G.add_node(label,lon = lon,lat = lat)
#print(dic)


#这里使用了两站点的人口除以其最小值作为权重,所以读取站点人口做一个字典以便后续调用,没有实际参考意义,可以不要
dic_population={}
打开储存人口数据的csv
with open("POPU.csv", "r") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        dic_population[row[0]]=row[1]#创建一个字典,其键为row[0],也就是站点名称;值为row[1],也就是站点周边人口
print(dic_population)


#将边添加到G图中
for lis2 in list_2:
    #读取源节点和目标节点的key值
    s=lis2['source']
    t=lis2['target']
    #从名称字典中查找源节点的名字
    source=dic[s]
    print('source:',source)
    #从名称字典中查找目标节点的名字
    target=dic[t]
    print('target',target)
    #计算权重
    weight_origin=int(dic_population[source])+int(dic_population[target])
    weight=wei/1202
    print(source,target,weight)
    #将源节点,目标节点,边权重添加到G图中
    G.add_edge(source,target,weight=weight)


#情景A,移除部分节点
G.remove_node('**')
G.remove_node('**')

#情景B,移除部分边
G.add_edge('**','**',weight=111)
G.add_edge('**','**',weight=111)
G.add_edge('**','**',weight=111)
G.add_edge('**','**',weight=111)

#查刊边和节点的信息,可视情况使用
#print(G.nodes(data = True))
#print(G.edges(data=True))

#对G图根据经纬度布局绘图并保存为pdf
nx.draw(G,pos,node_shape='s',node_size = 5,node_color='red',edge_color='black',width= 0.3)
plt.savefig("plot2.pdf")


#计算各点点度中心性并写入文件
c_degree = nx.degree_centrality(G)
with open('degree_centrality.csv','a',newline='') as f2:
    writer = csv.writer(f2)
    for row in c_degree.items():
        writer.writerow(row)

#计算各点接近中心性并写入文件
clo_cen = nx.closeness_centrality(G)
with open('closeness_centrality.csv','a',newline='') as f3:
    writer = csv.writer(f3)
    for row in clo_cen.items():
        writer.writerow(row)

#计算各点中介中心性并写入文件
between_centra = nx.betweenness_centrality(G)
with open('betweenness_centrality.csv','a',newline='') as f4:
    writer = csv.writer(f4)
    for row in between_centra.items():
        writer.writerow(row)

#输出网络特征
print("节点总数:", G.number_of_nodes())

print("边总数:", G.number_of_edges())

aver_clus = nx.average_clustering(G)
print('平均聚类系数:',aver_clus)

print("网络传递性(transitivity): ", nx.transitivity(G))

aver_shor_path = nx.average_shortest_path_length(subG)
print('平均最短路径:',aver_shor_path)


diamet = nx.diameter(subG)
print('网络直径:',diamet)

degree_histo = nx.degree_histogram(subG)
print('度分布:',degree_histo)

d = dict(nx.degree(G))
print("平均度:", sum(d.values())/len(G.nodes))

global_effic=nx.global_efficiency(G)
print('网络效率:',global_effic)

largest = max(nx.connected_components(subG),key=len)
largest_connected_subgraph = subG.subgraph(largest)
print('最大子图规模',largest_connected_subgraph)

 

标签:weight,nx,导入,gephi,networkx,print,csv,节点,row
From: https://www.cnblogs.com/Vicrooor/p/17723397.html

相关文章

  • (五)Unity性能优化-Animation导入设置检查与优化
    原链接:https://github.com/lwwhb/Unity2022_SUNTAIL_Stylized_Fantasy_Village_OptimizationRig标签页AnimationTypeNone无动画Legacy旧版动画,不要用Generic通用骨骼框架Humanoid人形骨骼框架选择原则:无动画选择None非人形动画选择Generic人形动画人形动画需要Kinematic......
  • HIVE数据分析-导入数据库
    首先,启动hadoop以及hive出现以上进程,显示成功将改名后的文件上传到虚拟机在hive里面的defaul数据库创建表格usedefault;showtables;loaddatalocalinpath'/export/server/apache-hive-3.1.2-bin'intotablesales;将表格数据导入到表格中createtablesales(d......
  • 将hive数据库中的数据导入到mysql数据库中时需要注意到的问题
    在hive中使用jdbc将hive与mysql连接起来时一定要注意到每个数据库不同的字段个数,在打算直接复制时,不能只是修改表的名称和字段名称,还要记得修改几个?那里,个数要与字段名称保持一致!!!不然就会报错(比如我);......
  • Java POI导入超时问题如何解决
    前端导入Excel向后台发出请求时,后台立即返回信息“后台正在导入,请稍等!”,向redis中存入键isFinished的值为字符串“0”,并且开启一个线程来完成插入大量数据到数据库的工作,当插入完成则将redis中isFinished的值改为字符串“1”。前端收到“后台正在输入,请稍等!”后,此时导入按钮处于禁......
  • (五)Unity性能优化-Texture导入设置检查与优化
    TextureShape-2D最常用的2D纹理,默认选项-Cube一般用于天空和与反射探针,默认支持Default、Normal、SingleChannel几种类型纹理,可以通过Assets>Create>Legacy>Cubemap生成,也可以通过C#代码Camera.RenderToCubemap在脚本中生成-2DArray2D纹理数组,可以极大提高大......
  • 每日总结(hdfs文件导入到hive表)
     1CREATETABLEemployees(2idINT,3nameSTRING,4ageINT,5salaryFLOAT6)7ROWFORMATDELIMITED8FIELDSTERMINATEDBY','9STOREDASTEXTFILE;1011--将数据上传到HDFS12hadoopfs-putemployees.csv/input1314--导......
  • oracle数据库文件中的导入\导出(imp/exp命令)
    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于在oracle8i中 安装目录ora81BI......
  • 2023年CCF-百度松果基金评审结果来了,5位90后博导入围!
    9月12日,2023年CCF-百度松果基金(以下简称“松果基金“)评审结果正式公布,26位来自海内外的高校及机构的青年学者获得松果基金。松果基金将为学者提供经费、平台、数据等支持,助力AI科研工作成果孵化与创新。作为百度“500万AI人才培养”计划的重要组成部分,松果基金自成立以来备受学界......
  • 将Execl表格的数据导入数据库
    ///导入台区///</summary>///<paramname="savePath"></param>///<paramname="msg"></param>///<returns></returns>publicboolUpload(stringsavePath,outst......
  • 利用sqoop将hive数据导入导出数据到mysql
    运行环境 centos5.6  hadoop hivesqoop是让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具在使用过程中可能遇到的问题:sqoop依赖zookeeper,所以必须配置ZOOKEEPER_HOME到环境变量中。sqoop-1.2.0-CDH3B4依赖hadoop-core-0.20.2-......