大数据毕设 - 公交数据分析与可视化系统(大数据 python flask)

news2024/11/29 20:57:39

文章目录

  • 0 前言
  • 1 课题背景
  • 2 具体实现
  • 3 Flask框架
  • 4 ECharts可视化工具
  • 5 最后

0 前言

🔥 Hi,大家好,这里是丹成学长的毕设系列文章!

🔥 对毕设有任何疑问都可以问学长哦!

这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是

🚩 基于大数据的公交数据分析与可视化系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md

1 课题背景

本项目采用B/S架构,利用前后端分离的方法来实现Web开发。同时采用加密的方法对数据进行脱敏,利用python对大数据处理的优势对数据进行整合和清洗,方便可视化时的数据拿取,利用Vue前端框架结合ECharts可视化组件进行前端可视化开发。我们从车辆正晚点、车辆运营情况、线路交通状况、站点客流、线路客流、车辆的满载率、OD客流分析这7个维度来分析公交数据。总体来说是利用某城市特殊的公交数据做出一套针对某城市的公交状况可视化分析系统。为解决某城市公共交通人员出行、道路拥堵、时刻表安排等问题的解决提供技术支持

2 具体实现

前端UI设计

在这里插入图片描述

行车正晚点

在这里插入图片描述

线路运营

在这里插入图片描述

站点运营

在这里插入图片描述

线路客流

在这里插入图片描述

站点客流

在这里插入图片描述

OD客流

在这里插入图片描述

3 Flask框架

简介

Flask是一个基于Werkzeug和Jinja2的轻量级Web应用程序框架。与其他同类型框架相比,Flask的灵活性、轻便性和安全性更高,而且容易上手,它可以与MVC模式很好地结合进行开发。Flask也有强大的定制性,开发者可以依据实际需要增加相应的功能,在实现丰富的功能和扩展的同时能够保证核心功能的简单。Flask丰富的插件库能够让用户实现网站定制的个性化,从而开发出功能强大的网站。

本项目在Flask开发后端时,前端请求会遇到跨域的问题,解决该问题有修改数据类型为jsonp,采用GET方法,或者在Flask端加上响应头等方式,在此使用安装Flask-CORS库的方式解决跨域问题。此外需要安装请求库axios。

Flask框架图

在这里插入图片描述

相关代码:

import sqlalchemy
from flask import Flask, request, render_template,flash
import pymysql
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from flask import jsonify
import json
import toolfun

app = Flask(__name__)

db = pymysql.connect("localhost", "root", "renshuaichen", "firstdatabase")
cursor = db.cursor()
app.secret_key='aaa'

# app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:renshuaichen@127.0.0.1/firstdatabase'
# app.config['SQLALCHEMY_TRACK_MODIFICATIONS ']=False
# db1=SQLAlchemy(app)


# @app.route('/')
# def get_data():
#     db = pymysql.connect("localhost", "root", "renshuaichen", "firstdatabase")
#     cursor=db.cursor()
#     sql="select * from 1table"
#     print(cursor.execute(sql))
# @app.route('/getdata')
# def get_data():
#     sql = "select * from 趟次201811"
#     cursor.execute(sql)
#     data = cursor.fetchall()
#     jsonify(data)

#------------------------------------------第一次的测试----------------------------
# @app.route('/',methods=['GET','POST'])
# def update_page():
#     err="请填写条件"
#     data="数据为空"
#     bustime_p = []
#     bustime_f = []
#     turn=[]
#     if request.method=='POST':
#         input1 = request.form.get('input1')
#         input2 = request.form.get('input2')
#         if not all([input1,input2]):
#             err='消息不完整'
#         elif input1=='2'and input2=='1':
#             sql = "select * from 到离站201812 where 趟次ID='149959264' and 线路ID='2576' and 线路名称='34路' and 进出站='2'"
#             cursor.execute(sql)
#             data=cursor.fetchall()
#             time_a,sta_a=toolfun.by_time(data)
#             print(time_a)
#             return render_template("index.html",time_a=json.dumps(time_a),sta_a=json.dumps(sta_a))
#         else:
#             err=""
#             sql = "select 排班时间 from 行车计划201812 where 线路名称='81路' and 排班时间 like '2018-12-02%'"
#             cursor.execute(sql)
#             data=cursor.fetchall()
#             bustime_p=toolfun.get_time_plan(data)
#             turn=toolfun.turn(data)
#             print(data)
#             sql="select 运营日期 from 趟次201812 where 线路名称='81路' and 运营日期 like '2018/12/2 %'"
#             cursor.execute(sql)
#             data = cursor.fetchall()
#             print(data)
#             bustime_f=toolfun.get_time(data)
#             print(bustime_f)
#             # return render_template('index.html',err=json.dumps(err),bustime_f=json.dumps(bustime_f),bustime_p=json.dumps(bustime_p),turn=json.dumps(turn))
#     # return render_template('index.html')
#     # sql = "select * from 趟次201811"
#     # cursor.execute(sql)
#     # data = cursor.fetchall()
#     # jsonify(data)
#     return render_template('on-schedule.html', err=json.dumps(err), bustime_f=json.dumps(bustime_f),
#                            bustime_p=json.dumps(bustime_p), turn=json.dumps(turn))
#     # return render_template('index.html', err=json.dumps(err))
#---------------------------------------------------------------------------------------------

