【空气质量数据分析专题二】数据获取及预处理

数据获取

空气质量数据来源于空气质量监测系统,各地区均有官方的该系统可以获取数据。

数据说明

日级别数据表头如下图所示,包含站点信息、空气质量六项污染物浓度及分指数(IAQI)、空气质量指数(AQI)、首要污染物以及空气质量指数级别。
日级别数据表头
小时级别数据表头如下表所示,包含指标与日级别数据相比仅少了编码一列,其他完全相同。
小时数据表头
无论是日级别数据还是小时级别数据,本系列专题不分析其IAQI,编码及AQI级别颜色也忽略。

数据预处理

数据预处理方式比较简单,主要有以下几个处理方法:

  • AQI出现异常值则删除整条记录
  • AQI出现空值则删除整条记录
  • 出现重复记录时保留第一条记录
  • 对删除的记录使用线性插值填充
df = df[pd.notna(df['AQI'])]
df = df[df['AQI'] > 0]
df =df.drop_duplicates(keep='first').interpolate(method='linear')

空气质量监测数据一般是经过审核的,所以只需要简单的处理即可,关键的地方是如何巧妙地将需要的所有数据整合在一起,使程序自动处理,文末附上日报及实时报数据通用的处理代码。

def data_combine(self, folder_path, year_list, is_daily):
       """
       原始数据整合及预处理
       :param folder_path: 数据所在文件夹路径
       :param year_list: 年份列表
       :param is_daily: 是否是日级别(目前仅有日级别数据和时级别数据)
       :return: 整合后的数据
       """
       try:
           if is_daily:
               data_type = '日报'
           else:
               data_type = '实时报'
           if len(year_list) == 0:
               logger.info('要分析的年份数为0,分析程序终止!')
               return 0
           else:
               same_file_name = folder_path.joinpath(
                   os.path.basename(folder_path) + str(year_list[0]) + '年AQI' + data_type + '数据.xls')
               df = pd.read_excel(io=same_file_name, skiprows=5, header=None)
               if len(year_list) > 1:
                   for year in year_list[1:]:
                       full_file_name = folder_path.joinpath(
                           os.path.basename(folder_path) + str(year) + '年AQI' + data_type + '数据.xls')
                       dfx = pd.read_excel(io=full_file_name, skiprows=5, header=None)
                       df = pd.concat([df, dfx])

               if is_daily:
                   df = df.loc[:, [0, 1, 2, 4, 6, 8, 10, 12, 14, 16, 17, 18]]
               else:
                   df = df.loc[:, [0, 1, 2, 3, 5, 7, 9, 11, 13, 15, 16, 17]]

               df.columns = ['date', 'city', 'station', 'SO2', 'NO2', 'PM10', 'CO', 'O3', 'PM2.5', 'AQI', 'MP',
                             'AQI_LEVEL']
               df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
               df.set_index('date', inplace=True)
               df['year'] = df.index.year
               df['month'] = df.index.month
               df['day'] = df.index.day
               if not is_daily:
                   df['hour'] = df.index.hour
               df = df[pd.notna(df['AQI'])]
               df = df[df['AQI'] > 0]
               df = df.drop_duplicates(keep='first').interpolate(method='linear')

               df['AQI_LEVEL'] = df['AQI'].map(self.number_to_flag)
               logger.info(os.path.basename(folder_path) + data_type + "数据时间范围:" + str(df.index[0]) + " ~ " + str(
                   df.index[-1]))
               return df.drop_duplicates(keep='first')
       except Exception as e:
           logger.error(e)
           return 0

后记

以上处理过程难度不大,但是需要勤加练习,能熟练写出数据处理部分的代码。下期进行空气质量数据年变化分析。

以下是本人独自运营的微信公众号,用于分享个人学习及工作生活趣事,大佬们可以关注一波。

微信公众号

  • 0
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
数据分析师在进行数据分析之前,常常需要进行数据预处理以确保数据质量和准确性。下面是一些数据分析师必备的数据预处理技术: 1. 数据清洗:清洗数据是指识别和处理缺失值、重复值、异常值和不一致的数据。这可以通过填充缺失值、删除重复值和异常值、以及标准化和转换不一致的数据来实现。 2. 数据转换:在进行数据分析之前,通常需要对数据进行转换,以满足分析的要求。例如,将分类变量转换为数值变量(独热编码或标签编码)、对数变换、归一化或标准化等。 3. 特征选择:在数据集中选择最相关的特征,以提高模型的预测性能和解释能力。可以使用统计方法(如方差阈值、相关系数)或机器学习方法(如特征重要性评估、正则化方法)进行特征选择。 4. 数据集成:当需要使用多个数据源时,需要将它们合并成一个一致的数据集。这可以通过连接、合并或追加数据来实现。 5. 缩放和标准化:对数据进行缩放和标准化可以确保不同特征之间具有相似的尺度,以避免某些特征对模型的影响过大。常见的方法包括最小-最大缩放、标准化和归一化。 6. 异常值处理:异常值可能会对数据分析和建模产生负面影响。可以使用统计方法(如3σ原则、箱线图)或机器学习方法(如聚类、异常检测算法)来识别和处理异常值。 7. 数据平滑:数据平滑可以通过去除数据中的噪声和波动来减少数据的变异性,以便更好地发现趋势和模式。常见的方法包括移动平均、指数平滑和Loess平滑等。 以上是数据分析师必备的一些数据预处理技术,根据具体情况和需求,可能还会应用其他技术和方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

⁣北潇

老板大气!

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

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

打赏作者

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

抵扣说明:

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

余额充值