摘要:基于 Graph Explorer 在 Jupyter 上进行图探索,可以大大降低编码成本,丰富 JupyterLab 的数据表现力。

本文分享自华为云社区《将 Graph Explorer 搬上 JupyterLab:使用 GES4Jupyter 连接 GES 并进行图探索》,作者: 蜉蝣与海 。

GES4Jupyter 是一款可以在 JupyterLab 中连接访问 GES 并可视化的工具。工具中封装了部分 GES 业务面接口,并提供对返回数据的可视化能力。基于该工具在 Jupyter 上进行图探索,可以大大降低编码成本,丰富 JupyterLab 的数据表现力。

一、使用前准备

1. 华为云账号

在使用华为云服务之前您需要注册华为云帐号。通过此帐号,只需为使用的服务付费,即可使用所有华为云服务。

注册华为云账号步骤请点击:《华为云注册介绍》

注册成功后即可自动登录华为云,您需要完成 “实名认证” 才可以正常使用服务。

2. OBS 对象存储服务

OBS 即对象存储服务(Object Storage Service),GES 将 OBS 作为数据源导入数据。

数据若想导入图引擎服务 GES,需要先上传至 OBS。详情参考:华为云图引擎服务 GES 实战——创图

3. GES 图引擎服务

使用 GES4Jupyter 前,需要在图引擎服务控制台创建一个 GES 图实例,并且导入数据。本例中使用的数据源是新冠患者轨迹追溯数据集 v2,可以从 AI Gallery 中下载。详情参考:华为图引擎文档 - 快速入门和华为云图引擎服务 GES 实战 —— 创图

4. 获取调用 GES 业务面 API 必备的参数

调用 GES API 需要输入 token 鉴权信息,认证鉴权能力依赖华为云统一身份认证服务 IAM。获取 Token 需要用户名密码、图所在区域等信息。详情查看:华为图引擎文档 - 业务面 API 认证鉴权和调用 GES 服务业务面 API 相关参数的获取

二、使用 GES4Jupyter 连接 GES 服务

从华为云首页进入 ModelArts 控制台,点击 CodeLab 新建一个 Jupyter Notebook,并等待资源初始化完成。

新建一个 Notebook,使用下列代码获取 GES4Jupyter 程序和资源文件。

import moxing as mox
mox.file.copy('obs://obs-aigallery-zc/GES/ges4jupyter/beta/ges4jupyter.py', 'ges4jupyter.py')
mox.file.copy('obs://obs-aigallery-zc/GES/ges4jupyter/beta/ges4jupyter.html', 'ges4jupyter.html')

在 Notebook 中输入代码后,将该段文本配置为代码,然后点击左侧的运行按钮,并等待运行完成。

点击左上角的 “+” 号新建代码片段,输入下列代码段并运行,完成 GES4Jupyter 的初始化。

from ges4jupyter import GESConfig, GES4Jupyter, read_csv_config
eip = ''
project_id = ''
graph_name = ''
iam_url = ''
user_name = ''
password = ''
domain_name = ''
project_name = ''
port = 80
eip, project_id, graph_name, iam_url, user_name, password, domain_name, project_name, port = read_csv_config('cn_north_4_graph.csv')
config = GESConfig(eip, project_id, graph_name,
iam_url = iam_url,
user_name = user_name,
password = password,
domain_name = domain_name,
project_name = project_name,
port = port)
ges_util = GES4Jupyter(config, True);

上面代码中涉及的字段含义基本分为两大类,简单介绍下:

  • 用于构造 API 的参数:eip,projectId,graph_name, port 这四个参数都参与构造了业务面请求的 url。eip 与 graph_name 两个参数在创图时容易获得,port 参数默认为 80,开启安全模式时为 443,关于 projectId,可参考图引擎官网文档 - 获取项目 id,从图控制台根据图所属的区域来获取项目 id。
  • 用于在请求 API 前获取 token 的参数:iam_url, user_name, password, domain_name,project_name,GES4Jupyter 会使用这四个参数获取 token,进而在使用 api 时进行鉴权,相关参数获取请参考:华为图引擎文档 - 业务面 API 认证鉴权和调用 GES 服务业务面 API 相关参数的获取

