zoukankan      html  css  js  c++  java
  • 使用Python操作neo4j和画柱状图

    前言

    毕业设计里要用到neo4j和柱状图来对数据进行可视化,踩了几天坑,今天填一下。

    Neo4J

    这是一个图像数据库,接触到这东西发现挺有意思的,比学MySQL有意思多了。

    安装

    1,从官网下载,但是速度奇慢,可能需要搭梯子。

    2,当然是百度搜一搜了,反正挺多的,要么可以用我这个(链接:https://pan.baidu.com/s/1FUmJsA_6UR6Kgkrs7f_OMQ 
    提取码:5t06),适用于JDK1.8

    下载好安装包之后,解压到某一个目录,如果跟我一样只进行简单的可视化那不需要修改什么东西,至于部署在服务器上我们这里不谈。

    在这之后,需要用命令行打开CMD,因为运行的脚本里面有用到PowerShell,而这个一般在C盘的系统目录里面,如果报了找不到PowerShell,

    先检查是不是环境变量的问题,再检查是不是没装,一般是前者的问题。

    这些准备就绪,切换到neo4j的bin目录之后,运行

    neo4j.bat console

    检查

     浏览器输入http://localhost:7474/,如果有neo4j界面出来即可。

    Neo4J

    在neo4j主要是体现出各个节点之间的关系,所以主要有Node和Relationship这两个对象。

    python中操作neo4j可以使用pyneo这个module,pip install就完事了。

    这里我要可视化的例子是大学的名字,大学的名字全部存放在一个txt的文件中,然后他们同属于“大学”这个分类。

    代码也不是很复杂,按行读取大学名称,然后创建节点和关系等。

    # coding:utf-8
    from py2neo import Graph,Node,Relationship
    
    if __name__=="__main__":
        # 连接数据库
        graph = Graph("http://localhost:7474", username="neo4j", password="1998")
        # 文件流
        fr = open("../data/college.txt",'r',encoding="utf-8")
        # 分类节点
        college = Node("分类",name="大学")
        graph.create(college)
        
        for i in  fr.readlines():
            # 每个大学的节点
            u = Node("大学名字",name=i)
            graph.create(u)
            # 和分类节点的关系
            relationship = Relationship(college,"大学",u)
            graph.create(relationship)

    再去看看效果:

    使用python画柱状图

    这里需要可视化的是学校开设的课程的平均的分数,需要用到课程表和成绩表,先从课程表找到对应的学校开设的课程,然后

    再查找成绩表中对应的课程的评分。

    主要注意的柱状图参数的设置,比如间隔,Y轴的起始刻度字号等等。

    import pymysql
    import matplotlib.pyplot as plt
    from  matplotlib.pyplot import MultipleLocator
    
    def pltImage(schoolname,score,course,imageDir):
        # 中文显示
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        # XY轴标题
        plt.xlabel('课程',fontsize=12)
        plt.ylabel("平均分",fontsize=12)
        # 刻度字体大小5
        plt.tick_params(labelsize=5) 
        
        # 标题 XY轴
        label = schoolname
        loc = 'left'
        font_dict = {'fontsize': 14, 
                     'fontweight': 8.2, 
                     'verticalalignment': 'baseline', 
                     'horizontalalignment': loc}
        plt.title(label, fontdict=font_dict, loc=loc)
        # X字体倾斜30度
        plt.xticks(rotation=30)
        
        # 设置间隔
        xLocator = MultipleLocator(10)
        ax = plt.gca()
        ax.xaxis.set_major_locator(xLocator)
        
        # 数据
        plt.bar(range(len(course)), score, color='rgb', tick_label=course)
        # 保存到某个目录
        plt.savefig(imageDir + schoolname + '.jpg')
        plt.show()
    
    
    if __name__ == "__main__":
        # 数据库连接
        connection = pymysql.connect(
            "localhost", "root", "1998", "graduate"
        )
        cursor = connection.cursor()
    
        # 根据学校缩写得到学校开设的各个科目的平均分 制成柱状图
    
        # 从schoolShortName取出学校缩写的集合
        fr = open("../output/schoolShortName",'r',encoding='utf-8')
        schoolname = []
        for i in fr.readlines():
            schoolname.append(i.split("-")[0])
    
        # 遍历
        for i in schoolname:
            # 一个学校的课程列表
            resultSet = getCoursesBySchoolName(i)
            courseList = []
            discussCountList = []
            schoolName = ""
            for j in resultSet:
                temp2 = getCourseDiscussCount(j[0])
                schoolName = j[2]
                if temp2 != None:
                    courseList.append(j[1])
                    discussCountList.append(temp2)
            if len(courseList) != 0:
                pltImage(schoolName,discussCountList,courseList,"../CourseDiscuss/")

    效果如图:

  • 相关阅读:
    【面试题】M
    【转】C/S,B/S区别
    【转】指针和引用的区别
    内联函数
    实习-随记
    【面试】http协议知识
    wenbenfenlei
    【面试】链表反转
    测试面试题2
    测试面试题
  • 原文地址:https://www.cnblogs.com/Yintianhao/p/12541966.html
Copyright © 2011-2022 走看看