#----------------------------测试2-----------------------------------------
@app.route('/',methods=['GET','POST'])
def update_page():
    err="请填写条件"
    data="数据为空"
    bustime_p = []
    bustime_f = []
    turn=[]
    if request.method=='POST':
        select1 = request.values.get('s1')
        select2 = request.values.get('s2')
        if select1=='0000-00-00' and select2=='0000-00-00':
            err='消息不完整'
        else:
            err=""
            sql = "select 排班时间 from 行车计划201812 where 线路名称='"+select1+"' and 排班时间 like '"+select2+"%'"
            cursor.execute(sql)
            data=cursor.fetchall()
            bustime_p=toolfun.get_time_plan(data)
            turn=toolfun.turn(data)
            print(data)
            sql="select 运营日期 from 趟次201812 where 线路名称='"+select1+"' and 运营日期 like '"+toolfun.change_data_from(select2)+" %'"
            cursor.execute(sql)
            data = cursor.fetchall()
            print(data)
            bustime_f=toolfun.get_time(data)
            print(bustime_f)
            # return render_template('index.html',err=json.dumps(err),bustime_f=json.dumps(bustime_f),bustime_p=json.dumps(bustime_p),turn=json.dumps(turn))
    # return render_template('index.html')
    # sql = "select * from 趟次201811"
    # cursor.execute(sql)
    # data = cursor.fetchall()
    # jsonify(data)
    return render_template('on-schedule.html', err=json.dumps(err), bustime_f=json.dumps(bustime_f),
                           bustime_p=json.dumps(bustime_p), turn=json.dumps(turn))
    # return render_template('index.html', err=json.dumps(err))
#----------------------------------------------------------------------------




# @app.route('/',methods=['GET','POST'])
# def update_page():
#     err="请填写条件"
#     data="数据为空"
#     bustime_p = []
#     bustime_f = []
#     turn=[]
#     print('1')
#     if request.method=='POST':
#         select1 = request.values.get('s1')
#         select2 = request.values.get('s2')
#         print(select1)
#         print(select2)
#         if select1=='0000-00-00' and select2=='0000-00-00':
#             err='消息不完整'
#         else:
#             err=""
#             sql = "select 排班时间 from 行车计划201812 where 线路名称='"+str(select2)+"' and 排班时间 like '"+str(select1)+"%'"
#             cursor.execute(sql)
#             data=cursor.fetchall()
#             bustime_p=toolfun.get_time_plan(data)
#             turn=toolfun.turn(data)
#             print(data)
#             sql="select 运营日期 from 趟次201812 where 线路名称='"+str(select1)+"' and 运营日期 like '2018/12/2 %'"
#             cursor.execute(sql)
#             data = cursor.fetchall()
#             print(data)
#             bustime_f=toolfun.get_time(data)
#             print(bustime_f)
#     return render_template('on-schedule.html',err=json.dumps(err), bustime_f=json.dumps(bustime_f),bustime_p=json.dumps(bustime_p), turn=json.dumps(turn))


