温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目背景

        空气质量优劣程度与一个城市的综合竞争力密切相关,它直接影响到投资环境和居民健康,因此越来越受到政府和公众的关注。本项目利用网络爬虫从某空气质量监测网站抓取全国各大城市的历年空气污染数据(PM2.5,PM10,SO2,NO2,CO,O3),对全国各城市(空间维度)不同年度(时间维度)等维度进行空气污染物的统计分析,并利用 Echarts 进行可视化展示。

        B站详情与代码下载:基于数据挖掘的城市天气与空气质量数据分析及预测_哔哩哔哩_bilibili

        本系统2023年12月进行了迭代升级,以下为升级后的系统演示视频。

基于Python的空气质量可视化分析与预测平台

2. 功能组成

        基于 Python 的全国空气质量监测与可视化分析平台的功能主要包括:

3. 基于 Python 的全国空气质量监测与可视化分析平台

3.1 空气质量 AQI 数据采集

        从某天气监测网站采集全国各大城市的历年空气质量数据,并进行数据清洗和格式化:

......

for city in city_map:
    for year_month in year_months:
        year_month_line = []
        try:
            print('爬取{} {} 的AQI数据'.format(city, year_month))
            url = 'http://www.xxxx.com/aqi/{}-{}.html'.format(city_map[city], year_month)
            response = requests.get(url, timeout=1000)
            response = response.text

            soup = BeautifulSoup(response, 'lxml')
            items = soup.table.find_all('tr')

            for i, item in enumerate(items):
                if i == 0:
                    continue
                data = item.find_all('td')
                # 日期
                date = remove_space(data[0].text)
                # 质量等级
                tianqi = remove_space(data[1].text)
                # AQI指数
                qiwen = remove_space(data[2].text)

                year_month_line.append(','.join([city, date, tianqi, qiwen]) + '\n')
            fout.writelines(year_month_line)
            fout.flush()
        except:
            continue
......

3.1 系统注册登录

3.2 城市历史空气质量数据查询

3.3 各城市空气质量年度变化分析

        通过对某城市某一年份的各类污染物(PM2.5,PM10,SO2,NO2,CO,O3)进行变化分析,分析出一年当中某类污染物的指标走势情况:

3.4 各城市空气质量年度月份统计

        对各城市某一年的各类空气污染指标,按照月份进行分组计算平均污染指数,并绘制柱状图和饼状图,可以直观的发现这些污染物最严重的月份等信息:

def get_city_month_air_quality(city, year, zhibiao):
    """对城市的年度空气指标进行统计,计算平均指标"""
    city_df = air_df[(air_df['city'] == city) & (air_df['year'] == year)]
    city_df = city_df.sort_values(by='time', ascending=True)
    print('数据条目数:', city_df.shape[0])
    city_month_df = city_df[['month', zhibiao]].groupby(by='month').mean().reset_index()
    city_month_df = city_month_df.sort_values(by=zhibiao, ascending=True)
    results = {'月份': ['{}月份'.format(int(r)) for r in city_month_df['month'].values.tolist()],
               '均值': city_month_df[zhibiao].values.tolist()}
    print(results)
    return jsonify(results)

3.5 各城市年度空气质量日历热力图

        对各城市每个年份某空气污染物的分布情况,通过对每年的污染情况绘制日历热力图,直观的发现该污染物随时间的变化情况:

3.6 各城市空气污染物年度占比

        计算各城市每年各类空气污染物指数占比情况,可得出影响该城市空气质量的主要污染源有哪些,为空气治理提供依据:

def get_city_polution_data(city, year):
    city_df = air_df[(air_df['city'] == city) & (air_df['year'] == year)]
    city_df['primary_pollutant'] = city_df['primary_pollutant'].map(lambda x: str(x).replace('-', '良').replace('None', '良'))
    pollutants = city_df['primary_pollutant'].value_counts().reset_index()

    all_aqis = city_df['AQI'].values.tolist()

    air_quality = {'优': 0, '良': 0, '轻度污染': 0, '中度污染': 0, '重度污染': 0, '严重污染': 0}
    for aqi in all_aqis:
        if 0 <= aqi < 50:
            air_quality['优'] += 1
        elif 50 <= aqi < 100:
            air_quality['良'] += 1
        elif 100 <= aqi < 150:
            air_quality['轻度污染'] += 1
        elif 150 <= aqi < 200:
            air_quality['中度污染'] += 1
        elif 200 <= aqi < 300:
            air_quality['重度污染'] += 1
        else:
            air_quality['轻度污染'] += 1

    air_quality_keys = list(air_quality.keys())

    return jsonify({'污染种类': pollutants['index'].values.tolist(),
                    '数值': pollutants['primary_pollutant'].values.tolist(),
                    '空气质量': air_quality_keys,
                    '空气质量数值': [air_quality[k] for k in air_quality_keys]})

3.7 城市空气质量对比分析

        除了对某个城市的各项空气污染情况,还可以对某两个城市的某一类空气污染指数进行对比分析,筛选出哪个城市的空气质量更好,更宜居:

4. 总结

        本项目利用网络爬虫从某空气质量监测网站抓取全国各大城市的历年空气污染数据(PM2.5, PM10, SO2, NO2, CO, O3),对全国各城市(空间维度)不同年度(时间维度)等维度进行空气污染物的统计分析,并利用 Echarts 进行可视化展示。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码

精彩专栏推荐订阅:

1. Python 毕设精品实战案例
2. 自然语言处理 NLP 精品实战案例
3. 计算机视觉 CV 精品实战案例

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