摘要:基于 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':breakelse: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':breakelse: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. 实例讲解ThinkPHP的UploadFile文件上传类的详细用法

    ThinkPHP文件上传自带了上传类,使用起来非常方便,我们将以一个文件上传实例来讲解ThinkPHP上传类的实际用法,上传类使用时有详细的中文注释,可以非常方便的告诉你类的一些方法或变量的使用方法. ...

  2. python去除图片上的文字_Python图像处理之识别图像中的文字(实例讲解)

    ①安装PIL:pip install Pillow(之前的博客中有写过) ②安装pytesser3:pip install pytesser3 ③安装pytesseract:pip install p ...

  3. 微信上的python训练营_用 Python 爬了爬自己的微信朋友(实例讲解)

    最近几天干啥都不来劲,昨晚偶然了解到 Python 里的 itchat 包,它已经完成了 wechat 的个人账号 API 接口,使爬取个人微信信息更加方便.鉴于自己很早之前就想知道诸如自己微信好友性 ...

  4. kindeditor php教程,kindeditor 加入七牛云上传的实例讲解

    七牛云上传主要有两种: 服务端上传 前端上传,前端又分两种返回方式: 1).重定向返回,可以解决ajax跨域的问题 2).回调返回,七牛云先向服务端要返回数据,再由七牛云返回前端,解决不支持重定向的请 ...

  5. python 按键精灵_python中用ctypes模拟点击的实例讲解

    在小编学习python中的模拟点击之前,我们想要对某一项操作进行自动指令的重复,可以选择大家熟知的按键精灵.那么对比python的模拟点击,小编还是觉得python中使用更加方便.这样说不能让有些小伙 ...

  6. java实现页面高效刷新_selenium高效应对Web页面元素刷新的实例讲解

    当我们在页面上进行selenium.type()或者selenium.click()操作的时候,往往需要需要等待一个元素的出现,对于一般的网页,当我们进入一个新页面的时候,往往会使用selenium. ...

  7. php 返回一个json对象,PHP给前端返回一个JSON对象的实例讲解

    解决问题:用php做后台时,如何给前端发起的AJAX请求返回一个JSON格式的"对象": 说明:我本身是一个前端,工作久了之后发现要是不掌握一门后端开发语言的话,总感觉有点无力.最 ...

  8. python简易版实例_Python3之简单搭建自带服务器的实例讲解

    WEB开发,我们先从搭建一个简单的服务器开始,Python自带服务模块,且python3相比于python2有很大不同, 在Python2.6版本里,/usr/bin/lib/python2.6/ 目 ...

  9. ztree树封装 json实例_小白7天入门PHP Web开发 - Day 6[下](综合)个人博客实例讲解用户数据的存储...

    <小白7天入门PHP Web开发>系列文章,面向单纯善良的完全不懂Web开发编程的入门速成课程,小白们如果感兴趣可以研读此系列文章,也可以连线提问.各路大神有何指教还请指点一二.希望各路大 ...

最新文章

  1. 刷手机被AI公开点名,比利时议员在议会上不能再「分心」了
  2. Linux0.11中对文本文件进行修改的策略
  3. 转盘在转动的同时ajax异步加载,用jQuery旋转插件jqueryrotate制作转盘抽奖.pdf
  4. MySQL查看和修改表的存储引擎
  5. java中文 x_java环境url中文参数乱码处理
  6. Android NDK学习笔记1:基础
  7. 【数据结构与算法】之深入解析“验证二叉搜索树”的求解思路与算法示例
  8. [vue] 移动端ui你用的是哪个ui库?有遇到过什么问题吗?
  9. 实例45:python
  10. Java枚举的定义,使用
  11. 也谈跨域数据交互解决方案
  12. 2场直播,本周二四丨Oracle drop table MySQL HeatWave
  13. kernel: TCP: time wait bucket table overflow
  14. CentOS 7 下挂载新硬盘
  15. Python3 验证二代身份证号码信息
  16. 如何关闭Win10易升更新?
  17. 照片怎么转换成pdf?
  18. 入侵服务器的一种方法
  19. 【寻找最佳小程序】09期:轻芒杂志——杂志感设计,美美地阅读各领域杂志...
  20. Android使用高德地图api实现基础定位

热门文章

  1. 【HUSTOJ】Online Judge
  2. 地理信息科学前沿-[热词]
  3. 荣耀v10图片是html格式,就长这样?荣耀V10真机图赏
  4. FAQ:Springboot项目运行过程中java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
  5. 嵌入式Linux驱动笔记(二十五)------Input子系统框架
  6. 360篡改主页如何恢复
  7. 记一次微信公众号的开发与后台搭建
  8. 高等数学-微分方程思维导图
  9. 着色器实例 代码+注释 更新中【描边、卡通渲染、法线颜色、贴图动画等等】
  10. 来上海的第五天,阿里巴巴前端实习生电话面试整理