基于Python Flask 机器学习的全国+上海气象数据采集预测可视化系统
- 一、项目简介
- 二、开发环境
- 三、项目技术
- 四、功能结构
- 五、运行截图
- 六、功能实现
- 七、数据库设计
- 八、源码获取
一、项目简介
在信息科技蓬勃发展的当代,我们推出了一款基于Python Flask的全国+上海气象数据采集、预测和可视化系统。随着气候变化越发引起全球关注,精准的气象数据和可视化展示变得愈发重要。该系统采用先进的技术和创新的功能,满足用户对实时气象信息和历史天气数据的需求,助力公众、企业和政府做出更明智的决策。
在技术层面,我们充分利用Python网络爬虫技术,从中国天气网等权威数据源获取全国实时天气数据和上海历史天气数据,确保数据的及时性和准确性。通过数据清洗和MySQL数据库存储,我们保证了数据的一致性和可靠性。同时,前端技术如HTML、CSS、JavaScript和前端框架Layui构建了简洁友好的用户交互界面,用户能轻松地获取和分析数据。而后端使用Flask搭建了强大的数据接口,通过PyMySQL库实现数据与数据库的交互。在数据预测方面,我们运用scikit-learn、pandas和numpy等机器学习库,构建了多元线性回归模型,为用户提供准确的气象分析预测结果。
系统功能丰富多样,包括全国实时天气数据和上海历史天气数据的获取,全国综合天气数据和全国各城市天气数据的Echarts可视化展示,以及气象数据的多元线性回归预测功能。此外,我们提供用户登录与注册功能,确保用户数据的安全和隐私。数据管理功能也为用户提供了个性化的数据展示和公告查看。通过多维度的数据管理,用户能够深入了解全国气象数据,做出更精准的决策。
展望未来,这样一个全国+上海气象数据采集、预测和可视化系统具有广阔的发展前景。在气候变化日益严峻的背景下,我们将不断优化和完善系统,引入更多先进的机器学习算法和数据分析方法,提高气象预测的准确性和时效性。同时,将逐步扩展到更多城市和地区,形成覆盖全国乃至全球的气象数据服务体系,助力社会各界应对气候变化带来的挑战。这将为公众、企业和政府提供更全面、更实用的天气信息,推动智慧城市和可持续发展迈出坚实的一步。
二、开发环境
开发环境 | 版本/工具 |
---|---|
PYTHON | 3.6.8 |
开发工具 | PyCharm |
操作系统 | Windows 10 |
内存要求 | 8GB 以上 |
浏览器 | Firefox (推荐)、Google Chrome (推荐)、Edge |
数据库 | MySQL 8.0 (推荐) |
数据库工具 | Navicat Premium 15 (推荐) |
项目框架 | FLASK、scikit-learn |
三、项目技术
Python: 作为开发语言,用于编写后端逻辑和数据处理。
Flask: Python的Web框架,用于搭建后端数据接口和处理HTTP请求。
PyMySQL: 用于Python与MySQL数据库的交互,实现数据的存储和读取。
网络爬虫技术: 用于从中国天气网等数据源获取全国实时天气数据和上海历史天气数据。
数据清洗: 用于对爬取的原始数据进行预处理,确保数据的准确性和一致性。
Echarts: JavaScript的数据可视化库,用于将数据转化为图表形式展示给用户。
LAYUI: 轻量级前端UI框架,用于构建用户友好的交互界面。
JavaScript: 用于实现前端交互和处理用户输入。
HTML和CSS: 用于构建前端界面和样式设计。
scikit-learn、pandas和numpy: Python的数据处理和机器学习库,用于数据预测和分析。
AJAX: 用于实现前后端数据交互,异步请求后端数据接口。
MySQL: 数据库管理系统,用于持久化数据。
以上技术共同协作,使得系统能够实现数据采集、预测、可视化和用户交互等丰富功能,并为用户提供准确、实用的气象信息。
四、功能结构
该系统的功能结构包括以下几个模块:
数据采集功能模块:
全国实时天气数据采集:从中国天气网等数据源获取全国各地的实时天气数据。
上海历史天气数据采集:从数据源获取上海的历史天气数据,用于数据分析和可视化展示。
数据预处理存储模块:
数据处理:对采集到的原始天气数据进行预处理,去除无效数据,确保数据的准确性和一致性。
数据库存储:将预处理后的天气数据存储到MySQL数据库中,以备后续的数据分析和预测使用。
数据可视化功能模块:
全国综合天气数据可视化:使用Echarts可视化库将全国实时天气数据以图表和地图形式展示,让用户直观了解全国范围的气象情况。
全国各城市天气数据可视化:将实时天气数据在地图上标记各城市的位置,并绘制相应的图表,让用户可以查看各城市的气象情况。
上海历史天气数据可视化:使用Echarts将历史天气数据以折线图、柱状图等形式展示,让用户可以查看上海过去一段时间的气象变化。
数据预测功能模块:
气象分析预测:利用scikit-learn、pandas和numpy等机器学习库,构建多元线性回归模型,对气象数据进行分析和预测,为用户提供准确的气象分析和预测结果。
用户登录与注册功能模块:
用户注册:允许用户通过输入用户名和密码进行注册,确保用户数据的安全性。
用户登录:已注册用户可以通过输入用户名和密码登录,以便获取个性化的气象数据展示和预测功能。
数据管理功能模块:
用户数据管理:实现对用户信息的增删改查功能,保证用户数据的完整性和安全性。
公告数据管理:如果有公告功能,可以实现对公告信息的发布、编辑和删除。
全国气象数据管理:确保从数据采集功能中获取到的全国实时天气数据能够正确存储,并且能够根据需要进行更新和清理。
这些功能模块相互协作,构成了一个完整的全国+上海气象数据采集、预测和可视化系统,为用户提供全面的气象信息,支持用户做出明智的决策。用户可以通过界面进行交互,获取实时数据、查看历史数据,并利用预测功能得到未来气象变化的趋势。该系统还具备不断拓展和优化的潜力,以适应不断变化的气象科学和用户需求。
其中论文目录结果如下:
五、运行截图
系统登录页面
用户注册页面
后台管理首页面
全国各城市气象可视化
上海各地区可视化
上海各地区城市历史气象可视化
上海各地区城市气象预测
用户管理页面**
公告管理页面
全国气象管理页面
上海气象管理页面
上海各地区历史气象管理页面
系统爬虫日志管理页面
六、功能实现
机器学习预测核心代码
# 预测数据(cityname, record_date, high, low, weather, wd, ws)
def predict(cityname, record_date, high, low, weather, wd, ws):
city = cityname
cityname, record_date, high, low, weather, wd, ws =deal_data.transformer_item(cityname, record_date, high, low,weather, wd, ws)
next_input = [float(cityname), float(record_date), float(high), float(low), float(weather), float(wd), float(ws)]
result = []
for i in range(1, 11):
record_date, record_str = deal_data.getNextDay(i)
pred_y = model.predict([next_input])[0]
next_input = [float(cityname), float(record_date)]
next_input.extend(pred_y)
result.append(deal_data.de_transformer_item(city, record_str, pred_y[0], pred_y[1], pred_y[2], pred_y[3], pred_y[4]))
return result
创建数据库连接核心代码
def connect(self):
self.conn = pymysql.connect(
host=DB_CONFIG["host"],
port=DB_CONFIG["port"],
user=DB_CONFIG["user"],
passwd=DB_CONFIG["passwd"],
db=DB_CONFIG["db"],
charset=DB_CONFIG["charset"],
cursorclass=pymysql.cursors.DictCursor)
self.cursor = self.conn.cursor()
上海城市可视化数据接口
@app.route('/data/history/weather', methods=['post', 'get'])
def data_history_category():
city = request.args.get('city')
result_weather = data_service.weather_category_data(city)
result_wd = data_service.wd_category_data(city)
result_ws = data_service.ws_category_data(city)
result_temp = data_service.temp_data(city)
return {"weather_data": result_weather, "wd_data": result_wd, "ws_data": result_ws, "temp_data": result_temp}
上海城市数据构建业务代码
# 气象分类
def weather_category_data(city):
sqlManager = SQLManager()
key_sql = "select weather from historyweather where cityname ='" + city + "' group by weather"
value_sql = "select count(id) as `value`,weather as `name` from historyweather where cityname ='" + city + "' group by weather"
key_data = sqlManager.get_list(key_sql)
value_data = sqlManager.get_list(value_sql)
x_data = [k['weather'] for k in key_data]
sqlManager.close()
return {'x': x_data, 'y': value_data}
# 风向分类
def wd_category_data(city):
sqlManager = SQLManager()
key_sql = "select wd from historyweather where cityname ='" + city + "' group by wd"
value_sql = "select count(id) as `value`,wd as `name` from historyweather where cityname ='" + city + "' group by wd"
key_data = sqlManager.get_list(key_sql)
value_data = sqlManager.get_list(value_sql)
x_data = [k['wd'] for k in key_data]
sqlManager.close()
return {'x': x_data, 'y': value_data}
# 风速分类
def ws_category_data(city):
sqlManager = SQLManager()
key_sql = "select ws from historyweather where cityname ='" + city + "' group by ws"
value_sql = "select count(id) as `value`,ws as `name` from historyweather where cityname ='" + city + "' group by ws"
key_data = sqlManager.get_list(key_sql)
value_data = sqlManager.get_list(value_sql)
x_data = [str(k['ws']) + '级' for k in key_data]
y_data = [{'value': i['value'], 'name': str(i['name']) + '级'} for i in value_data]
sqlManager.close()
return {'x': x_data, 'y': y_data}
七、数据库设计
表名:citys
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int(11) | 是 | |
city_name | varchar(50) | 否 | 城市名称 |
city_code | varchar(50) | 否 | 城市编码 |
city_py | varchar(50) | 否 | 城市拼音 |
表名:currentweather
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int(11) | 是 | |
province | varchar(255) | 否 | 省 |
cityname | varchar(50) | 否 | 城市名称 |
record_date | date | 否 | 天气时间 |
record_time | varchar(50) | 否 | 实时时分 |
temp | int(11) | 否 | 当前温度 |
wd | varchar(20) | 否 | 风向 |
ws | int(11) | 否 | 凤力 |
wse | int(11) | 否 | 风速 |
sd | int(11) | 否 | 湿度 |
weather | varchar(20) | 否 | 天气 |
rain | decimal(10,2) | 否 | 降雨量 |
aqi | int(11) | 否 | 空气质量 |
create_time | datetime | 是 | 数据创建时间 |
is_old | int(11) | 否 | 1老数据,0新数据 |
表名:detailweather
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int(11) | 是 | |
province | varchar(255) | 否 | 省 |
cityname | varchar(50) | 否 | 城市名称 |
record_date | date | 否 | 天气时间 |
record_time | varchar(50) | 否 | 实时时分 |
temp | int(11) | 否 | 当前温度 |
wd | varchar(20) | 否 | 风向 |
ws | int(11) | 否 | 凤力 |
wse | int(11) | 否 | 风速 |
sd | int(11) | 否 | 湿度 |
weather | varchar(20) | 否 | 天气 |
rain | decimal(10,2) | 否 | 降雨量 |
aqi | int(11) | 否 | 空气质量 |
create_time | datetime | 是 | 数据创建时间 |
is_old | int(11) | 否 | 1老数据,0新数据 |
表名:historyweather
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int(11) | 是 | |
province | varchar(255) | 否 | 省 |
cityname | varchar(50) | 否 | 城市名称 |
record_date | date | 否 | 天气时间 |
high | int(11) | 否 | 最高温 |
low | int(11) | 否 | 最低温 |
weather | varchar(20) | 否 | 天气 |
wd | varchar(20) | 否 | 风向 |
ws | int(11) | 否 | 风力 |
create_time | datetime | 是 | 数据创建时间 |
表名:notice
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int(11) | 是 | |
title | varchar(255) | 否 | 公告标题 |
content | longtext | 否 | 公告内容 |
user_name | varchar(50) | 否 | 发布人 |
create_time | datetime | 否 | 发布时间 |
表名:slog
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int(11) | 是 | |
log | varchar(255) | 否 | |
create_time | datetime | 否 |
八、源码获取
源码、安装教程文档、项目简介文档以及其它相关文档已经上传到是云猿实战官网,可以通过下面官网进行获取项目!