前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >知难而上,砥砺前行

知难而上,砥砺前行

作者头像
公众号guangcity
发布2019-09-20 14:02:34
1.1K0
发布2019-09-20 14:02:34
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

Apoc导入及Neo4J数据动态交互可视化


今日知图

异常处理

如果vi异常退出,在磁盘上会保存有交换文件

下次再使用vi编辑该文件时,会看到多了个.swp文件。按字母d可以删除文件!

保存退出

代码语言:javascript
复制
:x 保存并退出

0.说在前面1.数据处理2.Apoc导入3.Neo4J导入展示4.Web开发5.动态交互可视化6.可视化展示7.作者的话

0.说在前面

回顾

之前发过一篇天眼反爬虫文章,如果认真看了的,会发现我研究的知识图谱与这个爬虫很相关,所以我本片文章将利用天眼数据来进行图数据库存储,及可视化!

关于下面所涉及的知识点,基本上以前没有学过,那么如何高效的学习以及实现呢,理论or实战

难点

第一:这次的存储不是普通的存储方式,也不是用代码来实现导入,而是使用Apoc来进行导入,从0开始入坑Apoc;

第二:cypher语法学习,从0入坑;

第二:这次的可视化不是之前学到的d3.js 而是 neovis.js,从0入坑;

吐槽

关于Apoc的难点,由于之前从来没学过,一脸懵逼,在我处理过程中,发现之前的cypher语法基本忘完!在使用Apoc使用的时候卡在一个地方,卡了一下,我仍然没有放弃,卡了一下午与一晚上,直到最后关门了才回去,回去后问大佬,就被顶了回来,真的气炸了,人与人的交流就这么难?

我就不信了,做不出来,就这样,昨日下午,重拾心中的那颗地雷,重新开始搞,然后成功了,怎么成功的呢,后面详细介绍。

学习方法

这次apoc及可视化成功关键是什么,自己反思了一下,成功之处在于:换角度思考,这里说的换角度以实际例子来说明,首次接触apoc,一直想着通过foreach的语法去循环遍历json的key与value,直接取出来,设置label,可是在neo4j中,label是字符串去掉双引号,我就死循环在这里了,如何将一个字符串去掉双引号,前日问了大佬,直接给我说,你去写个函数,这能写函数?我想说。。可以写吗?后来查验,不能写,也不会写,我就放弃了这个思路,换个角度,从设置属性在删掉属性,取属性来解决,终于搞定了,虽然思路绕了点,但是我成功了。这就是换角度思考的作用,从一个小问题卡死半天,到几分钟就可以解决。

这里可视化并没有按照我所学的d3,为何?很简单,想学更多知识,想研究更多,对的,就是想折腾更多,生命不息,折腾不止!我就是喜欢爱折腾,我就喜欢尝试新的,新的导入方式,新的可视化方法。就这么简单,多多尝试,你会有不一样的收获!

如何学习,如何解决问题?当然是谷歌,百度我不用,谷歌啥,什么作为关键词?这些都是很重要的问题,学会搜索,才抓住了根!以这里的实际问题为例:对于apoc,我解决是直接看api解决的,真的英文api比中文api好太多,你不得不信,虽然英文很伤,但还是要看!

其次,我极力推荐的一个工具就是,,,GitHub,我用它解决了我的可视化问题,就这么简单!怎么搜索,直接搜neo,js,就可以了,为什么这么搜索?neo4j是数据库,js是可视化技术,不管是d3还是这里的vis都是js扩展,这么宽的搜索,必然会有很多内容呈现。

当更多显现于你的眼前,你需要做的就是筛选,如何筛选?那就是精确化搜索

以上就是我忙碌的一日左右的收获,现在分享给各位,欢迎各位留言交流!

下面来实战一下我的研究!

1.数据处理

这里主要介绍数据处理,分为总数据,节点数据与边数据!

总数据:tianyan.json

看到如下数据为nodes与relationships相关信息

代码语言:javascript
复制
{
    "nodes": [
        {
            "id": 3026932579,
            "labels": [
                "Company"
            ],
            "properties": {
                "name": "四川笃行致信科技有限公司"
            }
        },
       ...
       ...
    ],
    "relationships": [
        {
            "startNode": 3026932579,
            "properties": {
                "endtime": 253392422400000,
                "starttime": 1509379200000,
                "labels": [
                    "参股"
                ]
            },
            "type": "INVEST_C",
            "endNode": 143448035
        },
       ...
       ...
    ]
}

