标题 | 基于Flask、Pyecharts和Sklearn的数据可视化与预测研究 |
范文 | 杨凡 陈豪 摘 要:本文主要是基于采集到的网站招聘数据,建立起学历和地域需求相关的数据表,并且利用pyecharts在flask网站框架中进行可视化展示。过程包括用Python代码搭建flask工程框架,初始化代码服务器;建立数据对象的模型,写数据库的连接配置和数据库中的表对应并读取数据;编写pyecharts前端整合代码,导入第三方Javascript插件的离线文件,拆分数据并展示;最后提出未来预测新城市某学历需求的方案和项目改进的愿景。项目中解决的问题和操作的流程,可以为以后的其他类似研究项目提供一些帮助和见解。 关键词:flask;pyecharts;sklearn;数据可视化;数据模型 ABSTRACT: Based on the collected recruitment data, this paper establishes a data table related to education and regional needs, and uses pyecharts to display it visually in the framework of flash website. The process includes using Python code to build the flash engineering framework, initializing the code server; establishing the data object model, writing the connection configuration of the database and the corresponding tables in the database, and reading the data; writing the front-end integration code of pyecharts, importing the offline file of the third-party JavaScript plug-in, splitting the data and displaying it; finally, it puts forward a scheme for predicting the educational requirements of a new city in the future And the vision of project improvement. The problems solved in the project and the operation process can provide some help and insights for other similar research projects in the future. Keywords: flask; pyecharts; sklearn; data visualization; data model 目前,計算机大数据技术的发展迅猛使得数据有效呈现与展示的需求变得十分迫切,核心数据必须要通过友好且充分表达的可视化手段才能展现出来并指导、预测人的行为实践,完成数据展示也才能完成数据运行的一个闭环。导师给与的选题,是基于采集到的网站招聘数据,建立起学历和地域需求相关的可视化展示,并且给出预测未来某一个城市的某种人才需求的数量的方案。具体做法,是用Python代码搭建flask工程框架,写flask的初始化代码,建立数据对象的模型(Models),写数据库的连接配置和数据库中的表对应并读取数据。编写pyecharts前端整合代码,导入第三方Javascript插件的离线文件,拆分数据并展示。已有的城市和学历的数量,可以作为训练集输入,借助scikit-learn包进行机器学习,尝试让计算机为我们预测某一个城市的某种学历需求数量是多少。 1建立服务端框架 服务端框架设定为一个flask项目,包含:一个静态(static)文件夹,用于存放图片、第三方脚本插件和自己编写前端脚本;一个模板(templates)文件夹,用于存放模板静态网页来让flask与数据结合推送到前台;一个模型(model)文件夹,用于存放数据库的各种连接模型;一个路由(routes)文件夹,存放各种不同的网站路由;网站根目录下一个配置文件config.py,用于存放各种网站的配置信息config.py文件和一个作为网站的运行入口的main.py文件。其中routes文件夹下,需要一个初始化__init__文件作为route模块的初始化文件,接收main.py的运行指令,设定Flask的初始配置信息,注册蓝图(blueprint)信息等操作。 整个项目的结构图如下所示: 服务器运行从main.py开始,需要从routes模块(route文件夹)中导入app对象(在__init__.py中),所以要最开始要写from routes import app;导入charts对象(由charts.py定义),来显示最后完成的可视化图表,所以要接着写from routes import charts;导入pyecharts的伪造数据工具,写上from pyecharts.faker import Faker,并对应在打印出伪造数据查看输出效果,写上print (Faker.choose())和print (Faker. values())两行。确认没问题后,用代码启动服务器if __name__ == "__main__": app.run("127.0.0.1", port=8080, debug=True)。 在routes模块中,需要导入Flask构造类来初始化唯一的Flask对象app,所以要写上from flask import Flask;为了连接数据库,要调用数据库flask内置的flask_sqlalchemy组件SQLAlchemy。接下来写代码app = Flask("myweb")实例化全局唯一的app,其中名称myweb可以自由个性化设定。接着写指定app的配置文件的代码app.config.from_object('config'),有关于app的复杂设定信息可以以参数赋值的方式写在config.py当中。最后,定义数据库变量db = SQLAlchemy(app) 与app对象关联后,框架的入口部分就完成了,可以开始编写数据库部分的代码。 2建立模型取得数据 在之前的采集、存储与分析项目中,我们完成了核心数据的抽取,并已经成功将其放入MySQL数据库当中。数据库的连接信息将写入config.py文件来供flask项目调用并拿到数据展示。具体做法,就是将SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:123456@ 127.0.0.1:3306/flask?charset=utf8"和SQLALCHEMY_TRACK_MODIFICATION=True两行数据写入config.py,代码的意思是连接本地mysql数据库,用户名root,密码123456,同时设定数据库的追踪修改为True允许。这两行信息会被上一节routes的__init__.py文件中编写的app.config. from_object('config')代码所获得并用于连接数据库操作。 在models模块(models文件夹)下的xueli.py文件,是用来设定与数据库中具体的数据表的链接,这也是flask的数据库表读取的一种特性。首先要取得routes模块中的与app对象已经关联的db对象,所以要写from routes import db导入db,然后调用db.Model子模块作为初始值传入自己定义的数据对象类来生成数据对象,在代码编写时,有几个数据项就要编写几行的成员数据,具体是6行,class Data(db.Model):定义类头部传初值、__tablename__='data1'指定表名、id=db.Col umn(db.Integer, primary_key=True)序号主键、city=db.Column(db.String(255))城市名称数据项、xueli =db.Column(db.String(255))学历名称数据项和num=db.Column(db.Integer)所需人数数据项。部分数据如下图: 拿到数据类的数据对象,还要设定数据的读取方法。继续编写xueli.py文件,要设定查询方法:sql()。通过循环来将数据查询出来并形成记录列表,作为返回值返回,具体代码分为6行,分别是def sql():设定查数据方法名、req=db.session.execute("select * from `data1`;")查询表data1里的所有数据、sz=[]设定一个空列表准备接受数据、for i in req:读取循环开始、sz.append(i[1:4])循环体追加数据、return sz循环结束、返回所有的数据值。 3可视化整合展示 在数据库链接、连接与数据读取完成后,接下来进行数据整整合形成静态网页并推送前台的操作。这里除了pyecharts这个python的插件之外,还需要前台网页的两个第三方Javascript插件的配合,它们是echarts.min.js和jquery.min.js。下载好后,把它们放入静态文件目录static下,以便在断网的时候也能够正常显示,而且需要另外设定js_host,把在线目录改为本地目录。 在前一节,已经从MySQL中取得了所需要展示的数据,现在要把它和静态页面进行连接并传送到前台展示。显示所需的静态网页,是由pyecharts自动生成的,我们不需要编写静态网页框架。那么关键就是要编写routes模块下的charts.py文件来做好数据与页面的整合工作。打开charts.py,添加第一行from pyecharts.charts import Bar,我们打算用柱状图来显示数据;编写第二行from pandas import DataFrame,导入pandas来快速处理数据;编写第三行from models import xueli,从models目录下读取xueli.py拿到读取数据的功能,这样就完成了头部导入部分。接下来,设定访问的路由,@app.route('/'),本flask项目目前就只完成学历、城市和数量的展示效果,所以就使用根路径。紧跟着路由设定的下一行要编写def index():展示页面函数,主要完成数据推送的功能,代码函数较多:首先data = xueli.sql()取得数据;list = []定义一个空的列表准备接受数据; ? ?for x in data:分离数据循环开始; temp = []定义临时列表备用;for y in x:一条数据的内循环开始; temp.append(y)临时列表追加数据;list.append(temp)临时列表作为整体追加入上层列表形成嵌套列表;list1 = DataFrame(list)用Pandas的DataFrame格式化数据;list2 = list1.groupby(0)按照第0列(城市)分组;x = [];y = []设定两个空列表备用;bar = Bar()新建一个pyecharts的Bar(柱状图)对象; for i in list2: print(i[0])、x.append(i[0])、temp1 = []、for j in i[1].values:、temp1.append(j[2])、y.append(temp1),以上代码是通过再一次的双循环,来将已经分组(groupby)的数据分拆给x和y,x存储了几个城市名,y则存储了大专、本科和研究生的按x的城市顺序的需求数量; 接下来的工作是拆解数据:dz = []、bk = []、yjs = []、for i in range(len(y)):、dz.append(y[i][0])、bk.append(y[i][1])、yjs.append(y[i][2])把数据分别写入dz(大专)数组,bk(本科)数组和yjs(研究生)数组;然后,利用bar.add_xaxis(x)、bar.add_yaxis('大专', dz, stack='s')、bar.add_yaxis('本科', bk, stack='s')、bar.add_yaxis('研究生', yjs, stack='s')、bar.set_series_opts(label_opts=opts.LabelOpts (is_show=False))代碼把x、y坐标轴显示的内容设定好;然后,bar.render('./templates/index.html')这条语句是生成静态网页的,它执行后会在templates原本空的文件夹下生成index.html文件。 最后,return render_template('index.html')语句,将该生成好的静态网页推送到网站前台,完成数据可视化展示,效果如下图: 4预测与总结 在已有的数据基础之上,可以选择一个新的城市比如“南京”,已知南京的大专与本科人才需求量,用sklearn来建立模型,通过其他城市三种层次人才需求量的数据来预测南京对研究生的需求量。这个新选题可以在后期继续完善。总结本项目,我们为了建立起学历和地域需求的关系并可视化展示出来,采用了Python代码搭建flask工程框架,编写了数据库模型建立、链接和连接配置代码,然后访问MySQL数据库获得数据,最后编写charts.py的前端展示页面代码。可以改进代码,加入Javascript ajax获取异步数据的功能,配合传来的实时刷新的数据,用页面定时更新函数实现实时数据刷新效果提高可视性。这些构想可以配合预测功能,在以后继续实现。 参考文献: [1] 基于Ajax与Echarts的网页动态数据加载[J]. 黄雅莉,钟琪. ?科技资讯. 2018(23) [2] MySQL数据库源代码分析及存储引擎的设计[D]. 王威.南京邮电大学 2012 [3] 基于学情分析的教学设计研究[J]. 余根钬,何琳. ?基础教育研究. 2019(21) [4] ECharts在数据可视化中的应用[J]. 崔蓬. ?软件工程. 2019(06) [5] 基于ECharts的电网Web可视化研究及应用[J]. 章锐,陈树勇,刘道伟,梁辰,侯金秀,封一贤.电测与仪表. 2017(19) 基金项目:2019年江苏省级创新训练项目校园消费行为大数据系统开发与应用项目成果 作者简介: 杨凡(2000-),男,汉族,江苏镇江人,计算机应用技术专业学生; 陈豪(1982-),男,汉族,江苏盐城人,硕士,讲师,主要研究方向:人工智能、大数据技术. (苏州经贸职业技术学院 ?江苏 苏州 215009) |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。