FriendRecommendationMap
author:zoxiii
社交网络绘图
0-导入包
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
1-函数
1.1-Fun-0:绘制网络图
def plot_undigraph(nodes,edges,fname):
G=nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
nx.draw_networkx(G,pos=nx.shell_layout(G),with_labels=True,node_color='lightblue')
plt.title("FriendMap", fontsize = 20)
plt.savefig('%s-FriendMap.jpg'%fname.split('.')[0],dpi=256)
plt.show()
def plot_digraph(nodes,edges,fname):
G=nx.DiGraph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
nx.draw_networkx(G,pos=nx.shell_layout(G), arrows=True, with_labels=True,node_color='lightblue')
plt.title("FriendRecommendationMap", fontsize = 20)
plt.savefig('%s-FriendRecommendationMap.jpg'%fname.split('.')[0],dpi=256)
plt.show()
def plot_Map(nodes,edges,edges2,fname):
G=nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
G.add_edges_from(edges2)
nx.draw_networkx_nodes(G,pos=nx.shell_layout(G),nodelist=nodes,node_color='lightblue')
nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edges,width=2)
nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edges2,width=1,style='dotted',edge_color='r')
nx.draw_networkx_labels(G,pos=nx.shell_layout(G))
plt.title("TotalMap", fontsize = 20)
plt.savefig('%s-TotalMap.jpg'%fname.split('.')[0],dpi=256)
plt.show()
1.2-Fun-1:社交网络
文件格式为:
0 1,2,3
1 0,2,3,4,5
2 0,1,4
3 0,1,4
4 1,2,3
5 1,6
6 5
代码为:
def FriendMap(fname):
## set parameters
nodes = []
Enodes = []
edges = []
temp = []
## read data
with open(fname,'r',encoding='utf-8') as f:
for line in f.readlines():
s=line[:-1].split('\t') # bug:不知道为啥test这个文件的Tab识别不出?
if len(s) == 1:
s=line[:-1].split(' ')
nodes.append(s[0])
Enodes.append(s[1])
#print(nodes)
#print(Enodes)
## Get edges
for i in range(0,len(Enodes)):
temp = Enodes[i].split(',')
for j in range(0,len(temp)):
edges.append((nodes[i],temp[j]))
#print(edges)
return nodes,edges
1.3-Fun-2:推荐好友网络
文件格式为:
0 4 (3: [2, 3, 1]),5 (1: [1])
1 6 (1: [5])
2 3 (3: [1, 0, 4]),5 (1: [1])
3 2 (3: [4, 0, 1]),5 (1: [1])
4 0 (3: [3, 2, 1]),5 (1: [1])
5 0 (1: [1]),2 (1: [1]),3 (1: [1]),4 (1: [1])
6 1 (1: [5])
代码为:
def FriendRecommendationMap(fname):
## set parameters
nodes = []
Enodes = []
edges = []
temp = []
## read data
with open(fname,'r',encoding='utf-8') as f:
for line in f.readlines():
s=line[:-1].split('\t') # bug:不知道为啥test这个文件的Tab识别不出?
if len(s) == 1:
s=line[:-1].split(' ')
nodes.append(s[0])
Enodes.append(s[1])
# print(nodes)
# print(Enodes)
## Get edges
for i in range(0,len(Enodes)):
temp = Enodes[i].split('),')
for j in range(0,len(temp)):
edges.append((nodes[i],temp[j].split(' (')[0]))
# print(edges)
return nodes,edges
2-Run
2.1-soc-test.txt
fname = 'soc-test.txt' # 文件路径
nodes,edges = FriendMap(fname)
plot_undigraph(nodes,edges,fname)
fname2 = 'Output.txt'
nodes2,edges2 = FriendRecommendationMap(fname2)
plot_digraph(nodes2,edges2,fname2)
plot_Map(nodes,edges,edges2,fname)
2.2-soc-LiveJournal1Adj.txt
由于该文件数据量过大,绘制出的图像节点和边重合,且耗费大量时间,所以这里没有完全运行!
fname = 'soc-LiveJournal1Adj.txt' # 文件路径
nodes,edges = FriendMap(fname)
plot_undigraph(nodes,edges,fname)
fname2 = 'Output2.txt'
nodes2,edges2 = FriendRecommendationMap(fname2)
plot_digraph(nodes2,edges2,fname2)
plot_Map(nodes,edges,edges2,fname)