导出neo4j数据并利用InteractiveGraph实现可视化

第一篇博客---新手裁缝

由于需要对知识图谱实现可视化,在网络上广泛浏览,发现了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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值