学习下,并做一些简单的记录。
成果,可以使用基本命令,可以使用python处理db。
一:安装neo4j
1.前提
需要安装jdk
2.下载neo4j
https://neo4j.com/download-center/
社区版本。
不建议使用最新的版本,jdk要求很高。截图与下文不一样,后续使用的是3.5.33版本。4.4.7要求jdk是15。
2.解压
不需要进行安装
3.配置环境变量
4.启动
neo4j.bat console
在浏览器中打开 http://localhost:7474 默认跳转到 http://localhost:7474/browser,出现Neo4j界面,则安装成功。
初始用户名密码均为 neo4j,首次登录会直接进入修改密码界面,按提示设置新密码即可。
5.登陆
账号:neo4j,密码修改为123456
二:基本语法学习
1.说明
可以参考:https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html
可以回头再看,继续跟进。
2.创建节点
CREATE ( <node-name>:<label-name> { <Property1-name>:<Property1-Value> ........ <Propertyn-name>:<Propertyn-Value> } )
举例子:
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
2.查看创建的节点
match命令,配合return。
MATCH (n:Dept) RETURN n LIMIT 25
3.删除创建的节点
匹配出来之后,进行删除
MATCH (n:Dept) delete n
4.创建节点和关系
CREATE (n:Person { name: 'Andres', title: 'Developer' }) return n; CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n; match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)-[r:Friend]->(m) return r; match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)<-[r:Friend]-(m) return r;
效果:
5.查看关系的节点
其实在4中已经可以看到了。
MATCH p=()-[r:Friend]->() RETURN p LIMIT 25
所以,删除关系,同样是相同的方式
MATCH p=()-[r:Friend]->() delete r
6.删除所有的数据
当数据很多很杂的时候,可以使用。
match (n) detach delete n
7.其他的命令
这里可以再看完三之后,再来研究
1、MATCH(n) DETACH DELETE n //删除所有图 2、CREATE (n:Person {name:'John'}) RETURN n CREATE (n:Person {name:'Mike'}) RETURN n //创建名字为John、Mike,种类为Person的结点 3、MATCH (a:Person {name:'John'}), (b:Person {name:'Mike'}) MERGE (a)-[:FRIENDS]->(b) //建立John和Mike的friend关系 4、MATCH (a:Person {name:'Shawn'}), (b:Person {name:'Sally'}) MERGE (a)-[:FRIENDS {since:2001}]->(b) //由3增加属性 5、MATCH (a:Person {name:'John'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1978}]->(b) // 设置地点和人物的关系 6、MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b //查询出生在这个地方的人(查询) 7、MATCH (a)-->() RETURN a // 查询所有对外有关系的结点 8、MATCH (a)--() RETURN a // 查询所有有关系的结点 9、MATCH (a)-[r]->() RETURN a.name, type(r) // 查询所有对外有关系的节点,以及关系类型 10、MATCH (a:Person {name:'Liz'}) SET a.age=34 // 修改结点的某个属性 11、MATCH (a:Location {city:'Portland'}) DELETE a // 删除结点(存在关联无法删除) 12、MATCH (r) WHERE id(r)=12(其他ID也可) DETACH DELETE r //删除有关系的结点 13、MATCH(p1:College{name:'计算机学院'})-[r:`所属于`]-(p2:School) DELETE r // 删除结点关系 14、MATCH (s:College{name:'计算机学院'}),(t:School{name:'内蒙古大学'}) create (s)-[r:`所属于` ]->(t) //用已有关系类别创建关系
三:python处理数据一
1.可参考
https://zhuanlan.zhihu.com/p/313553691
https://blog.csdn.net/qq_39753433/article/details/122770232
2.安装包
pip3 install py2neo
3.操作数据
序号,招式,描述,益处,注意事项,常见问题 0,屈肘下犬式,描述:1.猫式进入2、双手向前移动半个手掌,屈双肘掌心小臂贴向地面,脚尖点地3、呼气时,臀部向上双膝伸直,低头眼睛看向双脚之间4、保持5-8次呼吸,或者更长5、吸气抬头,呼气屈膝跪地,双臂伸直回到猫式,益处:1.增加手臂及上背部力量。2、伸展腿部后侧腘胂肌。3、可防止体内器官下垂以及皮肤松弛。4、平静大脑,缓解精神疲劳感,有效的帮助放松。5、为难度更高的蝎子式、头倒立、手倒立等体式做准备,"注意事项:1.如怀孕后期,或是后背,胯部,肩膀,手腕有病症、腹泻、血压异常或患有眩晕病的人群请勿练习。2.生理期的女性可抬头看双掌间,不要低头。",常见问题:拱背,脊柱没有伸展。解决方式:启动肩胛区域的背阔肌上提。常见问题:脚跟踩不到地面。解决方式:微屈双膝,脚跟抬高,腰背部挺直向上。 1,下犬式,"描述:1.从婴儿式进入2、吸气抬头脚趾回勾3、呼气,提臀向上,让臀部朝向天花板4、手指大大张开,让臀部向上提,延展背部,大腿前侧肌肉上提5、双手、双脚与胯同宽,脚跟向下,舒展腋窝6、放松颈部,头部自然垂悬,眼睛看向大腿之间7、保持5-8个呼吸。8、吸气,抬头膝盖落地,回到婴儿式",益处:1.拉伸腿部后侧及跟腱,舒展背部及腰部两侧。2.帮助运动跑步者提高速度,使腿部变得轻盈,强化全身力量。3.缓解肩关节炎症,脚后跟的僵硬和疼痛,增强脚踝稳定性。4.平静大脑,缓解精神疲劳感,有效的帮助放松。5.可防止体内器官下垂以及皮肤松弛。还可缓解皮肤松弛。6.此体式为高难度倒立类体式做准备。,"注意事项:1.如在怀孕后期,或是后背,胯部,肩膀,手腕有病症、腹泻、血压异常或患有眩晕病的人群请勿练习。2.生理期的女性可抬头看双掌间,不要低头。",常见问题:拱背,脊柱没有伸展。解决方式:启动肩胛区域的背阔肌上提。常见问题:脚跟踩不到地面。解决方式:微屈双膝,脚跟抬高,腰背部挺直向上。
4.程序
这段程序的目的是,将招式,描述,益处,注意事项,常见问题做一个关联
from py2neo import * import pandas as pd graph = Graph("http://127.0.0.1:7474",auth=("neo4j","123456")) def yogadata(): count = 0 frame = pd.read_csv(r"E:\study\neo4j\yoga.csv", encoding='gbk') for i in frame.index: '''获取数据''' yoga_name = frame["招式"].values[i] yoga_ms = frame["描述"].values[i] yoga_yc = frame["益处"].values[i] yoga_zysx = frame["注意事项"].values[i] yoga_cjwt = frame["常见问题"].values[i] yoga_name = str(yoga_name) yoga_ms = str(yoga_ms) yoga_yc = str(yoga_yc) yoga_zysx = str(yoga_zysx) yoga_cjwt = str(yoga_cjwt) yoga_node = Node('招式', name=yoga_name) ms_node = Node('描述', name=yoga_ms) yc_node = Node('益处', name=yoga_yc) zysx_node = Node('注意事项', name=yoga_zysx) cjwt_node = Node('常见问题', name=yoga_cjwt) # 瑜伽类 yoga_2 = Relationship(yoga_node, '描述', ms_node) yoga_3 = Relationship(yoga_node, '益处', yc_node) yoga_4 = Relationship(yoga_node, '注意事项', zysx_node) yoga_5 = Relationship(yoga_node, '常见问题', cjwt_node) try: graph.create(yoga_2) except: continue try: graph.create(yoga_3) except: continue try: graph.create(yoga_4) except: continue try: graph.create(yoga_5) except: continue count += 1 print(count) yogadata()
效果:
5.将下犬式再与屈肘下犬式相连
# 下犬式 屈肘下犬式 def create(): global node_from, node_to matcher = NodeMatcher(graph) nodes = matcher.match('招式') for node in nodes: if node['name'] == '下犬式': node_from = node if node['name'] == '屈肘下犬式': node_to = node yoga_2 = Relationship(node_from, '进一步', node_to) graph.create(yoga_2) create()
效果:
四:python处理数据二
1.程序
from py2neo import * import pandas as pd test_graph = Graph("http://127.0.0.1:7474", auth=("neo4j", "123456")) A = Node("概念", name="向量", chapter=1, ID=100) B = Node("属性", name="向量叉积", chapter=2, ID=99) test_graph.create(A) test_graph.create(B) test_graph.create(Relationship(B, "下属于", A)) # 下列数据均为相对于“向量”实体的关系 #################### 说明 ########################### # 强相关于 strong_related # 相关于 related # 下属于 belong_to [概念上的,如平面向量 下属于 向量] # 部分于 part_to [性质上的,如起点 部分于 向量] #################### 说明结束 ####################### part_to = ["方向", "起点", "内积", "模", "终点", "数量积"] strong_related = ["几何表示", "向量模的性质", "数轴上向量的坐标运算", "向量共线的性质", "单位向量的定义", "运算律""坐标表示", "向量的长度的定义", "向量的数量积的定义", "向量的投影的定义", "三角形法则", "向量的模的定义", "要素", "向量正交分解的定义", "第一分配率", "向量平行的性质", "第二分配率", "向量的性质", "坐标运算", "线性运算", "平行四边形法则", "零向量的性质", "向量的减法的定义", "平面几何中的向量方法", "向量内积的性质", "向量的夹角的定义", "向量的数乘的定义", "向量垂直的性质", "向量在物理中的应用", "向量的定义", "取值范围", "向量的加法的定义", "向量的起点的定义", "向量的终点的定义", "结合律", ] related = ["复合变换的定义", "立体几何中的向量方法", "单位正交基底的定义", "向量共线的性质", "几何表示", "空间直角坐标系的定义", "向量平行的性质", "基本定理", "坐标表示", "向量的终点的定义", "坐标运算", "列向量的性质", "要素", "共面向量的定义", "向量的数乘运算的定义", "零向量的性质", "相等向量的定义", "向量形式", "向量的定义", "向量的投影的定义", "数列与向量综合", "平面几何中的向量方法", "相反向量的定义", "单位向量的定义", "平面向量基本定理", "复数的模的定义", "数列与解析几何综合", "向量的数乘的定义", "向量的起点的定义", "线性运算", "数列与立体几何综合", "向量正交分解的定义", "空间向量线性运算的性质", "向量在物理中的应用", "三角形法则", "向量的长度的定义", "方向向量", "矩阵特征向量的性质", "共面向量定理", "向量的模的定义", "平行四边形法则", "空间向量的性质", "空间向量模的性质", "向量的加法的定义", "取值范围", "向量的性质", "数轴上向量的坐标运算", "零向量的定义", "向量的夹角的定义", "向量的减法的定义", "几何意义", "向量的基底的定义", "行向量的性质", ] belog_to = ["平面向量", "法向量", "非零向量", "共面向量", "单位向量", "平行向量", "零向量", "基底", "相反向量", "相等向量", "空间向量", "共线向量"] # 为了便于演示,后面的ID和chapter都是任意赋值的,无实际意义。 ID = 100 for i in belog_to: ID += 1 temp = Node("概念", name=i, chapter=2, ID=ID) test_graph.create(Relationship(temp, "下属于", A)) for i in part_to: ID += 1 temp = Node("属性", name=i, chapter=3, ID=ID) test_graph.create(Relationship(temp, "部分于", A)) for i in related: ID += 1 temp = Node("属性", name=i, chapter=4, ID=ID) test_graph.create(Relationship(temp, "相关于", A)) for i in strong_related: ID += 1 temp = Node("属性", name=i, chapter=5, ID=ID) test_graph.create(Relationship(temp, "强相关于", A))
2.效果
效果太大,这里展示一个关系
3.查询
效果在注释上。
# [Node('概念', ID=100, chapter=1, name='向量'), Node('概念', ID=101, chapter=2, name='平面向量'), Node('概念', ID=104, chapter=2, name='共面向量'), Node('概念', ID=107, chapter=2, name='零向量'), Node('概念', ID=110, chapter=2, name='相等向量'), Node('概念', ID=102, chapter=2, name='法向量'), Node('概念', ID=105, chapter=2, name='单位向量'), Node('概念', ID=108, chapter=2, name='基底'), Node('概念', ID=111, chapter=2, name='空间向量'), Node('概念', ID=103, chapter=2, name='非零向量'), Node('概念', ID=106, chapter=2, name='平行向量'), Node('概念', ID=109, chapter=2, name='相反向量'), Node('概念', ID=112, chapter=2, name='共线向量')] def query(): return test_graph.nodes.match('概念').all() # (_94:概念 {ID: 100, chapter: 1, name: '\u5411\u91cf'}) def queryFirst(): return test_graph.nodes.match('概念').first() # 13 def queryCount(): return test_graph.nodes.match('概念').count() # where def queryWhere(): return test_graph.nodes.match('概念').where(ID = 103).all() # order_by def queryOrderBy(): return test_graph.nodes.match('概念').where(chapter=2).order_by('_.ID').all()