• 实例讲解将Graph Explorer搬上JupyterLab


    摘要:基于 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 程序和资源文件。

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

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

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

    1. from ges4jupyter import GESConfig, GES4Jupyter, read_csv_config
    2. eip = ''
    3. project_id = ''
    4. graph_name = ''
    5. iam_url = ''
    6. user_name = ''
    7. password = ''
    8. domain_name = ''
    9. project_name = ''
    10. port = 80
    11. eip, project_id, graph_name, iam_url, user_name, password, domain_name, project_name, port = read_csv_config('cn_north_4_graph.csv')
    12. config = GESConfig(eip, project_id, graph_name,
    13. iam_url = iam_url,
    14. user_name = user_name,
    15. password = password,
    16. domain_name = domain_name,
    17. project_name = project_name,
    18. port = port)
    19. 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:

    1. print('开始创建点索引:')
    2. job_id = ges_util.build_vertex_index()
    3. job_result = ges_util.get_job(job_id)
    4. if 'errorCode' not in job_result:
    5. for i in range(100):
    6. if job_result['status'] == 'success':
    7. break
    8. else:
    9. time.sleep(1)
    10. job_result = ges_util.get_job(job_id)
    11. print('点索引创建完成')
    12. print('开始创建边索引:')
    13. job_id = ges_util.build_edge_index()
    14. job_result = ges_util.get_job(job_id)
    15. if 'errorCode' not in job_result:
    16. for i in range(100):
    17. if job_result['status'] == 'success':
    18. break
    19. else:
    20. time.sleep(1)
    21. job_result = ges_util.get_job(job_id)
    22. print('边索引创建完成')

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

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

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

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

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

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

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

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

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

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

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

    1. result = ges_util.path_query({
    2. "repeat": [
    3. {
    4. "operator": "bothV",
    5. "vertex_filter": {
    6. "property_filter": {
    7. "leftvalue": {
    8. "id": ""
    9. },
    10. "predicate": "NOTIN",
    11. "rightvalue": {
    12. "value": ["北京"]
    13. }
    14. }
    15. }
    16. }
    17. ],
    18. "until": [
    19. {
    20. "vertex_filter": {
    21. "property_filter": {
    22. "leftvalue": {
    23. "id": ""
    24. },
    25. "predicate": "=",
    26. "rightvalue": {
    27. "value": ["额济纳旗"]
    28. }
    29. }
    30. }
    31. }
    32. ],
    33. "times": 5,
    34. "queryType": "Tree",
    35. "vertices": ["北京病例2"]
    36. })
    37. ges_util.format_path_query(result)

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

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

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

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

  • 相关阅读:
    G1垃圾回收器学习笔记
    PyQt5 简单记录QProcess的使用
    Spring-Java
    Leetcode LCR182:动态口令
    element树形控件单选
    进程调度,进程
    Salesforce中国区或将解散?国产SaaS如何在竞争中扬长避短
    20231012_python练习_服务端与客户端数据交互v2_增加xlsx表格数据批量导入数据库
    我所理解liunx下的原子操作
    golang升级到1.18.4版本 遇到的问题
  • 原文地址:https://blog.csdn.net/devcloud/article/details/125561756