NebulaGraph实战:2-NebulaGraph手工和Python操作

news2024/12/23 9:17:35

  图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)和边(Edge),还可以将属性(Property)附加到点和边上。本文以示例数据集basketballplayer为例,通过nGQL操作和Python脚本两种方式构建图谱。数据[10]和代码[9]详见参考文献。

一.示例数据集介绍
1.数据集Schema
  点包括player(球员)和team(球队),边包括serve(球员->球队)和follow(球员->球员):

  下面是数据集的一个展示例子,如下所示:

2.vertex_player.csv
  球员player点数据包括player_id(球员id)、age(年龄)和name(名字):

player105	31	Danny Green
player109	34	Tiago Splitter
player111	38	David West
player118	30	Russell Westbrook
player143	23	Kristaps Porzingis
player104	32	Marco Belinelli
player107	32	Aron Baynes
player116	34	LeBron James
player120	29	James Harden
player125	41	Manu Ginobili

3.vertex_team.csv
  球队team点数据包括team_id(球对id)和name(名字):

team204	Spurs
team218	Raptors
team229	Heat
team202	Rockets
team208	Kings
team216	Cavaliers
team217	Celtics
team223	Knicks
team224	Pistons
team205	Thunders

4.edge_serve.csv
  serve边数据包括player_id(球员id)、team_id(球对id)、start_year(开始年)和end_year(结束年):

player100	team204	1997	2016
player101	team204	1999	2018
player101	team215	2018	2019
player102	team203	2006	2015
player102	team204	2015	2019
player103	team204	2017	2019
player103	team208	2013	2017
player103	team212	2006	2013
player103	team218	2013	2013
player104	team200	2007	2009

5.edge_follow.csv
  follow边数据包括player_id(球员id)、player_id(球员id)和degree(程度):

player100	player101	95
player100	player125	95
player101	player100	95
player101	player102	90
player101	player125	95
player102	player100	75
player102	player101	75
player103	player102	70
player104	player100	55
player104	player101	50

二.nGQL操作构建图谱
  创建图空间,包括名字和Vid Type,如下所示:

  查看图空间列表,如下所示:

  接下来通过命令创建Tag(点)和Edge type(边),如下所示:

// 创建Tag player,带有2个属性
CREATE TAG player(name string, age int);
// 创建Tag team,带有1个属性
CREATE TAG team(name string);
// 创建Edge type follow,带有1个属性
CREATE EDGE follow(degree int);
// 创建Edge type serve,带有2个属性
CREATE EDGE serve(start_year int, end_year int);

  创建完毕后,在控制台通过NGQL查看点和边信息,如下所示:

  接下来查看当前图空间中所有Tag和Edge type,如下所示:

SHOW TAGS; // 列出当前图空间中所有Tag
SHOW EDGES; // 列出当前图空间中所有Edge type
// 查看每种Tag和Edge type的结构是否正确
DESCRIBE TAG player;
DESCRIBE TAG team;
DESCRIBE EDGE follow;
DESCRIBE EDGE serve;


  查看图空间basketballplayer标签,如下所示:

  查看图空间basketballplayer边类型,如下所示:

  然后分别导入关联标签和关联边,这步骤是重点,主要是关联好列字段,如下所示:

说明:VID函数选择Hash,否则导入失败。
  通过任务列表查看导入信息,如下所示:


  特别说明:显示节点数值而非名字,推测可能和创建图空间时,与选择的Vid Type有关。这次选择的INT64,下次选择FIXED_STRING试试。
  通过NebulaGraph控制台,执行命令查看如下所示:


三.Python脚本构建图谱
  上述通过nGQL命令进行操作,当数据量大的时候,最好通过脚本进行处理,如下所示:

from nebula3.gclient.net import ConnectionPool
from nebula3.Config import Config
import numpy as np
import pandas as pd


config = Config() # 定义一个配置
config.max_connection_pool_size = 10 # 设置最大连接数
connection_pool = ConnectionPool() # 初始化连接池
# 如果给定的服务器是ok的,返回true,否则返回false
ok = connection_pool.init([('172.27.211.84', 9669)], config)

