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

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

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

相关文章

30天python速成-第一天(python简介及下载安装)

初识Python Python简介 Python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面),可以调用C语言的库函数。在最早的版本中,Python已经提供了对“类”,“函数”,“异常处…

1.2 网络安全法律法规

数据参考&#xff1a;CISP官方 目录 国家立法体系网络安全法解析网络安全相关法律 一、国家立法体系 1、我国的立法体系 我国的立法体系在网络空间治理中扮演着基础工作的角色。为了应对快速发展的网络技术和威胁&#xff0c;我国采取了多级立法机制来完善网络空间的法律…

【EI/SCOPUS会议征稿】2023年第四届新能源与电气科技国际学术研讨会 (ISNEET 2023)

作为全球科技创新大趋势的引领者&#xff0c;中国一直在为科技创新创造越来越开放的环境&#xff0c;提高学术合作的深度和广度&#xff0c;构建惠及全民的创新共同体。这些努力为全球化和创建共享未来的共同体做出了新的贡献。 为交流近年来国内外在新能源和电气技术领域的最新…

打卡力扣题目六

#左耳听风 ARST 打卡活动重启# 目录 一、问题 二、解题方法 三、解题方法二 四、两个方法的区别 关于 ARTS 的释义 —— 每周完成一个 ARTS&#xff1a; ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个技…

Mac 上使用 Tesseract OCR 识别图片文本

Tesseract OCR 引擎&#xff1a;Tesseract是一个开源的OCR引擎&#xff0c;你需要先安装它。可以从Tesseract官方网站&#xff08;https://github.com/tesseract-ocr/tesseract&#xff09;下载适用于你的操作系统的安装程序或源代码&#xff0c;并按照官方文档进行安装。 Tes…

【Postman】Postman接口测试进阶用法详解:断言、全局与环境变量、关联、批量执行用例、读取外部文件实现参数化

文章目录 一、Postman断言1、断言位置2、Postman的常用断言3、操作实例 二、全局变量与环境变量1、二者区分2、设置全局变量3、设置环境变量 三、Postman接口关联1、概念2、操作步骤 四、批量执行测试用例1、操作步骤2、查看结果 五、读取外部文件实现参数化1、使用场景2、操作…

el-select多个选择框位置错位、偏移

el-select多个选择框位置错位、偏移 一、解决办法 在el-select组件中&#xff0c;可能会由于option选项过多而导致下拉框位置错乱、偏移的情况&#xff0c;我个人试验大概是在5-6个option以上时&#xff0c;该bug就会出现。 一、解决办法 这个时候需要手动为下拉框设置: popper…

调查需求合理呈现业务人员想要的数据维度视图

开始着手做一个单据,首先想到的是业务人员最终想看到的单据数据的呈现样式,这是信息化的出发点和数据分析的基础。业务人员工作有时很多是重复,以一个他喜欢的方式将需要的数据方便的提供给它,无疑改善方便了他的工作。我们发现不管你是一个家庭,还是一个店铺或是一个公司…

Vite+Typescript+Vue3学习笔记

ViteTypescriptVue3学习笔记 1、项目搭建 1.1、创建项目(yarn) D:\WebstromProject>yarn create vite yarn create v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages...success Installed…

2023-将jar包上传至阿里云maven私有仓库(云效制品仓库)

一、背景介绍 如果要将平时积累的代码工具jar包&#xff0c;上传至云端&#xff0c;方便团队大家一起使用&#xff0c;一般的方式就是上传到Maven中心仓库&#xff08;但是这种方式步骤多&#xff0c;麻烦&#xff0c;而且上传之后审核时间比较长&#xff0c;还不太容易通过&a…

Python语法(二、内置函数)

数学计算库 Python ​math ​模块提供了许多对浮点数的数学运算函数。 Python ​cmath ​模块包含了一些用于复数运算的函数。 import math 内置函数 关键字 自定义函数 Python函数的定义。定义函数需要用def 关键字实现&#xff0c;具体的语法格式如下&#xff1a; def 函…

CAN学习笔记3:STM32 CAN控制器介绍

STM32 CAN控制器 1 概述 STM32 CAN控制器&#xff08;bxCAN&#xff09;&#xff0c;支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误&#xff0c;而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。 2 bxCAN 特性 波特率…

Springboot实现Rsa非对称加密

依赖 <dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot-starter</artifactId><version>1.30.0</version> </dependency>生成公钥和私钥 // 生成一对公钥和私钥&#xff0c;其中Map对象 (private私…

部署问题集合(十八)Windows环境下使用两个Tomcat

下载Tomcat Tomcat镜像下载地址&#xff1a;https://mirrors.cnnic.cn/apache/tomcat/进入如下地址&#xff1a;zip的是压缩版&#xff0c;exe是安装版 修改第二个Tomcat配置文件 第一步&#xff1a;编辑conf/server.xml文件&#xff0c;修改三个端口&#xff0c;有些版本改…

3d激光slam建图与定位(1)_基于ndt算法定位

一.代码实现流程 二.ndt算法原理 一.该算法定位有三个进程文件 1.map_loader.cpp用于点云地图的读取&#xff0c;从文件中读取点云后对这个点云地图进行旋转平移后发布点云地图到ros #include "map_loader.h"MapLoader::MapLoader(ros::NodeHandle &nh){std::st…

Form1单例模式与互斥锁

一、使用mutex来解决。 如何让窗体Form1也是一个单例模式呢&#xff1f; 在窗体项目中找到Program.cs&#xff0c;双击。找到入口点&#xff0c;更改如下&#xff1a; [STAThread]private static void Main(){string mutexName "MyapplicatonMutexApp1121";usin…

【嵌入式Linux项目】基于Linux的全志H616开发板智能家居项目(语音控制、人脸识别、安卓APP和PC端QT客户端远程操控)有视频功能展示

目录 一、功能需求 二、开发环境 1、硬件&#xff1a; 2、软件&#xff1a; 3、引脚分配&#xff1a; 三、关键点 1、设计模式之工厂模式 2、wiringPi库下的相关硬件操作函数调用 3、语音模块的串口通信 4、线程 5、摄像头的实时监控和拍照功能 6、人脸识别 四、编…

网络互联究竟是需要什么协议相同,什么协议不同?

混淆概念的几个说法&#xff1a; 说法1&#xff1a; “以太网交换机不可以实现采用不同网络层协议的互联” 原因&#xff1a;以太网交换机是数据链路层的设备&#xff0c;不懂网络层的知识 说法2&#xff1a; “网桥可互联不同的物理层、不同的MAC子层以及不同速率的以太网”…

Spring Boot实践四 --集中式缓存Redis

随着时间的积累&#xff0c;应用的使用用户不断增加&#xff0c;数据规模也越来越大&#xff0c;往往数据库查询操作会成为影响用户使用体验的瓶颈&#xff0c;此时使用缓存往往是解决这一问题非常好的手段之一。Spring 3开始提供了强大的基于注解的缓存支持&#xff0c;可以通…

ios私钥证书的创建方法

ios私钥证书是苹果公司为ios开发者打包app&#xff0c;推出的一种数字证书&#xff0c;只有同一个苹果开发者账号生成的ios私钥证书打的包&#xff0c;才能上架同一个开发者账号的app store。因此不要指望别人给你共享私钥证书和描述文件&#xff0c;因为别人的证书和描述文件打…