Python天气气象数据采集分析可视化系统 计算机毕业设计 Flask框架+大屏 ✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
Python语言、Flask框架、MySQL数据库 、requests爬虫框架、Echarts可视化

首先,我们需要获取气象数据,使用 Python 的 requests 库从中国的相关气象网站上获取气象数据;然后,通过 Pandas 库来处理和分析中国各个地区的气象数据并且存入数据库mysql;接下来,使用pymysql库来读取可视化所需要的气象数据;最后,开发 Flask框架将可视化所需要格式的气象数据发送到 Web 应用程序中,再利用Echarts技术对气象数据进行可视化渲染。

2、项目界面

(1)天气数据可视化大屏

在这里插入图片描述

(2)后台管理

在这里插入图片描述

(3)天气数据管理
在这里插入图片描述

(4)爬虫日志

在这里插入图片描述

(5)注册登录界面
在这里插入图片描述

3、项目说明

本课题主要是研究气象数据可视化技术的实现与应用,通过Python Flask框架来实现关于气象数据的可视化系统。Flask框架是一个基于 Python 的轻量级 Web 应用程序框架[1],适用于快速构建 Web 应用程序。气象数据可视化技术则是将气象数据以可视化的方式呈现出来,使人们更容易理解和分析数据。
首先,我们需要获取气象数据,使用 Python 的 requests 库从中国的相关气象网站上获取气象数据;然后,通过 Pandas 库来处理和分析中国各个地区的气象数据并且存入数据库mysql;接下来,使用pymysql库来读取可视化所需要的气象数据;最后,开发 Flask框架将可视化所需要格式的气象数据发送到 Web 应用程序中,再利用Echarts技术对气象数据进行可视化渲染。
在构建Web应用程序之前,需要对系统的背景、可行性、设计的业务、物理模型以及呈现的可视化效果样式进行分析。例如,对国内外相关研究背景进行分析、项目的技术可行性分析、用折线图来显示温度随时间的变化以及使用柱状图来显示降雨量等等。然后再结合系统设计、系统开发以及文档撰写,最终完成课题要求。
在实现过程中,为了更加高效、便捷的实现系统。系统架构采用了MVC模式[2],将数据层、控制层和视图层分离,使得系统更加易于维护和扩展。同时,系统采用了Flask框架,具有轻量、灵活等优点,能够快速响应用户请求,提升用户体验。
总之,气象数据可视化技术的实现与应用更加易于理解和分析气象相关数据。通过选择合适的数据类型和图表样式以及优化可视化效果和性能,最终构建出高质量的气象数据可视化Web应用程序。

4、部分代码


from flask import Flask as _Flask, flash
from flask import request, session
from flask import render_template
from flask.json import JSONEncoder as _JSONEncoder, jsonify
import decimal

from flask_apscheduler import APScheduler

import service.users_data as user_service
import service.weathers_data as weathers_data
import service.view_data as view_data
import service.version_data as version_data
import service.slog_data as slog_data
from spider.GetWeather import online


