学习下,并做一些简单的记录。

  成果,可以使用基本命令,可以使用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()

 

 posted on 2022-05-23 14:07  曹军  阅读(988)  评论(0编辑  收藏  举报