vertex_player_df = pd.read_csv("C:/Users/Administrator/Downloads/dataset/dataset/vertex_player.csv", header=None, names=['player_id', 'age', 'name'])
vertex_team_df = pd.read_csv("C:/Users/Administrator/Downloads/dataset/dataset/vertex_team.csv", header=None, names=['team_id', 'name'])
edge_follow_df = pd.read_csv("C:/Users/Administrator/Downloads/dataset/dataset/edge_follow.csv", header=None, names=['player_id1', 'player_id2', 'degree'])
edge_serve_df = pd.read_csv("C:/Users/Administrator/Downloads/dataset/dataset/edge_serve.csv", header=None, names=['player_id', 'team_id', 'start_year', 'end_year'])

# Session Pool,session将自动释放
with connection_pool.session_context('root', 'nebula') as session:
    # 创建basketballplayer_python空间
    session.execute('CREATE SPACE IF NOT EXISTS `basketballplayer_python_test` (vid_type = FIXED_STRING(32))')
    # result = session.execute('SHOW SPACES')
    # print(result)
    
    # 使用basketballplayer_python空间
    session.execute('USE basketballplayer_python')

    session.execute('CREATE TAG IF NOT EXISTS player(name string, age int)') # 创建player标签
    session.execute('CREATE TAG IF NOT EXISTS team(name string)') # 创建team标签
    session.execute('CREATE EDGE IF NOT EXISTS follow(degree int)') # 创建follow边
    session.execute('CREATE EDGE IF NOT EXISTS serve(start_year int, end_year int)') # 创建serve边

    # 从CSV文件中读取数据,插入到player标签中
    for index, row in vertex_player_df.iterrows():
        session.execute('INSERT VERTEX IF NOT EXISTS player(name, age) VALUES "{}":("{}", {})'.format(row['player_id'], row['name'], np.int64(row['age'])))
    # 从CSV文件中读取数据,插入到team标签中
    for index, row in vertex_team_df.iterrows():
        session.execute('INSERT VERTEX IF NOT EXISTS team(name) VALUES "{}":("{}")'.format(row['team_id'], row['name']))
    # 从CSV文件中读取数据,插入到follow边中
    for index, row in edge_follow_df.iterrows():
        session.execute('INSERT EDGE IF NOT EXISTS follow(degree) VALUES "{}"->"{}":({})'.format(row['player_id1'], row['player_id2'], np.int64(row['degree'])))
    # 从CSV文件中读取数据,插入到serve边中
    for index, row in edge_serve_df.iterrows():
        session.execute('INSERT EDGE IF NOT EXISTS serve(start_year, end_year) VALUES "{}"->"{}":({}, {})'.format(row['player_id'], row['team_id'], np.int64(row['start_year']), np.int64(row['end_year'])))

# 关闭连接池
connection_pool.close()

  通过NebulaGraph控制台,执行命令match (v:player) return v;。结果以表格形式展现,如下所示:

  结果以可视化形式展现,如下所示:

说明:由于代码简单,就不详细介绍了,可参考代码注释[9]。

参考文献:
[1]规划Schema:https://docs.nebula-graph.com.cn/3.3.0/nebula-studio/quick-start/st-ug-plan-schema/
[2]导入数据:https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/quick-start/st-ug-import-data/
[3]控制台界面:https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/quick-start/st-ug-console/
[4]操作图空间:https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/manage-schema/st-ug-crud-space/
[5]操作Tag(点类型):https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/manage-schema/st-ug-crud-tag/
[6]操作Edge type:https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/manage-schema/st-ug-crud-edge-type/
[7]操作索引:https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/manage-schema/st-ug-crud-index/
[8]查看Schema:https://docs.nebula-graph.com.cn/3.6.0/nebula-studio/manage-schema/st-ug-view-schema/
[9]本文源码:https://github.com/ai408/nlp-engineering/blob/main/20230917_NLP工程化公众号文章/NebulaGraph教程/basketballplayer.py
[10]本文数据:basketballplayer.zip: https://url39.ctfile.com/f/2501739-944592417-0f75d0?p=2096 (访问密码: 2096)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java的Map和Set集合

