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

数据获取

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

数据说明

日级别数据表头如下图所示,包含站点信息、空气质量六项污染物浓度及分指数(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

后记

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

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

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

Original: https://blog.csdn.net/weixin_44237659/article/details/123975871
Author: ⁣北潇
Title: 【空气质量数据分析专题二】数据获取及预处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694516/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球