【Hadoop】【MapReduce】好友推荐网络绘图


FriendRecommendationMap
author:zoxiii


【前提】实现实例:FriendRecommendation

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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zoxiii

越打赏越生长

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

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

打赏作者

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

抵扣说明:

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

余额充值