Set集合 一.HashSet HashSet 元素是无序的 向Hashset中添加元素时,是如何判断元素是否重复的: 添加元素时,如果用equals判断效率太低,因为equals是一个一个字符比较 HashSet底层用到hashCode和equals 一个内容:"sahdihwo&q…

FPGA 安装Quartus 13.1无法生成.sof文件

FPGA 安装Quartus 13.1无法生成.sof文件 安装环境编译无法生成 .sof文件分析原因 找资料1.第1篇文章2.第2篇文章 安装环境 Quarter II 13.0下载、安装、破解包括可能出现的几乎所有的问题详解野火FPGA安装视频 编译无法生成 .sof文件 分析原因 1.推测可能是破解失败。2.安装…

洛谷bfs题2---P1825 [USACO11OPEN] Corn Maze S

P1825 [USACO11OPEN] Corn Maze S import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {public static int N;//行public static int M;//列public static Queue<Integer> q new LinkedList<>();public static in…

变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用

变量&#xff1a;名义型、有序型、连续型变量 名义型&#xff1a;普通事件类型&#xff0c;如糖尿病I型和糖尿病II型。 有序型&#xff1a;有顺序的事件类型&#xff0c;如一年级、二年级和三年级。 连续型&#xff1a;表示有顺序的数量&#xff0c;如年龄。 因子&#xff1a;…

现代架构设计:构建可伸缩、高性能的系统

文章目录 架构设计的基本原则1. 可伸缩性2. 可用性和容错性3. 性能4. 安全性5. 简单性 现代架构设计的关键概念1. 微服务架构2. 容器化3. 云原生4. 自动化和持续集成/持续交付&#xff08;CI/CD&#xff09; 构建可伸缩、高性能的系统的最佳实践1. 合理使用缓存2. 负载均衡3. 弹…

在Python中处理CSV文件的常见问题

当谈到数据处理和分析时&#xff0c;CSV&#xff08;Comma-Separated Values&#xff09;文件是一种非常常见的数据格式。它简单易懂&#xff0c;可以被绝大多数编程语言和工具轻松处理。在Python中&#xff0c;我们可以使用各种库和技巧来处理CSV文件&#xff0c;让我们一起来…

Server2101

B-1:数据库服务渗透测试 任务环境说明: 服务器场景:Server2101 服务器场景操作系统:未知(关闭连接) 1.通过分析靶机Server2101页面信息,寻找漏洞页面,将WEB服务存在SQL注入漏洞的页面名称作为Flag提交; nmap -p- 扫描发现靶机80和443端口有http、https服务 访问网站…

Nginx访问认证

访问认证 有时候&#xff0c;我们⼀些站点内容想要进⾏授权查看&#xff0c;只能输⼊账号密码之后才能访问&#xff0c;例如⼀些重要的内⽹平台&#xff0c;CRM &#xff0c; CMDB &#xff0c;企业内部 WIKI 等等。 htpasswd是Apache密码⽣成⼯具&#xff0c;Nginx⽀持auth_ba…

多卫星定位算法

多卫星定位算法 现已知有N(N>4)个卫星&#xff0c;每个卫星的坐标用 X s {X_s} Xs​表示&#xff0c;其对应的伪距用 r r r表示。 由于伪距不是准确的、真实的距离&#xff0c;它有所干扰。所以我们可以再根据三维空间中的距离公式&#xff0c;另外估计卫星和用户的距离为 …

Visual Studio Cpp CLR C# 替换

1、首先将文件中所有都替换 你需要的名字 替换为整个解决方案 2、新建工程取名 Laserbeam_upper 3、把原工程下的cpp放进来&#xff0c;并改名Laserbeam_upper 4、在这里逐步添加 属性表配置opencv 5、cpp需要修改的两个地方 6、CLR新建和添加 选类库新建、然后直接粘贴进来…

Learn Prompt-Prompt 高级技巧:API-Bank AgentBench

模型评估是Agent学习过程中至关重要的一环。通过分析数据来评估Agent的能力&#xff0c;可以客观地衡量它在特定任务或领域中的表现。数据评估是不断迭代和改进的基础。通过反复评估和分析数据&#xff0c;Agent可以逐步改进自身&#xff0c;并不断优化其能力。数据评估还可以将…

浅谈为什么多态只能是指针或引用

其实在很早之前&#xff0c;我一直没有注意到这个问题&#xff0c;直到今天碰见了一道题&#xff0c;顺便前面的博客中&#xff0c;继承写到&#xff0c;子类中不包含父类&#xff0c;子类只是继承了父类的成员变量和函数&#xff0c;由这一点&#xff0c;引发了我对切片以及赋…

I/O设备管理

目录 I/O设备管理&#xff08;1&#xff09; 第一节 I/O设备管理的基本概念 一、I/O设备管理的任务 二、I/O设备分类 三、I/O设备管理与文件管理的关系 第二节 I/O硬件和I/O软件的组成 一、I/O硬件组成 二、I/O软件组成 三、设备独立性 第三节 I/O设备控制方式 一…

虚拟机安装 centos

title: 虚拟机安装 centos createTime: 2020-12-13 12:00:27 updateTime: 2020-12-13 12:00:27 categories: linux tags: 虚拟机安装 centos 路线图 主机(宿主机) —> centos --> docker --> docker 镜像 --> docker 容器 — docker 服务 1.前期准备 一台 主机 或…

图像相关名词概述

颜色模式 通过赋予C的不同维度不同的含义&#xff0c;可以用来描述不同的颜色空间。颜色模式&#xff0c;是将某种颜色表现为数字形式的模型&#xff0c;或者说是一种记录图像颜色的方式。本单元主要讲述两个常用的颜色模式&#xff1a;RGB&#xff0c;HSV。 RGB模式是工业界的…

数字IC笔试千题解--多选题篇(三)

前言 出笔试题汇总&#xff0c;是为了总结秋招可能遇到的问题&#xff0c;做题不是目的&#xff0c;在做题的过程中发现自己的漏洞&#xff0c;巩固基础才是目的。 所有题目结果和解释由笔者给出&#xff0c;答案主观性较强&#xff0c;若有错误欢迎评论区指出&#xff0c;资料…

机器学习(19)---XGBoost入门

XGBoost 一、概述1.1 使用XGBoost库1.2 XGBoost的三大板块 二、集成算法及重要参数2.1 概述2.2 XGBoost的简单建模2.3 n_estimators学习曲线2.4 方差与泛化误差2.5 重要参数subsample2.6 迭代决策树&#xff1a;重要参数eta 三、XGBoost的智慧3.1 概述3.2 XGB的目标函数&#x…

26. 图论 - 树

文章目录 树生成树最小生成树图与人工智能人工智能数学基础Hi,你好。我是茶桁。 这一节课是我们AI秘籍整个数学篇的最后一节课。同样的,这节课的概念还是比较重要的。我们要来了解一下「树」。 树 树其实是图的一种,首先呢它是一个连通图,是一个不含圈的连通图。 什么叫…

开机自启动Linux and windows

1、背景 服务器由于更新等原因重启&#xff0c;部署到该服务上的响应的应用需要自启动 2、Linux 2.1 方式一 编写启动应用的sh脚本授权该脚本权限 chmod 777 xxx.sh 修改rc.loacl 位置&#xff1a;/etc/rc.local 脚本&#xff1a;sh /home/xxxx.sh & 授权rc.local …

项目管理和问题跟踪工具Redmine

【勘误】&#xff1a;网友 Bnake 指出&#xff0c;用青龙面板实现阿里云盘每日签到 一文中&#xff0c;新建变量值时&#xff0c;变量名应该为 refreshToken&#xff0c;而不是截图中的 refresh_Token&#xff0c;非常感谢他的仔细和认真~ 什么是 Redmine &#xff1f; Redmine…