基于机器学习的空气质量预测可视化分析

1. 项目概述

该项目是一个基于Django的空气质量分析平台,旨在提供实时和历史空气质量数据的查询、分析和预测功能。系统包括数据导入、数据库管理、前端展示和预测分析等模块,主要功能包括数据展示、基于历史数据的空气质量预测、用户查询等。

2. 系统架构

该系统采用Django框架作为后端,前端展示使用HTML和JavaScript进行交互。系统的主要模块包括:

  1. 数据模型:定义了空气质量相关的数据结构。
  2. 视图层:负责处理用户请求和响应,支持数据查询和分析。
  3. 爬虫模块:负责从外部网站抓取空气质量历史数据并导入系统。
  4. 预测模块:使用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框架实现了空气质量数据的存储、展示、分析和预测。主要功能包括:

  1. 空气质量数据的查询和展示。
  2. 使用Prophet进行空气质量预测。
  3. 爬虫模块用于抓取外部空气质量数据。
  4. 数据导入和存储功能。

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

项目包含源码和配套论文,有需要私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源码空间站TH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值