利用neo4j、networkx、dgl、python做图分析挖掘
【1】最短路径算法dijkstra
【2】基于networkx的隐性集团关系识别模型
【3】基于Neo4j的担保社群型态分析挖掘
【4】基于python求有向无环图中target到其他节点全路径
【5】有向图中任意两点的路径
【6】图基础入门
【7】知识图谱快速入门
【8】基于graphsage的欺诈用户风险识别
主要是把图数据转化为文本的实践和尝试,后续应用于实际的业务场景中。图数据来源于基于graphsage的欺诈用户风险识别中的graph.bin,自然语言处理手段主要来源于基于word2vec的word相似度中的word2vec。
使用一个小图,举例说明如何进行转换,下图包含6个节点与6条关系。
利用dgl进行构图,代码如下。
import dgl
import torch
import numpy as np
import numpy
import os
from dgl.data import DGLDataset, save_graphs, load_graphs
graph = dgl.graph(([0, 1, 2, 3, 5, 2], [1, 2, 3, 4, 3, 0]))
利用dgl.sampling.random_walk构造图结构数据,搜索节点[0, 1, 2, 3, 4, 5]4度以内的路径。
paths = dgl.sampling.random_walk(graph, [0, 1, 2, 3, 4, 5], length=4)
paths[0].numpy().tolist()
def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表.
if os.path.exists(filename):
os.remove(filename)
file = open(filename,'a')
for i in range(len(data)):
s = str(data[i]).replace('[','').replace(']','').replace('-1','')#去除[],这两行按数据不同,可以选择
s = s.replace("'",'').replace(',','') +'\n' #去除单引号,逗号,每行末尾追加换行符
file.write(s)
file.close()
print("保存成功")
text_save('data.txt', paths[0].numpy().tolist())
data.txt文本数据里的内容如下
0 1 2 0 1
1 2 3 4
2 0 1 2 0
3 4
4
5 3 4
利用word2vec分析data.txt文本数据,得到节点相似度。
代码如下:
#coding:utf-8
import jieba
from gensim.models import Word2Vec
import gensim.models.word2vec as w2v
with open('data.txt',encoding='gb18030') as f:
document = f.read()
document_cut = jieba.cut(document)
result = ' '.join(document_cut)
print("type",type(result))
with open('data_seg.txt', 'w',encoding="utf-8") as f2:
f2.write(result)
model_file_name = 'data.model'
#模型训练,生成词向量
sentences = w2v.LineSentence('data_seg.txt')
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
model.save(model_file_name)
model = Word2Vec.load(model_file_name)
for vec in ['0','1','2','3','4', '5']:
print('--%s--的似度' %(vec))
print(model.wv.similar_by_word(vec, topn=15))
print('\n')
结果分析
--0--的似度
[('5', 0.13149002194404602), ('2', 0.0679759532213211), ('1', -0.013514956459403038), ('3', -0.04461709409952164), ('4', -0.11167057603597641)]
节点0与节点5、2的相似度较高。后续该idea考虑应用于实际业务场景中,分享应用案例。