提取关系:rel.json

为了后续处理方便,直接将relationships后面的所有数据放在另外一个单独文件:rel.json

这里完全没有必要手动,在爬取收据的时候,直接分开写入即可,非常简单!

数据如下:

代码语言:javascript
复制
[
  {
    "startNode": 3026932579,
    "properties": {
      "endtime": 253392422400000,
      "starttime": 1509379200000,
      "labels": [
        "参股"
      ]
    },
    ...
    ...
]

2.Apoc导入

节点创建

apoc语法在第一行,后面 的都是cypher语法,这里我通过直接给节点设置一个labels属性,后面对这个节点定义label的时候,直接访问就可以了,然后删除掉这个labels属性,就是一个完美实现!

这里的处理就是卡了我半天的代码,就这里,我自己实现了,这就是代码给我的乐趣~~~

注意:tianyan.json以及后面的数据放在根目录,比如D盘就直接在D盘,不要往某个文件夹下放,访问不到!

代码语言:javascript
复制
call apoc.load.json("file:///tianyan.json") yield value
FOREACH (each in value.nodes|
create (n) 
set n.name=each["properties"]["name"]
set n.id=each["id"]
set n.labels=each["labels"][0]
)

设置节点label

这里就是上面节点创建后,为节点设置label的难点处理!

代码语言:javascript
复制
MATCH (n)
call apoc.load.json("file:///tianyan.json") yield value
CALL apoc.create.addLabels( id(n), [ n.labels ] ) YIELD node
remove n.labels
return node

节点去重

有两个节点是重复的,如下图所示:

原始数据节点:

导入节点:

代码语言:javascript
复制
MATCH (n:Company) 
WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count 
WHERE count > 1 
CALL apoc.refactor.mergeNodes(nodelist) YIELD node 
RETURN node

去掉重复节点,如下图所示:

创建人与公司关系

这里首先我们根据上图,可以知道,首先创建人与公司关系,人指向公司,如下面所实现!

代码语言:javascript
复制
call apoc.load.json("file:///rel.json") yield value
match (a:Human {id:value.startNode})
match (b:Company {id:value.endNode})
call apoc.create.relationship(a,value.properties.labels[0],{},b) yield rel
return rel

创建公司与公司关系

上面图可以看到,公司之间还有关系,这里创建公司与公司关系!

代码语言:javascript
复制
call apoc.load.json("file:///rel.json") yield value
match (a:Company {id:value.startNode})
match (b:Company {id:value.endNode})
call apoc.create.relationship(a,value.properties.labels[0],{},b) yield rel
return rel

3.Neo4J导入展示

最后成功导入后,如下两图对比:

我们将其与天眼官网的图对比,一模一样~~,成功!!!

4.Web开发

这里使用Python web的Django框架进行搭建Web服务!

利用Pytcharm一键创建Django项目后,需要做下面配置!

配置urls.py

代码语言:javascript
复制
urlpatterns = [
    url(r'^index', views.index_show),
]

配置views.py

代码语言:javascript
复制
def index_show(request):
    return render(request, "index.html")

上述两步的意思是,通过访问index直接可以渲染出index.html页面,而这个页面也就是我们最终的可视化Neo4J数据的页面!

5.动态交互可视化

这里可视化使用neovis.js,更多的api使用,查看如下官网!

https://github.com/neo4j-contrib/neovis.js 连接Neo4J

代码语言:javascript
复制
server_url: "bolt://localhost:7687",
server_user: "neo4j",
server_password: "xxx",

节点可视化

代码语言:javascript
复制
labels: {
    "Character": {
    "caption": "MATCH (n) RETURN n.name",
    }
},

关系可视化

代码语言:javascript
复制
relationships: {
    "INTERACTS": {
        "thickness": "weight",
        "caption": false
    }
},

页面初始化展示

代码语言:javascript
复制
initial_cypher: "MATCH (n)-[r]->(m) RETURN n,r,m"

6.可视化展示

支持cypher查询及点击节点查看信息等!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apoc导入及Neo4J数据动态交互可视化
    • 0.说在前面
      • 1.数据处理
        • 2.Apoc导入
          • 3.Neo4J导入展示
            • 4.Web开发
              • 5.动态交互可视化
                • 6.可视化展示
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档