除了手动输入这部分参数,也可以将参数构造为一个 csv 文件上传至 CodeLab 平台,而后执行图示 read_csv_config 方法,一键获取所有参数。

如图为一个区域为北京四的图的示例文件,关键信息(如 ip、projectId、图名、账户名、密码、iam 子账号名)通过马赛克隐藏。

对于新创的图,使用下列代码段可以创建点边索引,方便使用 cypher:

print('开始创建点索引:')
job_id = ges_util.build_vertex_index()
job_result = ges_util.get_job(job_id)
if 'errorCode' not in job_result:
for i in range(100):
if job_result['status'] == 'success':
break
else:
time.sleep(1)
job_result = ges_util.get_job(job_id)
print('点索引创建完成')
print('开始创建边索引:')
job_id = ges_util.build_edge_index()
job_result = ges_util.get_job(job_id)
if 'errorCode' not in job_result:
for i in range(100):
if job_result['status'] == 'success':
break
else:
time.sleep(1)
job_result = ges_util.get_job(job_id)
print('边索引创建完成')

如果图比较大,且没有基于 label 过滤方面的诉求,也可以关闭 cypher 的索引开关。

ges_util.cypher_query("call dbms.parameter('needNodeIndex', false)");
ges_util.cypher_query("call dbms.parameter('needEdgeIndex', false)");

执行 summary 方法可以看到点边分布:

三、使用 GES4Jupyter 调用业务面接口并进行可视化

GES4Jupyter 支持调用 cypher 语句,并可视化 cypher 的结果。在初始化完成 GES4Jupyter 后,使用下列代码可以执行并可视化 cypher 查询:

cypher_result = ges_util.cypher_query("match (n)-[r]->(m) return n,r,m limit 10",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result)

在 Notebook 中输入该段代码,点击运行,可以看到 Notebook 中效果:

同时,工具还提供了其他选项卡,不仅可以看到可视化 Graph 结构,还可以看到表格数据、以及原始的 json 数据。

GES4Jupyter 也提供了能力对 gremlin 语言返回的点边数据进行可视化。

gremlin_result = ges_util.gremlin_query("g.V().outE().bothV().path().limit(2)");
ges_util.format_gremlin_result(gremlin_result)

 

同时,对于 ges 的 path-query 接口,当返回数据为 tree 格式时,GES4Jupyter 也能提供较好的支持。

result = ges_util.path_query({
"repeat": [
{
"operator": "bothV",
"vertex_filter": {
"property_filter": {
"leftvalue": {
"id": ""
},
"predicate": "NOTIN",
"rightvalue": {
"value": ["北京"]
}
}
}
}
],
"until": [
{
"vertex_filter": {
"property_filter": {
"leftvalue": {
"id": ""
},
"predicate": "=",
"rightvalue": {
"value": ["额济纳旗"]
}
}
}
}
],
"times": 5,
"queryType": "Tree",
"vertices": ["北京病例2"]
})
ges_util.format_path_query(result)

 

四、图引擎官网有更多案例可以使用 GES4Jupyter 上手体验

本文的数据集取自华为云图引擎官网 “新冠患者轨迹追溯” 数据集,notebook 代码取自 “新冠患者轨迹追溯” 案例,在图引擎官方网站上,还有其他动手实践案例,配套 ModelArts 的 CodeLab,可以实现 “开箱即用”,提供丰富的场景和大家一起认识图、了解图、使用图。

参考项目:https://github.com/merqurio/neo4jupyter

点击关注,第一时间了解华为云新鲜技术~

