• Neo4j系统的基本学习


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

      成果,可以使用基本命令,可以使用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()
  • 相关阅读:
    安利一个_Java学习笔记总结
    九涯的第一次
    attrs 资源文件 自定义属性
    EditText
    ArrayList 数组 初始化方法
    HTTP Retrofit 网络传输
    画布Canvas 画笔Paint
    View控件跟随鼠标移动
    ViewPager和Fragment中的View的点击事件冲突
    圆形图片 ImageView
  • 原文地址:https://www.cnblogs.com/juncaoit/p/16301001.html
Copyright © 2020-2023  润新知