1. 项目概述
该项目是一个基于Django的空气质量分析平台,旨在提供实时和历史空气质量数据的查询、分析和预测功能。系统包括数据导入、数据库管理、前端展示和预测分析等模块,主要功能包括数据展示、基于历史数据的空气质量预测、用户查询等。
2. 系统架构
该系统采用Django框架作为后端,前端展示使用HTML和JavaScript进行交互。系统的主要模块包括:
- 数据模型:定义了空气质量相关的数据结构。
- 视图层:负责处理用户请求和响应,支持数据查询和分析。
- 爬虫模块:负责从外部网站抓取空气质量历史数据并导入系统。
- 预测模块:使用Prophet进行空气质量预测。
3. 数据模型设计
系统的核心数据模型是XinXi
,表示每条空气质量记录。模型定义如下:
3.1 XinXi
模型
class XinXi(models.Model): city = models.CharField(verbose_name='城市名称', default='', max_length=32) estate = models.CharField(verbose_name='空气质量', default='', max_length=32) AQI = models.FloatField(verbose_name='AQI', default=0) ranking = models.FloatField(verbose_name='排名', default=0) PM2_5 = models.FloatField(verbose_name='PM2.5', default=0) PM10 = models.FloatField(verbose_name='PM10', default=0) So2 = models.FloatField(verbose_name='So2', default=0) No2 = models.FloatField(verbose_name='No2', default=0) Co = models.FloatField(verbose_name='Co', default=0) _O3 = models.FloatField(verbose_name='O3', default=0) datetiems = models.CharField(verbose_name='日期', default='', max_length=32) date = models.DateTimeField(auto_now_add=True) def __str__(self): return self.city class Meta: verbose_name = u"空气质量数据" verbose_name_plural = verbose_name
city
: 城市名称。estate
: 空气质量的描述。AQI
: 空气质量指数。PM2_5
,PM10
,So2
,No2
,Co
,_O3
: 空气中各污染物的浓度值。datetiems
: 数据记录的日期。date
: 数据录入时间(自动生成)。
4. 视图层设计
视图层负责处理用户请求并返回相应的HTML页面或数据。
4.1 index
视图
该视图用于展示所有空气质量记录,并支持根据城市名称进行搜索。
@login_required def index(request): if request.method == 'GET': results = models.XinXi.objects.all() Search = request.GET.get('Search', '') if Search: results = models.XinXi.objects.filter(city__icontains=Search) return render(request, 'fenxi/table.html', locals())
- 使用
GET
请求获取所有空气质量数据。 - 如果提供了城市名(
Search
),则进行模糊查询。
4.2 fenxi
视图
该视图用于进行数据分析,返回特定城市的空气质量分析数据。
@login_required def fenxi(request): if request.method == 'GET': citys = list(set([i.city for i in models.XinXi.objects.all()])) # 获取所有城市名 citys.sort() city = request.GET.get('city') if not city: city = '默认城市' # 获取城市的空气质量数据并进行分析 # 返回分析结果 return render(request, 'fenxi/analysis.html', locals())
- 提供一个城市选择功能,展示该城市的空气质量数据和分析结果。
5. 爬虫模块:spider.py
该模块用于从外部网站抓取历史空气质量数据。
5.1 爬虫功能
爬虫模块从指定URL抓取空气质量数据,解析网页中的JavaScript代码,并进行数据解密,最终得到空气质量数据。
if __name__ == '__main__': url = "https://www.aqistudy.cn/historydata/daydata.php?city=%E4%BF%9D%E5%AE%9A&month=201910" headers = { "User-Agent": "Mozilla/5.0 ...", } req = requests.get(url, headers=headers) js_url = re.findall(r'src="(resource/js/.*?.min.js\\?v=\\d+)"', req.text)[0] js_req = requests.get(url=urljoin(url, js_url), headers=headers) # 执行JS解密数据 js_code = open('airHistory_2108.js', 'r').read() js_bs64_code = js_req.text[5:-2] js_code = js_code.replace('jscode_pattern', js_bs64_code) js = execjs.compile(js_code) res = js.call("get_full_js", js_bs64_code)
- 功能:从指定的URL抓取数据并通过执行JavaScript解密处理。
- 使用的库:
requests
(请求数据)、execjs
(执行JavaScript代码)。
5.2 数据解密
数据通过多次Base64解密获得,最终得到空气质量数据。
type_len = len(re.findall("dweklxde", res)) base64_str = re.findall("\'(.*?)\'", res)[0] # 进一步解密数据
6. 预测模块:Prophet
系统使用Prophet
库对空气质量数据进行时间序列预测。
from fbprophet import Prophet import pandas as pd def predict_air_quality(): # 预测代码 model = Prophet() # 提供训练数据 model.fit(data) # 预测未来的空气质量数据 future = model.make_future_dataframe(periods=365) forecast = model.predict(future)
- 功能:使用Prophet进行空气质量数据的趋势预测。
- 库:
fbprophet
。
7. 数据导入模块:daoru.py
该模块用于将外部获取的空气质量数据导入数据库。通常包含读取CSV或其他格式的文件,并将数据存储到模型中。
8. 前端设计
前端展示采用HTML模板和JavaScript进行交互,使用Django模板语言渲染动态数据。
8.1 表格展示
在table.html
文件中,通过模板渲染显示查询到的空气质量数据。
<table> <thead> <tr> <th>城市</th> <th>AQI</th> <th>PM2.5</th> <!-- 其他字段 --> </tr> </thead> <tbody> {% for record in results %} <tr> <td>{{ record.city }}</td> <td>{{ record.AQI }}</td> <td>{{ record.PM2_5 }}</td> </tr> {% endfor %} </tbody> </table>
9. 部署与运行
9.1 安装依赖
- 使用
pip
安装Django及其他所需库:
pip install django fbprophet requests
9.2 数据库迁移
在部署时,需要进行数据库迁移:
python manage.py makemigrations python manage.py migrate
9.3 启动服务器
python manage.py runserver
10. 总结
本系统通过Django框架实现了空气质量数据的存储、展示、分析和预测。主要功能包括:
- 空气质量数据的查询和展示。
- 使用Prophet进行空气质量预测。
- 爬虫模块用于抓取外部空气质量数据。
- 数据导入和存储功能。
1.使用requests模块爬取空气质量网站的数据,网站存在严重的加密反爬,使用execjs运行JavaScript加密函数,拿到数据,然后解析存入文档。 2.使用时间序列模型Prophet进行预测,安装python的fbprophet模块,取出爬取的数据,开始构造模型,定义好影响预测过程的设置进行预测 3.使用django框架实现的后端,dajngo-allauth实现的登陆注册 4.前端使用html5,css3,JavaScript,bootstrap2响应式框架
具体项目演示效果:
【S2023001大数据分析毕设之基于python的空气质量预测分析可视化系统】 https://www.bilibili.com/video/BV1dK411Q7iD/?share_source=copy_web&vd_source=3d18b0a7b9486f50fe7f4dea4c24e2a4
项目包含源码和配套论文,有需要私信