实例讲解将Graph Explorer搬上JupyterLab的更多相关文章

  1. S3C2440上RTC时钟驱动开发实例讲解(转载)

    嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 共享资源,欢迎转载:http:/ ...

  2. jQuery.uploadify文件上传组件实例讲解

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  3. float实例讲解

    float实例讲解 float是个强大的属性,在实际前端开发过程中,人们经常拿它来进行布局,但有时,使用的不好,也麻烦多多啊. 比如,现在我们要实现一个两列布局,左边的列,宽度固定:右边的列,宽度自动 ...

  4. OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

    一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open protocol to allow the creation and consumption of quer ...

  5. Maven聚合与继承的实例讲解(一)

    概述 在javaweb高速发展的今天,我们软件设计人员往往会用很多种方式对软件划分模块,目的就是为了能有清晰的设计和低耦合性的,高重用性的软件.Maven有很好的依赖管理系统(Dependency M ...

  6. 实例讲解Oracle数据库设置默认表空间问题

    实例讲解Oracle数据库设置默认表空间问题   实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在O ...

  7. 基于tcpdump实例讲解TCP/IP协议

    前言 虽然网络编程的socket大家很多都会操作,但是很多还是不熟悉socket编程中,底层TCP/IP协议的交互过程,本文会一个简单的客户端程序和服务端程序的交互过程,使用tcpdump抓包,实例讲 ...

  8. makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏

    一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...

  9. 实例讲解Linux系统中硬链接与软链接的创建

    导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说 ...

  10. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

随机推荐

  1. DFS洛谷4961(求联通块)

    说实话这个题审题把我卡了半天,还是我太菜 直接上代码吧 偷个懒用万能库. #include"bits/stdc++.h" using namespace std; int mp[1 ...

  2. 创建CI/CD流水线中的IaC前,需要考虑哪些事项?

    许多软件工程团队通常会遵循相似的方法来交付基础设施以支持软件开发生命周期.为了缩小基础设施配置方式与应用程序环境部署方式之间的差距,许多 DevOps 团队将其基础设施即代码(IaC)模块直接连接到其 ...

  3. Unity学习笔记--基础

    基础 3D数学 Mathf函数库 print(Mathf.PI); print(Mathf.Abs(-10)); print(Mathf.CeilToInt(1.2f));//向上取整 print(M ...

  4. RL 基础 | Policy Iteration 的收敛性证明

    (其实是专业课作业 感觉算法岗面试可能会问,来存一下档) 目录 问题:证明 Policy Iteration 收敛性 0 Background - 背景 1 Policy Evaluation con ...

  5. 【爬虫】一次爬取某瓣top电影前250的学习记录

    先贴上爬取的脚本: import requests import re for i in range(1,11):     num=(i-1)*25     url=f"https://mo ...

  6. Java中的对象到底是什么

    对象是现实世界中的一切物体(实体,或能够定义的东西) Smalltalk是第一个成功的面向对象的语言 在编程世界中,对象通过类来实例化:同一个类型的对象可以接受相同的消息 状态+行为+标识=对象 每个 ...

  7. disabled_button

    根据题目提示,是前端的知识 进入页面,flag按钮灰了按不下去 右键检查发现按钮地方的样式,发现有一个disabled,这里就直接把他删掉点击回车就可以点击了

  8. NEFU OJ Problem1485 贪吃蛇大作战 题解

    Problem:F Time Limit:1000ms Memory Limit:65535K 题目 Description 贪吃蛇大家一定都玩过吧,现在宋哥也要玩这个游戏,最初的时候贪吃蛇从屏幕的左 ...

  9. 项目实战接口开发SpringBoot

    目录 一.springboot官方demo开发 二.使用SpringBoot开发get方法接口 三.一个要求携带cookie信息访问的get接口开发 四.需要携带参数的get请求两种开发方式 4.1 ...

  10. Mock框架moco学习笔记

    目录 一.Moco框架基本介绍 1. 什么是Moco 2. Moco原理简介 3. Moco的配置和运行 4. Moco启动以及第一个demo 二.mock 的启动及第一个demo 1. 创建star ...