1. 程式人生 > >基於BA網路模型的二部圖資料集生成

基於BA網路模型的二部圖資料集生成

 1 import random
 2 import networkx as nx
 3 import matplotlib.pyplot as plt
 4 
 5 
 6 def ba_bip_graph(n):
 7     g = nx.DiGraph()
 8     f = open("start.txt") 9 line = f.readline() 10 repeated_user_nodes = [] 11 repeated_item_nodes = [] 12 while line: 13 repeated_user_nodes.append(line.strip('\n').split(" ")[0]) 14 repeated_item_nodes.append(line.strip('\n').split(" ")[1]) 15 line = f.readline() 16 users = 5 17 user_line = 0 18 item_line = 0 19 while users < n: 20 m1 = random.randint(1, 10) #新增一個user,新增隨機0-9個邊 21 # print("m1:", m1) 22 item_target = set() 23 while len(item_target) < m1: 24 x = random.choice(repeated_item_nodes) 25  item_target.add(x) 26 label = [] 27 f = open("user_name.txt") 28 line = f.readline() 29 while line: 30 label.append(line.strip('\n').split(" ")[0]) 31 line = f.readline() 32 # print([label[user_line]] * m1) 33 # print(item_target) 34 g.add_edges_from(zip([label[user_line]]*m1, item_target)) 35  repeated_item_nodes.extend(item_target) 36 repeated_user_nodes.extend([label[user_line]]*m1) 37 user_line += 1 38  f.close() 39 #新增一個user,新增4個item 40 repeat = 0 41 while repeat < 4: 42 m2 = random.randint(1, 5) 43 # print("m2:", m2) 44 user_target = set() 45 while len(user_target) < m2: 46 x = random.choice(repeated_user_nodes) 47  user_target.add(x) 48 label = [] 49 f_item = open("item_name.txt") 50 line = f_item.readline() 51 while line: 52 label.append(line.strip('\n').split(" ")[0]) 53 line = f_item.readline() 54 g.add_edges_from(zip([label[item_line]]*m2, user_target)) 55  repeated_user_nodes.extend(user_target) 56 repeated_item_nodes.extend([label[item_line]] * m2) 57 item_line += 1 58  f.close() 59 repeat += 1 60 users = users+1 61 return g 62 63 64 BA = ba_bip_graph(10) 65 pos = nx.circular_layout(BA) 66 nx.draw(BA, pos, with_labels=True, node_size=20) 67 plt.show() 68 for edge in BA.edges: 69 print(edge)

程式中使用的檔案下載地址 https://files-cdn.cnblogs.com/files/xianyuxianyuxian/StartGraph.rar

說明:

在本文中,以start.txt中的資料為起始圖,左邊新增一個user,右邊新增4個item(可以修改).同時,新增一個點user,隨機產生n(0<n<10)條edge,新增一個點item,隨機產生n(0<n<5)條edge.函式的形參n是程式結束時user的數目。