@app.route('/t_point',methods=['GET','POST'])
def t_point():
    err="请填写条件"
    data="数据为空"
    time_a_1 = []
    time_a_2 = []
    time_a_3 = []
    sta_a = []
    turn=[]
    if request.method=='POST':
        select1 = request.values.get('s1')
        select2 = request.values.get('s2')
        if select1 == '0000-00-00' and select2 == '0000-00-00':
            err='消息不完整'
        else:

            sql = "select 始发站名称 from 行车计划201812 where 线路名称='"+select1+"'"
            cursor.execute(sql)
            f_stop = cursor.fetchone()
            print(f_stop[0])
            sql="select 趟次ID from 到离站201812 where 线路名称='"+select1+"'and 到站时间 like '"+toolfun.change_data_from(select2)+" 7:0%' and 进出站='2' and 站点名称='"+f_stop[0]+"'"
            # sql = "select * from 到离站201812 where 趟次ID='149959264' and 线路ID='2576' and 线路名称='34路' and 进出站='2'"
            cursor.execute(sql)
            trip_1=cursor.fetchone()
            print(trip_1[0])
            # sql="select 趟次ID from 到离站201812 where 线路名称='"+select1+"'and 到站时间 like '"+toolfun.change_data_from(select2)+" 12:0%' and 进出站='2' and 站点名称='"+f_stop[0]+"'"
            # cursor.execute(sql)
            # trip_2 = cursor.fetchone()
            #
            # sql = "select 趟次ID from 到离站201812 where 线路名称='" + select1 + "'and 到站时间 like '" + toolfun.change_data_from(select2) + " 18:0%' and 进出站='2' and 站点名称='" +f_stop[0] + "'"
            # cursor.execute(sql)
            # trip_3 = cursor.fetchone()
            sql = "select * from 到离站201812 where 趟次ID='"+trip_1[0]+"' and 进出站='2'"
            cursor.execute(sql)
            data_1 = cursor.fetchall()
            time_a_1,sta_a = toolfun.by_time(data_1)
            # sql = "select * from 到离站201812 where 趟次ID='"+trip_2[0]+"'"
            # cursor.execute(sql)
            # data_2 = cursor.fetchone()
            # time_a_2,sta_a = toolfun.by_time(data_2)
            # sql = "select * from 到离站201812 where 趟次ID='"+trip_3[0]+"'"
            # cursor.execute(sql)
            # data_3 = cursor.fetchone()
            # time_a_3,sta_a = toolfun.by_time(data_3)
    return render_template("t_point.html", time_a_1=json.dumps(time_a_1), sta_a=json.dumps(sta_a), time_a_2=json.dumps(time_a_2), time_a_3=json.dumps(time_a_3))
    # return render_template('t_point.html', err=json.dumps(err), bustime_f=json.dumps(bustime_f),
    #                        bustime_p=json.dumps(bustime_p), turn=json.dumps(turn))
    # return render_template('index.html', err=json.dumps(err))






@app.route('/page_one',methods=['GET','POST'])
def page_one():
    return render_template('站点客流.html')

@app.route('/page_two',methods=['GET','POST'])
def page_two():
    num,name=toolfun.sta_co_data()
    return render_template('客流柱状图.html',num=json.dumps(num),name=json.dumps(name))

if __name__ == '__main__':
     app.run()

4 ECharts可视化工具

ECharts(Enterprise Charts)是百度开源的数据可视化工具,底层依赖轻量级Canvas库ZRender。兼容了几乎全部常用浏览器的特点,使它可广泛用于PC客户端和手机客户端。ECharts能辅助开发者整合用户数据,创新性的完成个性化设置可视化图表。支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)等,通过导入 js 库在 Java Web 项目上运行。

5 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Smart Tomcat + Servlet API的应用

文章目录前言一、Smart Tomcat二、Servlet API1.HttpServlet(1)方法(2)描述servlet的生命周期(3)案例2.HttpServletRequest(1)方法(2)代码示例打印请求信息获…

若依框架图片上传、富文本框编辑器功能

文章目录一、前言二、效果三、编码过程1.前端:index.vueprojectShow.js富文本框: Editor/index.vue图片上传:ImgUploadCropper/index.vue2.后端:实体ProjectShowProjectShowControllerIProjectShowServiceProjectShowServiceImplProjectShowM…

Linux命令大全

前言 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发,接触 Linux机会相对较少,因此往往容易忽视它。但是学好它却是程序员必备修养之一。 作者使用的是阿里云服务器 ECS (最便宜的那种) CentOS 7.7 64位…

指针初阶(C语言)

