第一篇博客---新手裁缝
由于需要对知识图谱实现可视化,在网络上广泛浏览,发现了InteractiveGraph这个效果极佳,功能比较完善的数据可视化开源项目。
但是奈何远程连接neo4j无法实现,排查错误:
①服务器500 - -解决不了
②看js代码---小白不懂并且代码量属实有亿点点多
③查看项目源码---各种类型文件,各种报错,一窍不通
解决不了,最后只能用最开始想的无脑办法按照项目里例子使用的文件格式,把自己的neo4j数据弄成那个格式了。 可是cypher--neo4j的查询语言也不太熟悉,研究半天 ,终于把match ...where ......return....搞明白了。接下来,开干:
# -*- coding: utf-8 -*-
from py2neo import Graph, NodeMatcher, RelationshipMatcher
import json
import numpy as np
class Neo4jToJson:
"""生成json文件"""
def __init__(self):
"""初始化数据"""
# 与neo4j服务器建立连接
self.graph = Graph("http://localhost:7474", username="neo4j", password="neo4jjfh")
self.links = []
self.nodes = []
def all_graph(self):
"""全图可视化"""
count = 0
'提取数据'
# matcher_1 = NodeMatcher(self.graph)
matcher_2 = RelationshipMatcher(self.graph) # 返回所有关系的id
# node_id = list(matcher_1)
relation_id = list(matcher_2)
nodes_data_all = self.graph.run("MATCH (n) RETURN id(n),n.name,labels(n),properties(n),n.rate").data()
'处理节点'
value = np.random.randint(5, 11)
for node in nodes_data_all:
count += 1
nodes = {'label': node['n.name'], 'value': value, 'id': node['id(n)'],
'categories': node['labels(n)'],
'info': str(node['properties(n)'])}
self.nodes.append(nodes)
print('节点完成:', count)
'处理关系'
count = 0
for k in relation_id:
count += 1
cy = "MATCH (n)-[r]->(b) WHERE id(r)=" + str(k) + " RETURN id(n),id(b),id(r),type(r)"
relationship = self.graph.run(cy).data()
relationship = list(relationship)[0]
relation = {'id': relationship['id(r)'], 'label': relationship['type(r)'], 'from': relationship['id(n)'],
'to': relationship['id(b)']}
self.links.append(relation)
print('边完成', count)
'格式化文件'
n_type = self.graph.schema.node_labels
n_type = list(n_type)
neo4j_json = {'categories': {}, 'data': {}}
for n in range(0, len(n_type)):
neo4j_json['categories'][str(n_type[n])] = n_type[n]
neo4j_json['data']['nodes'] = self.nodes
neo4j_json['data']['edges'] = self.links
json_data = json.dumps(neo4j_json, ensure_ascii=False)
return json_data
if __name__ == '__main__':
abc = Neo4jToJson()
js_data = abc.all_graph()
with open('D:\Java\\apache-tomcat-9.0.55-windows-x64\\apache-tomcat-9.0.55\webapps\igraph/test.json', 'w',
encoding='utf-8')as js:
js.write(js_data)
记录个小bug: 写if__name__ == '_main_':的时候还直接写成了==‘main’,被折磨了一会儿
属实是菜。
平时做裁缝缝缝补补,改别人的代码可以,别人写的代码也能懂,各种bug也能csdn搜着解决,但是不自己从头写一写是真不行。
纪念自己第一次写博客---未来加油!做个好裁缝(bushi