摘要:基于 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. nginx配置解决跨域访问

    场景:前后的分离项目,前端vue框架,打包后放在Tomcat里访问,端口是8080,后端服务端口8058.访问前端项目时,调用后端接口报跨域. 后端环境 正常访问端口8058 经过nginx配置(文末 ...

  2. 2023 版 Java和python开发线性代数探索

    目录 前景提示 需求 分析 1.初始化不需要指定矩阵的尺寸,并且可以直接传入数据. 2.可以计算2x2矩阵的逆 3.可以做2x2的矩阵乘法 Java版本开发 一. 开发详情 1.开发一个子类,如图所示 ...

  3. js性能优化解决办法

    1. 减少http请求次数:CSS Sprites, JS.CSS 源码压缩.图片大小控制合适:网页 Gzip,CDN 托管,data 缓存 ,图片服务器 2. 前端模板 JS + 数据,减少由于HT ...

  4. 【虹科干货】Redis Enterprise vs ElastiCache——如何选择缓存解决方案?

    使用Redis 或 Amazon ElastiCache 来作为缓存加速已经是业界主流的解决方案,二者各有什么优势?又有哪些区别呢? 为了提高 Web 应用程序和数据驱动服务的性能与效率,使用 Red ...

  5. liunx远程管理常用命令笔记

    1,关机/重启 shutdown -r now : 立刻重启的命令 2,查看或配置网卡信息 2.1  网卡和 IP 地址 2.2  ifconfig 用了管道和grep 查找到 IP 地址 2.3 p ...

  6. 一起来探索CSS中margin属性的奥秘吧!!

    作者:WangMin 格言:努力做好自己喜欢的每一件事 众所周知 margin属性 是用来声明当前所设置或者指定元素所有外边距的宽度,或者设置各边上外边距的宽度.一直以来我认为它是一个很简单的属性,但 ...

  7. iOS之H5与原生交互

    少年易学老难成,一寸光阴不可轻. 1. 利用UIWebView交互   iOS7之前通过UIWebView相关代理方法进行通信.原理:通过协议拦截实现h5对原生的调用,通过直接调用js来实现原生对h5 ...

  8. 在NET8中使用简化的 AddJwtBearer 认证

    开发环境 系统版本: win10 .NET SDK: NET8 开发工具:vscode 参考引用:使用 dotnet user-jwts 管理开发中的 JSON Web 令牌 注意:以下示例中的端口. ...

  9. Vue源码学习(十八):实现组件注册(一)Vue.component()和Vue.extend()

    好家伙, 0.完整代码已开源 https://github.com/Fattiger4399/analytic-vue.git 1.思路 1.1.什么是组件化? Vue 组件化是指将复杂的应用程序拆分 ...

  10. Tensorflow2.0:使用Keras自定义网络实战

    tensorflow2.0建议使用tf.keras作为构建神经网络的高级API 接下来我就使用tensorflow实现VGG16去训练数据 背景介绍: 2012年 AlexNet 在 ImageNet ...