【环境空气质量评价挑战赛】baseline——使用lightgbm+特征工程

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

一、赛事背景


随着工业化和城镇化的快速发展,环境问题日益突出。空气污染是全球最重要的环境问题之一,影响着人们的健康、生产和生活。为了改善空气质量,我国加大监测和环保力度,增加空气质量监测站点,实施蓝天保卫战,并将空气质量水平与污染治理水平纳入部门工作考核。科学有效地评价空气质量,能够为预防和治理空气污染提供科学依据,有利于交通或环境管理部门实施污染控制,降低空气污染的影响,改善人类福祉。由于大气环境是受污染源、气象、人为因素的影响,因此需要客观综合地评价空气质量。

二、赛事任务


每日环境空气质量评价需要综合各污染物的影响,本次大赛提供了每日AQI数据和主要污染物浓度数据,参赛选手需构建空气质量评价模型,根据提供的样本评价样本之间的相对污染程度。

三、评审规则


1.数据说明

本次比赛为参赛选手提供了大气污染数据,包括一氧化碳、细颗粒物、可吸入颗粒物、臭氧、二氧化氮、二氧化硫。此次比赛分为初赛和复赛两个阶段,两个阶段的区别是所提供样本的量级和样本城市有所不同,其他的设置均相同。

特别说明,空气质量评价本身是一个不确定性问题,主要采用不确定性方法来构建模型,如模糊数学,灰色理论,证据理论,神经网络等统计分析方法。

在这里插入图片描述

2.评估指标

本模型依据提交的结果文件,利用均方根误差(RMSE)评价模型。

(1) 样本的相对综合污染系数 IPRC,用于判断样本之间的相对污染程度。

(2) 基于IPRC,计算RMSE. 其中m为样本数,y为IPRC真实值,y_pred为IPRC预测值。

在这里插入图片描述

3.评测及排行

1、初赛和复赛均提供下载数据,选手在本地进行算法调试,在比赛页面提交结果。

2、每支团队每天最多提交3次。

3、排行按照得分从高到低排序,排行榜将选择团队的历史最优成绩进行排名。

四、作品提交要求


1.文件格式:按照csv格式提交

2.文件大小:无要求

3.提交次数限制:每支队伍每天最多3次

4.文件详细说明:

  1. 以csv格式提交,编码为UTF-8,第一行为表头;

  2. 提交格式见样例

5.不需要上传其他文件

赛题分析

===============================================================

首先分析这个比赛是解决什么问题?从评估指标RMSE我们可以得出这个比赛是回归问题,是预测IPRC的值,所以IPRC是y值,是我们要预测的值。

数据分析


初赛的数据集是保定2016年的空气质量数据,测试集是国际庄2016到2017年的空气质量数据。回想2016年,那时候整个河北的污染还是比较严重的,经常看不到太阳,一年没有几天是好天气。先查看训练集前5行的数据:

执行代码:

import numpy as np

import pandas as pd

import lightgbm as lgb

from sklearn.model_selection import KFold

from sklearn.metrics import mean_squared_error

from sklearn.preprocessing import StandardScaler, MinMaxScaler

train = pd.read_csv(‘data/train/train.csv’)

print(train.head(5))

运行结果:

| 日期 | AQI | 质量等级 | PM2.5 | PM10 | SO2 | CO | NO2 | O3_8h | IPRC |

| — | — | — | — | — | — | — | — | — | — |

| 2016/1/1 | 293 | 重度污染 | 243 | 324 | 122 | 6.1 | 149 | 12 | 2.088378 |

| 2016/1/2 | 430 | 严重污染 | 395 | 517 | 138 | 7.5 | 180 | 18 | 3.316942 |

| 2016/1/3 | 332 | 严重污染 | 282 | 405 | 72 | 6.3 | 130 | 10 | 2.516425 |

| 2016/1/4 | 204 | 重度污染 | 154 | 237 | 73 | 3.5 | 72 | 34 | 1.505693 |

| 2016/1/5 | 169 | 中度污染 | 128 | 186 | 99 | 3.2 | 66 | 39 | 1.210233 |

第一列是时间,对经历过那段时间的人来说,时间肯定是有用的,北方冬天取暖,空气质量差很多。春季和秋季刮风的时候多,好天气自然多一些,夏天有时下雨,下雨了空气的质量就能有所改善,空气质量和季节的相关系比较密切。对于时间的处理,我是采用将年月日分别3列。代码如下:

data[“year”] = pd.to_datetime(data[“日期”]).dt.year

data[“month”] = pd.to_datetime(data[“日期”]).dt.month

获取日

data[“day”] = pd.to_datetime(data[“日期”]).dt.day

第二列AQI和PM2.5、PM10、SO2、CO、NO2、O3_8h,这里列的处理方式类似,都采用MinMaxScaler(feature_range=(0, 1)),代码如下:

cols = [“PM2.5”, “PM10”, “SO2”, “CO”, “NO2”, “O3_8h”,“day”,“month”,“year”]

scaler = MinMaxScaler(feature_range=(0, 1))

for clo in cols:

data[clo] = scaler.fit_transform(data[clo].values.reshape(-1, 1))

第三列 质量等级,共5个等级,这个毫无疑问用OneHot编码做,我使用pandas 自带的方法实现OneHot编码,编码完成后把质量等级和日期列删除,代码如下:

df = pd.DataFrame({‘质量等级’: [‘重度污染’, ‘良’, ‘中度污染’, ‘轻度污染’, ‘严重污染’]})

ff = pd.get_dummies(data[‘质量等级’].values)

data[‘重度污染’] = ff[‘重度污染’]

data[‘良’] = ff[‘良’]

data[‘中度污染’] = ff[‘中度污染’]

data[‘轻度污染’] = ff[‘轻度污染’]

data[‘严重污染’] = ff[‘严重污染’]

del data[‘质量等级’]

del data[‘日期’]

print(data)

运行结果:

在这里插入图片描述

标签数据处理 标签采用MinMaxScaler(feature_range=(0, 1)),把标签缩放到0-1之间,方便预测,代码如下:

scaler_y = MinMaxScaler(feature_range=(0, 1))

train[‘IPRC’] = scaler_y.fit_transform(train[‘IPRC’].values.reshape(-1, 1))

target = train[‘IPRC’]

数据分析的完整代码如下:

import numpy as np

import pandas as pd

import lightgbm as lgb

from sklearn.model_selection import KFold

from sklearn.metrics import mean_squared_error

from sklearn.preprocessing import StandardScaler, MinMaxScaler

train = pd.read_csv(‘data/train/train.csv’)

print(train.head(5))

test = pd.read_csv(‘data/test/test.csv’)

smb = test[‘日期’].values

scaler_y = MinMaxScaler(feature_range=(0, 1))

train[‘IPRC’] = scaler_y.fit_transform(train[‘IPRC’].values.reshape(-1, 1))

target = train[‘IPRC’]

del train[‘IPRC’]

data = pd.concat([train, test], axis=0, ignore_index=True)

data = data.fillna(0)

data[“year”] = pd.to_datetime(data[“日期”]).dt.year

data[“month”] = pd.to_datetime(data[“日期”]).dt.month

获取日

data[“day”] = pd.to_datetime(data[“日期”]).dt.day

df = pd.DataFrame({‘质量等级’: [‘重度污染’, ‘良’, ‘中度污染’, ‘轻度污染’, ‘严重污染’]})

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
aGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-xTrIFZ2T-1713436984664)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值