文章目录
前言
完成了作业的第一题,记录一下 。比较简单主要是为了熟悉networkx的使用。(没有选择SNAP)
一、题目要求
1. Wikipedia vote网络的基本分析:
数据集下载地址:http://snap.stanford.edu/data/wiki-Vote.html使用分析工具加载Wikipedia voting 网络。该网络为有向图。节点集合V,边集E,边(a, b)表示用户a投票给用户b。
计算并打印如下统计结果:
(1)网络中的节点数量
(2)网络有自环的节点数量
(3)网络中有向边的数量
(4)网络中无向边的数量
(5)网络中的互惠边的数量
(6)出度非零的节点数量
(7)入度非零的节点数量
(8)出度大于10的节点数量
(9)入度小于10的节点数量
二、需要使用的函数的介绍
1.导入networkx
import networkx as nx
2.建图DiGraph()
G = nx.DiGraph(edge_list) #edge_list是一个边集
3.获取点集nodes
node_list = G.nodes #node_list中的是所有的点
4.遍历边集edges()
for u, v in G.edges():#在这下面可以加上对应的代码
5.获取由出度构成的图pred
out_degreeG = G.pred #out_deggreeG是由出度构成的图
6.获取由入度构成的图succ
in_degreeG = G.succ#in_deggreeG是由出度构成的图
在第一个题中就使用以上函数就够了,剩下的就是python中的list,dict中的操作了。
三、代码
# -*- coding: utf-8 -*-
import networkx as nx
import argparse
import matplotlib.pyplot as plt
def getEdge(data_path):
edge_list = []
with open(data_path,encoding='utf-8') as f:
line = f.readline()
while line != "":
if(line == '\n' or line[0] == '#'):
line = f.readline()
continue
edge = tuple(map(int,line[:-1].split(' '))) #这个不是空格
edge_list.append(edge)
line = f.readline()
return edge_list
def main(option):
file_path = option.file_path
#自己写的文件解析,不清楚networkx有没有内置的方法可以直接导入
edge_list = getEdge(file_path)
G = nx.DiGraph(edge_list)
node_list = G.nodes
cnt_nodes = len(node_list)
print("图中的结点数量:", cnt_nodes)
cnt_self = 0
for u, v in G.edges():
if (u == v):
cnt_self += 1
print("自环的节点数量:", cnt_self)
print("有向边的数量:", G.number_of_edges())
out_degreeG = G.pred
cnt_undir = 0
for node in out_degreeG:
for edge in out_degreeG[node]:
node_to = edge
if (node in out_degreeG[node_to]):
cnt_undir += 1
print("无向边的数量:", cnt_undir)
# 互惠边的概念与无向边类似
print("互惠边的数量:", cnt_undir)
cnt_out_zero = 0
for node in out_degreeG:
if (out_degreeG[node] == {}):
cnt_out_zero += 1
print("出度为零的节点数量:", cnt_out_zero)
in_degreeG = G.succ
cnt_in_zero = 0
for node in in_degreeG:
if (in_degreeG[node] == {}):
cnt_in_zero += 1
print("入度为零的节点数量:", cnt_in_zero)
cnt_out_u10 = 0
for node in out_degreeG:
if (len(out_degreeG[node]) > 10):
cnt_out_u10 += 1
print("出度大于零的节点数量:", cnt_out_u10)
cnt_in_l10 = 0
for node in in_degreeG:
if (len(in_degreeG[node]) < 10):
cnt_in_l10 += 1
print("入度为零的节点数量:", cnt_in_zero)
if __name__ == "__main__":
arg = argparse.ArgumentParser()
arg.add_argument("--file_path",type=str,default=r"Wiki-Vote.txt")
opt = arg.parse_args()
main(opt)
运行结果
图中的结点数量: 7115
自环的节点数量: 0
有向边的数量: 103689
无向边的数量: 5854
互惠边的数量: 5854
出度为零的节点数量: 4734
入度为零的节点数量: 1005
出度大于零的节点数量: 1906
入度为零的节点数量: 1005
本文通过使用NetworkX库对Wikipedia投票网络进行了基本分析,包括节点数、自环节点数等,并介绍了相关函数的用法。

被折叠的 条评论
为什么被折叠?