class JSONEncoder(_JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        super(_JSONEncoder, self).default(o)


class Flask(_Flask):
    json_encoder = JSONEncoder


import os

app = Flask(__name__)
app.config['SESSION_TYPE'] = 'filesystem'
app.config['SECRET_KEY'] = os.urandom(24)


# -------------前台可视化大数据分析相关服务接口start-----------------
# 系统默认路径前台跳转
@app.route('/')
def main_page():
    return render_template("main.html")


# -----------------用户管理模块START-----------------

# 用户管理页面
@app.route('/html/user')
def user_manager():
    return render_template('html/user.html')


# 获取用户数据分页
@app.route('/user/list', methods=["POST"])
def user_list():
    get_data = request.form.to_dict()
    page_size = get_data.get('page_size')
    page_no = get_data.get('page_no')
    param = get_data.get('param')
    data, count, page_list, max_page = user_service.get_user_list(int(page_size), int(page_no), param)
    return jsonify({"data": data, "count": count, "page_no": page_no, "page_list": page_list, "max_page": max_page})


# 注册用户数据
@app.route('/user/reg', methods=["POST"])
def user_reg():
    get_data = request.form.to_dict()
    name = str(get_data.get('username'))
    account = str(get_data.get('account'))
    password = str(get_data.get('password'))
    company = "平台注册"
    phone = " "
    mail = " "
    type = 1
    return user_service.add_user(name, account, password, company, phone, mail, type)


# 添加用户数据
@app.route('/user/add', methods=["POST"])
def user_add():
    get_data = request.form.to_dict()
    name = get_data.get('name')
    account = get_data.get('account')
    password = get_data.get('password')
    company = get_data.get('company')
    phone = get_data.get('phone')
    mail = get_data.get('mail')
    type = get_data.get('type')
    return user_service.add_user(name, account, password, company, phone, mail, type)


# 修改用户数据
@app.route('/user/edit', methods=["PUT"])
def user_edit():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    name = get_data.get('name')
    password = get_data.get('password')
    company = get_data.get('company')
    phone = get_data.get('phone')
    mail = get_data.get('mail')
    type = get_data.get('type')
    user_service.edit_user(id, name, password, company, phone, mail, type)
    return '200'


# 删除用户数据
@app.route('/user/delete', methods=["DELETE"])
def user_delete():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    user_service.del_user(id)
    return '200'


# -----------------用户管理模块END-----------------

# -----------------系统版本管理模块START-----------------

# 系统版本管理页面
@app.route('/html/version')
def version_manager():
    return render_template('html/version.html')


# 获取系统版本
@app.route('/version/show', methods=["POST"])
def version_show():
    res = version_data.get_sys_version()
    return jsonify({"data": res})


# 获取系统版本数据分页
@app.route('/version/list', methods=["POST"])
def version_list():
    get_data = request.form.to_dict()
    page_size = get_data.get('page_size')
    page_no = get_data.get('page_no')
    param = get_data.get('param')
    data, count, page_list, max_page = version_data.get_sys_version_list(int(page_size), int(page_no), param)
    return jsonify({"data": data, "count": count, "page_no": page_no, "page_list": page_list, "max_page": max_page})


# 新增系统版本数据
@app.route('/version/add', methods=["POST"])
def sys_version_add():
    get_data = request.form.to_dict()
    name = get_data.get('name')
    version = get_data.get('version')
    return version_data.add_sys_version(name, version)


# 修改系统版本数据
@app.route('/version/edit', methods=["PUT"])
def version_edit():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    name = get_data.get('name')
    version = get_data.get('version')
    version_data.edit_sys_version(id, name, version)
    return '200'


# 删除系统版本数据
@app.route('/version/delete', methods=["DELETE"])
def version_delete():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    version_data.del_sys_version(id)
    return '200'



# -------------前台天气大数据页面相关服务接口end-----------------

# -------------天气数据管理相关服务接口Start-----------------
# 天气数据管理页面
@app.route('/html/weather')
def new():
    return render_template('html/weathers.html')
@app.route('/html/tuijian',methods=["GET"])
def newTUIJAN():
    return render_template('html/tuijian.html')

# 获取天气数据分页
@app.route('/weather/list', methods=["POST"])
def weathers_list():
    get_data = request.form.to_dict()
    page_size = get_data.get('page_size')
    page_no = get_data.get('page_no')
    param = get_data.get('param')
    data, count, page_list, max_page = weathers_data.get_weathers_list(int(page_size), int(page_no), param)
    return jsonify({"data": data, "count": count, "page_no": page_no, "page_list": page_list, "max_page": max_page})


# 修改天气数据
@app.route('/weather/edit', methods=["POST"])
def old_edit():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    temp = get_data.get('temp')
    wd = get_data.get('wd')
    ws = get_data.get('ws')
    wse = get_data.get('wse')
    sd = get_data.get('sd')
    weather = get_data.get('weather')
    weathers_data.edit_weathers(id, temp, wd, ws, wse, sd, weather)
    return '200'


# 修改天气数据
@app.route('/weather/del', methods=["PUT"])
def old_del():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    weathers_data.del_weathers(id)
    return '200'


# -------------天气数据管理相关服务接口end-----------------


from concurrent.futures import ThreadPoolExecutor

# ----------------------爬虫/爬虫日志模块-开始----------------------
from concurrent.futures import ThreadPoolExecutor


# 爬虫日志页面
@app.route('/html/slog')
def slog_manager():
    return render_template('html/slog.html')


# 获取爬虫日志数据分页
@app.route('/slog/list', methods=["POST"])
def slog_list():
    get_data = request.form.to_dict()
    page_size = get_data.get('page_size')
    page_no = get_data.get('page_no')
    param = get_data.get('param')
    data, count, page_list, max_page = slog_data.get_slog_list(int(page_size), int(page_no), param)
    return jsonify({"data": data, "count": count, "page_no": page_no, "page_list": page_list, "max_page": max_page})


# 修改爬虫日志数据
@app.route('/slog/edit', methods=["PUT"])
def slog_edit():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    log = get_data.get('log')
    slog_data.edit_slog(id, log)
    return '200'


# 删除爬虫日志数据
@app.route('/slog/delete', methods=["DELETE"])
def slog_delete():
    get_data = request.form.to_dict()
    id = get_data.get('id')
    slog_data.del_slog(id)
    return '200'


# 后台调用爬虫
@app.route('/spider/start', methods=["POST"])
def run_spider():
    executor = ThreadPoolExecutor(2)
    executor.submit(online())
    return '200'


# 爬虫自动运行
def job_function():
    print("爬虫任务执行开始!")
    executor = ThreadPoolExecutor(2)
    executor.submit(online())


def task():
    scheduler = APScheduler()
    scheduler.init_app(app)
    # 定时任务,每隔10s执行1次
    scheduler.add_job(func=job_function, trigger='interval', seconds=1800, id='my_cloud_spider_id')
    scheduler.start()


# 写在main里面,IIS不会运行
task()
# ----------------------爬虫/爬虫日志模块-结束----------------------
if __name__ == '__main__':
    # 端口号设置
    app.run(host="127.0.0.1", port=5000)


源码获取:

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