当前位置: 首页 > news >正文

Neo4j数据库中导入CSV示例数据

本文简要介绍Neo4j数据库以及如何从CSV文件中导入示例数据,方便我们快速学习测试图数据库。首先介绍简单数据模型以及基本图查询概念,然后通过LOAD CSV命令导入数据,生成节点和关系。

环境准备

读者可以快速安装Neo4j Desktop,启动并创建`City Calls’项目 ,启动数据库并打开Neo4j Brower。

领域模型

领域模型非常简单,可以用三句话表达:

  • 有一些城市

  • 有一些人住在城市

  • 人彼此通话

准备数据

图数据库与其他持久化数据库一样,可以存储数据。下面准备CSV文件数据,包括一些示例数据:

from_dt	to_dt	from_city	from_gender	from_name	from_number	to_city	to_gender	to_name	to_number
2019-01-01T00:37	2019-01-01T00:44	Pattaya	Woman	Aleena	114-397-2007	Pattaya	Woman	Antonella	325-453-5419
2019-01-01T00:54	2019-01-01T01:05	Pattaya	Man	Jaziel	956-780-1788	Kanchanaburi	Man	Gabriel	469-505-9894
2019-01-01T01:01	2019-01-01T01:07	Hua Hin	Woman	Nayeli	320-480-8313	Kanchanaburi	Woman	Freya	587-595-9477
2019-01-01T01:27	2019-01-01T01:41	Bangkok	Man	Javier	655-683-6284	Chiang Mai	Man	Dalton	340-374-5681
2019-01-01T01:48	2019-01-01T01:54	Pattaya	Woman	Everleigh	610-164-4540	Bangkok	Woman	Oakley	574-752-8471
2019-01-01T02:18	2019-01-01T02:28	Chiang Mai	Man	Emmet	215-530-3993	Kanchanaburi	Man	Kareem	974-369-1496
2019-01-01T02:32	2019-01-01T02:41	Pattaya	Man	Henry	620-121-3009	Bangkok	Man	Micah	381-284-2790
2019-01-01T02:40	2019-01-01T02:54	Kanchanaburi	Woman	Lina	448-273-3382	Chiang Mai	Man	Beckham	370-171-4490
2019-01-01T03:40	2019-01-01T03:51	Pattaya	Woman	Alani	183-225-1764	Chiang Mai	Woman	Zaniyah	443-995-7423
2019-01-01T06:04	2019-01-01T06:06	Chiang Mai	Woman	Cassidy	959-149-3497	Bangkok	Man	Enrique	923-682-3283
2019-01-01T06:11	2019-01-01T06:18	Hua Hin	Man	Tadeo	572-552-2898	Chiang Mai	Woman	Gia	531-143-1961
2019-01-01T06:17	2019-01-01T06:21	Hua Hin	Man	Jayceon	108-826-6422	Pattaya	Woman	Jaelyn	283-837-9288
2019-01-01T06:42	2019-01-01T06:47	Hua Hin	Woman	Emerald	315-757-4272	Chiang Mai	Woman	Alivia	295-527-4914
2019-01-01T07:05	2019-01-01T07:09	Kanchanaburi	Man	Alistair	341-910-6735	Hua Hin	Man	Kaleb	366-100-9549
2019-01-01T07:34	2019-01-01T07:42	Bangkok	Man	Clark	655-643-2815	Chiang Mai	Man	Major	805-931-1585
2019-01-01T08:49	2019-01-01T08:56	Pattaya	Man	Dominick	291-616-9899	Pattaya	Woman	Kenna	871-427-1228
2019-01-01T09:18	2019-01-01T09:23	Bangkok	Woman	Aileen	413-665-7064	Pattaya	Woman	Brooklyn	508-151-5830
2019-01-01T09:39	2019-01-01T09:49	Hua Hin	Man	Manuel	523-347-6054	Bangkok	Man	Tobias	252-753-3307
2019-01-01T09:57	2019-01-01T10:06	Hua Hin	Woman	Avalyn	656-507-8932	Hua Hin	Man	Harlan	865-375-6184

我们看到CSV文件每行代表一次通话信息:开始时间、结束时间、人名称、性别、电话号码和城市。为了导入CSV文件至图数据库,首先应该设计图数据结构。

数据模型

CSV一行信息表示谁给谁打了电话,转换该信息至图表示,需要使用两个主要概念:节点和关系。

节点

一个节点代表张三,一个节点代表李四,两者都包括属性:姓名、性别、电话号码和城市。两个节点属于相同类型,都表示一个人,我们称节点类型为节点标签(Node Label)。我们想从行中提取的另一个节点是Call的节点,Duration属性表示呼叫开始和结束之间的分钟差。

关系

目前我们有了几个节点,但这仍然不是一个图。我们的节点之间没有关系,我们需要修复它。从张三给李四打过电话的事实来看,我们可以说张三是打出去的,我们称这种关系为外向[OUT];在另一边,李四接到了一个电话,所以对他来说,这个电话是来电[IN]。

规范化

现在在Person节点中有city属性。这种结构会导致数据重复和潜在的不一致问题。更好的设计是将每个城市作为一个独立的节点,与居住在那里的每个人建立关系。

导入数据

CSV文件可以为远程或本地。本地位置为:\ne4j-desk\data\relate-data\dbmss\dbms-***\import, CSV文件包括头则使用 WITH HEADERS,其他配置参考官方文档:LOAD CSV - Cypher Manual (neo4j.com)

导入脚本如下,下面进行解释说明:

LOAD CSV WITH HEADERS FROM 'file:///city_calls.csv' AS line 
MERGE (c1:City { name: line.from_city })
MERGE (p1:Person{ name: line.from_name,number: line.from_number, gender: line.from_gender })
MERGE (p1)-[:FROM]->(c1)
MERGE (C2:City { name: line.to_city })
MERGE (p2:Person { name: line.to_name,number: line.to_number, gender: line.to_gender })
MERGE (p2)-[:FROM]->(c2)
CREATE (c:Call { from: datetime(line.from_dt), to: datetime(line.to_dt), duration: duration.between(datetime(line.from_dt),datetime(line.to_dt)).minutes })
CREATE (p1)-[:OUT]->(c)<-[:IN]-(p2);

从每一行CSV文件中,我们将得到1个Call节点,潜在的2个Persons节点和可能抽取2个Cities节点。为什么“可能”?因为我们不应该复制同一实体的City和Person节点,而应该只创建一次,然后重用添加更多关系的节点。图中应该仅有一个曼谷城市,所以这个“单实例”要求应该对所有城市、人员和Call节点都成立。

MERGE命令帮助我们避免节点重复。如果指定的结构(节点或节点和关系的组合)在数据库中不存在,那么将创建它,否则跳过。

到目前为止,每一行代表一个事实调用,我们需要所有的事实,我们可以简单地创建调用,没有任何重复的问题。但两次运行此脚本将导致一次又一次地创建相同的Call节点,因此不要重复导入。

查询所有节点进行确认。

MATCH(c) return c;

在这里插入图片描述

参考文档:https://vladbatushkov.medium.com/learn-neo4j-cypher-basics-in-30-minutes-94d68a52544

相关文章:

Neo4j数据库中导入CSV示例数据

本文简要介绍Neo4j数据库以及如何从CSV文件中导入示例数据&#xff0c;方便我们快速学习测试图数据库。首先介绍简单数据模型以及基本图查询概念&#xff0c;然后通过LOAD CSV命令导入数据&#xff0c;生成节点和关系。 环境准备 读者可以快速安装Neo4j Desktop&#xff0c;启…...

第四章 No.1树状数组的原理与使用

文章目录 应用问题原理树状数组练习题241. 楼兰图腾242. 一个简单的整数问题243. 一个简单的整数问题2244. 谜一样的牛 线段树的反面&#xff1a;树状数组原理复杂&#xff0c;实现简单 应用问题 支持两个操作&#xff1a;快速求前缀和任意地修改某个数&#xff0c;时间复杂度…...

mysql(五)主从配置

目录 前言 一、MySQL Replication概述 二、MySQL复制类型 三、部署MySQL主从异步复制 总结 前言 为了实现MySQL的读写分离&#xff0c;可以使用MySQL官方提供的工具和技术&#xff0c;如MySQL Replication&#xff08;复制&#xff09;、MySQL Group Replication&#xff08;组…...

扫地机语音提示芯片,智能家居语音交互首选方案,WT588F02B-8S

智能家居已经成为现代家庭不可或缺的一部分&#xff0c;而语音交互技术正是智能家居的核心。在智能家居设备中&#xff0c;扫地机无疑是最受欢迎的产品之一。然而&#xff0c;要实现一个更智能的扫地机&#xff0c;需要一颗语音提示芯片&#xff0c;以提供高质量的语音交互体验…...

ChatGPT | 分割Word文字及表格,优化文本分析

知识库读取Word内容时&#xff0c;由于embedding切片操作&#xff0c;可能会出现表格被分割成多个切片的情况。这种切片方式可能导致“列名栏”和“内容栏”之间的Y轴关系链断裂&#xff0c;从而无法准确地确定每一列的数据对应关系&#xff0c;从而使得无法准确知道每一列的数…...

基于JavaSE的手机库存管理系统

1、项目背景 基于JavaSE完成如下需求&#xff1a; 功能需求&#xff1a; 1、查询库存量 2、可以修改库存中不同品牌手机的个数 3、退出系统 实现步骤&#xff1a; 1、把List当做库房 2、把手机存放在库房中 3、使用封装的方法区操作仓库中的手机 2、项目知识点 面向对象 集合…...

驱动开发 day4 (led灯组分块驱动)

//编译驱动(注意Makefile的编译到移植到开发板的内核) make archarm //清除编译生成文件 make clean //安装驱动 insmod mycdev.ko //卸载驱动 rmmod mycdev //编译fun.c 函数(用到交叉工具编译) arm-linux-gnueabihf-gcc fun.c head.h #ifndef __HEAD_H__ #define __HEAD_H__…...

electron dialog.showMessageBox使用案例

electron 版本&#xff1a;25.3.1 index.html <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Hello World!</title><meta http-equiv"Content-Security-Policy" content"script-src self unsa…...

代码随想录算法训练营第二十二天 | 读PDF复习环节2

读PDF复习环节2 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…...

TimescaleDB时序数据库初识

注&#xff1a;本文翻译自https://legacy-docs.timescale.com/v1.7/introduction TimescaleDB是一个开源时间序列数据库&#xff0c;针对快速摄取和复杂查询进行了优化。它说的是“完整的SQL”&#xff0c;因此像传统的关系数据库一样易于使用&#xff0c;并且以以前为NoSQL数…...

Numpy-聚合函数

NumPy 提供了很多统计函数&#xff0c;用于从数组中查找最小元素&#xff0c;最大元素&#xff0c;百分位标准差和方差等。 函数名说明np.sum()求和np.prod()所有元素相乘np.mean()平均值np.std()标准差np.var()方差np.median()中位数np.power()幂运算np.sqrt()开方np.min()最小…...

企业博客资讯如何高效运营起来?

运营一个高效的企业博客资讯需要综合考虑多个因素&#xff0c;包括内容策划、发布频率、优化推广、互动反馈等。下面将从这些方面介绍如何高效运营企业博客资讯。 如何高效运营企业博客资讯 内容策划 首先&#xff0c;需要制定一个明确的内容策略。确定博客的定位和目标受众…...

跟我学c++中级篇——模板的继承

一、继承 面向对象编程有三个特点&#xff1a;封装、继承和多态。其中继承在其中起着承上启下的作用。一般来说&#xff0c;继承现在和组合的应用比较难区分&#xff0c;出于各种场景和目的&#xff0c;往往各有千秋。但目前主流的观点&#xff0c;一般是如果没有特殊情况&…...

需求分析案例:消息配置中心

本文介绍了一个很常见的消息推送需求&#xff0c;在系统需要短信、微信、邮件之类的消息推送时&#xff0c;边界如何划分和如何设计技术方案。 1、需求 一个系统&#xff0c;一般会区分多个业务模块&#xff0c;并拆分成不同的业务系统&#xff0c;例如一个商城的架构如下&am…...

自动化测试——环境

一、搭建环境 1、安装Slenium pip install selenium 2、安装浏览器驱动-》查询浏览器版本-》下载对应版本驱动-》在path路径中配置&#xff08;浏览器更新需要重新下载&#xff09; pip install webdriver -helper&#xff08;自动化&#xff09;python3.9以上 pip install 安…...

短视频矩阵营销系统技术开发者开发笔记分享

一、开发短视频seo抖音矩阵系统需要遵循以下步骤&#xff1a; 1. 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 2. 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的…...

vue2和vue3引用ueditor的区别

官方文档入口 UEditor Docs vue2使用方式 UE.vue组件 <template><div><script id"editor" type"text/plain"></script><Upload v-if"isupload" :config"{total:9}" :isupload"isupload" ret…...

【每日运维】RockyLinux8非容器化安装Mysql、Redis、RabitMQ单机环境

系统版本&#xff1a;RockyLinux 8.6 安装方式&#xff1a;非容器化单机部署 安装版本&#xff1a;mysql 8.0.32 redis 6.2.11 rabbitmq 3.11.11 elasticsearch 6.7.1 前置条件&#xff1a;时间同步、关闭selinux、主机名、主机解析host 环境说明&#xff1a;PC电脑VMware Work…...

第一次后端复习整理(JVM、Redis、反射)

1. JVM 文章仅为自身笔记 详情查看一篇文章掌握整个JVM&#xff0c;JVM超详细解析&#xff01;&#xff01;&#xff01; 1.1 什么是JVM jvm是Java虚拟机 1.2 Java文件的编译过程 程序员编写代码形成.java文件经过javac编译成.class文件再通过JVM的类加载器进入运行时数据…...

python的web学习(一)-初识django

文章目录 软件创建项目默认项目文件说明App的概念(应用)apps.py编写URL和视图函数对应关系【urls.py】编写视图函数【views.py】启动服务 软件 python下载 django下载 创建项目 django-admin startproject 文件名默认项目文件说明 项目名 manage.py(项目管理&#xff0c;启…...

JavaWeb+jsp+Tomcat的叮当书城项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88123111?spm1001.2014.3001.5503 技术&#xff1a;ssm jsp JDK1.8 MySQL5.7 Tomcat8.3 源码数据库课程设计 功能&#xff1a;管理员与普通用户和超级管理员三个角色&#xff0c;管理员可…...

【嵌入式Linux系统开发】——系统移植概述

目录 &#x1f349;&#x1f349;一、什么是嵌入式系统 &#x1f349;&#x1f349;二、嵌入式系统操作 &#x1f349;&#x1f349;三、嵌入式Linux的特点 &#x1f349;&#x1f349;四、嵌入式系统的组成 1、硬件和软件 2、硬件层 3、中间层 4、软件层 5、 功能层与执…...

升讯威在线客服系统是如何实现对 IE8 完全完美支持的(怎样从 WebSocket 降级到 Http)【干货】

简介 升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件&#xff0c;宗旨是&#xff1a; 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。 完整私有化包下载地址 &#x1f4be; https://kf.shengxunwei.com/freesite.zip 当前版本信息 发布…...

用VMware给运行在VMware上的CentOS7生成一个以SSH方式连接VMware上的CentOS7的运行在Windows上的命令行窗口

2023年7月27日&#xff0c;周四早上 目录 一个发现生成方法如果上面的方法连接失败&#xff0c;就采取这个方法 一个发现 今天早上无意间发现VMware可以生成一个以SSH方式连接着CentOS7的Windows命令行窗口&#xff0c; 这样做可以带来一定的便利性 &#xff1a; 方便复制、…...

C语言基础-3

1、函数 函数是C语言代码的基本组成部分&#xff0c;它是一个小的模块&#xff0c;整个程序由很多个功能独立的模块&#xff08;函数&#xff09;组成。这就是程序设计的基本分化方法。 main&#xff1a;C语言中所谓的主函数&#xff0c;主函数就是一种特别的函数。特别之处在于…...

Python 编程规范进阶(1) | 命名规范

养成良好的开发、编程习惯 跟着google开源项目走 https://github.com/google/styleguide 近期Target&#xff1a; 命名规范&#xff1b; Pythonic 积累 按照需求写需要的API&#xff1b; 写前先动脑子&#xff0c;比如画流程图&#xff0c;测试接口&#xff1b; Google 推荐的P…...

算法----二叉搜索树中第K小的元素

题目 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff…...

阿里Java开发手册~安全规约

1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明&#xff1a; 防止没有做水平权限校验就可随意访问、修改、删除别人的数据&#xff0c;比如查看他人的私信 内容、修改他人的订单。 2. 【强制】用户敏感数据禁止直接展示&#xff0c;必须对展示数据进…...

消息中间件RabbitMQ——学习笔记

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…...

爬虫005_python类型转换_其他类型转换为整型_转换为Float类型_转换为字符串_转换为布尔值---python工作笔记023

首先来看,字符串转换成int 很简单 float转换成int 会把小数点后面的内容丢掉 boolean转换为int true是1 false 是0 然后字符串转换为int,要注意 不能有特殊字符比如1.23 中有点 就报错 上面字符串12ab,有ab也报错 看上面...