指针 指针是什么 内存划分是一个字节一个字节来划分的,其中每个字节都有一个编号来标识它,我们将这个编号称为地址,而指针就是地址 注意:编号是不占内存空间的,(这些编号在内存中用十六进制表示&#xff0…

正厚软件 | App测试面试题及参考答案

最近整理了一些关于App测试的面试题。 本参照答案是本人在工作实践中总结,仅代表个人观点,如有错误,请谅解。 问:说一些你在测试过程中常用到的adb命名 答:回答本问题时,首先不要想到哪个命名就说哪个命令…

锐捷ISIS基础实验

目录 ISIS理论讲解 配置ISIS邻居建立 配置路由渗透(泄露) ISIS其它的配置特性 配置ISIS时间属性 配置ISIS认证 ISIS理论讲解 ISIS——基本概念1(邻居建立、路由计算、报文封装)_静下心来敲木鱼的博客-CSDN博客https://blog…

2022年全球高被引科学家公布

博士后、访问学者及联合培养申请者,都希望去名校及牛导麾下深造。名校有世界几大排名体系做参考,其知名度毋庸置疑。但牛导的概念是什么呢?知识人网小编在此介绍最新推出的“2022年度高被引科学家”,这里云集了全球自然科学和社会…

教你使用 SO_REUSEPORT 套接字选项提升服务性能

前言 Linux 网络栈中有一个相对较新的特性——SO_REUSEPORT 套接字选项,可以使用它来提升你的服务性能。 图 1: 上面的服务是使用并行监听器来避免请求连接瓶颈,而下面的服务只使用一个监听器来接收连接 概要 HAProxy 和 NGINX 是少数几个使用 Linux …

线段树什么的不是简简单单嘛,我教你!:基础篇

线段树什么的不是简简单单嘛,我教你!:基础篇 零、序言——万物滴开篇 也许你是苦于笔试的打工人,也许你是步入算法圈不久的小小萌新(我也是萌新) ,也许你是在网上搜索数据结构课设的倒霉学生。…

2049. 统计最高分的节点数目-数组树构造+遍历求解最大值数目

2049. 统计最高分的节点数目-数组树构造遍历求解最大值数目 给你一棵根节点为 0 的 二叉树 ,它总共有 n 个节点,节点编号为 0 到 n - 1 。同时给你一个下标从 0 开始的整数数组 parents 表示这棵树,其中 parents[i] 是节点 i 的父节点。由于…

音视频 - 视频编码原理

目录 视频编码主要分为 图像的冗余 熵编码 帧内预测 帧间预测 DCT变换和量化 编码器比较 清晰度和耗时对比 一部电影1080P,帧率25fps,时长2小时,文件大小 1920x1080x1.5x25x2x360 521.4G 数据量非常大,对存储和网络传输都…

GMC Graph-Based Multi-View Clustering

GMC Graph-Based Multi-View Clustering 基于图的多视图聚类 abstract 现有的大多数方法没有充分考虑不同视图的权重,需要额外的聚类步骤来生成最终的聚类。还通常基于所有视图的固定图相似矩阵来优化目标。 本文提出了一种通用的基于图的多视图聚类算法(GMC)来解…

Android程序设计之学生考勤管理系统

基于安卓平台开发的学生考勤管理系统,本系统采用java语言设计,数据存储使用SQLite轻量级数据库实现 SQLite 简介 SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎&…

JSON 对比工具

文章目录JSON对比工具JSON对比工具 JSON 是 Web 开发领域中最常用的数据传输格式之一,因为 JSON 的可读性较高,对于一些简单的 JSON 数据,我们不需要借助任何工具就可以轻易的读取。但对于复杂的 JSON 数据就需要借助工具才行,本…

公众号文案写作技巧有哪些?教你几招

公众号文案写作是每个公众号运营者心中的痛: 你是否每天纠结写什么? 你是否写着写着就词穷了? 你是否不知道该如何下手? 公众号文案应该怎么写?今天伯乐网络传媒就来给大家分享一份超实用的公众号文案写作技巧&…

增量模型和迭代模型的优点与缺点

增量模型: 举个例子: 用户有一个需求,功能包含A,B,C... ABC 增量模型: 开发完A我就直接上线供给用户去使用 开发完C我就直接上线供给用户去使用 开发完B我就直接上线供给用户去使用 增量模型的特点 增量模型的特点…

度量BGP监测源数量对AS可见性的影响

首先,本文介绍了两个公开的BGP数据源项目情况;其次,从可见AS数量和可见AS边关系数量两个方面来分析度量BGP监测源中对等AS的可见性。 BGP数据源介绍 BGP数据源有2个公开的项目,分别是RIPE RIS和Route Views,它们使用路…

VUE基础编程(三)

案例要求 基于Vue Cli和嵌套路由技术,完成以下功能: 站点打开后会默认显示如图3.1所示的“关于公司”页面,单击图3.1页面上的“公司简介”链接,站点会显示如图3.2所示的“公司简介”页面,单击图3.1页面上的“公司治理…

【JAVA程序设计】基于SSM的学校教务管理系统-有文档

基于SSM的学校教务管理系统-有文档项目获取项目简介开发环境项目技术功能结构文档目录运行截图项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100%成功运行。 项目简介 本项目是基于SSM的学校教务管理…

[附源码]java毕业设计校园失物招领平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…