前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python北京空气质量数据处理

Python北京空气质量数据处理

作者头像
润森
发布2020-04-27 22:46:19
1.9K0
发布2020-04-27 22:46:19
举报
文章被收录于专栏:毛利学Python毛利学Python

北京空气质量数据处理

这是我接单的一个单,看了数据源,马发现很有印象,马上就知道来源kaggle中国北京上海广州成都,沈阳的Pm2.5数据集,对应的链接:https://www.kaggle.com/uciml/pm25-data-for-five-chinese-cities,数据集去kaggle下载,在kaggle上就是一个时间序列的问题。

他们老师的要求:将源码与生成的数据(rar或zip格式)提交 源码命名为statistics.py,将输出信息保存到文件PM_BeiJing.csv中 对HUMI,PRES,TEMP线性插值处理,超出3倍标准差的高度异常数据,修改成3倍标准差的数值。假设PM指数最高500,对PM_Dongsi,PM_Dongsihuan,PM_Nongzhanguan三列超过500的数据,修改为500PM指数修改cbwd列中的值为cv的单元格,其值用后项数据填充并计算北京空气质量。

分析解决方法

第一对HUMI,PRES,TEMP线性插值处理,主要用numpy.interp,超出3倍标准差的高度异常数据,修改成3倍标准差的数值来一个判断OK,关键是其值用后项数据填充一开始想使用转化为Nan值,再后项数据填充,使用的时候发现后项数据填充只适合数值类型,不适合文本类型,那只好遍历了。

代码

代码语言:javascript
复制
import numpy as np
import pandas as pd
print("开始处理数据")
data= pd.read_csv('BeijingPM20100101_20151231.csv',encoding='utf-8')
# 对HUMI,PRES,TEMP线性插值处理,超出3倍标准差的高度异常数据,修改成3倍标准差的数值。
data['HUMI'].interpolate()
data['PRES'].interpolate()
data['TEMP'].interpolate()
HUMI_std = np.std(data['HUMI'])
PRES_std = np.std(data['PRES'])
TEMP_std = np.std(data['TEMP'])
for i in data['HUMI']:
    if (i > HUMI_std * 3):
        i = HUMI_std * 3
for i in data['PRES']:
    if (i > PRES_std * 3):
        i = PRES_std * 3
for i in data['TEMP']:
    if (i > TEMP_std * 3):
        i = TEMP_std* 3
# 假设PM指数最高500,对PM_Dongsi,PM_Dongsihuan,PM_Nongzhanguan三列超过500的数据,修改为500PM指数
for i in data['PM_Dongsi']:
    if i > 500:
        i = 500
    else:
        pass
for i in data['PM_Dongsihuan']:
    if i > 500:
        i = 500
    else:
        pass
for i in data['PM_Nongzhanguan']:
    if i > 500:
        i = 500
    else:
        pass
# 修改cbwd列中的值为cv的单元格,其值用后项数据填充。
for i in range(len(data['cbwd'])):
    if data['cbwd'][i] == 'cv':
        data['cbwd'][i]  = data['cbwd'][i+1]
    else:
        pass
print("处理数据完成")
data.to_csv("PM_Beijing.csv",index=False)

执行上面的代码,运行结果就是下面的图片

计算北京每年的PM2.5情况

代码语言:javascript
复制
import pandas as pd

# 打开文件,仅读取第7至第10列
FileNameStr = 'PM_Beijing.csv'
df = pd.read_csv(FileNameStr, encoding='utf-8', usecols=[1, 6, 7, 8, 9])

# 新建平均值列,并将平均值写入
# 其中,iloc[:, 1:5]指第2到第5列,mean(axis=1)为求行平均值
df['PM_ave'] = df.iloc[:, 1:5].mean(axis=1)
# 保存到文件,其中以'year'分组,计算'PM_ave'列的平均值。
df.groupby('year')['PM_ave'].mean().to_csv("北京每年的PM2.5结果.csv")
# 查看结果
print(df.groupby('year')['PM_ave'].mean())

运行上面的代码,结果如下

代码语言:javascript
复制
year
2010    104.045730
2011     99.093240
2012     90.538768
2013     98.402664
2014     93.917704
2015     85.858942
Name: PM_ave, dtype: float64

计算北京每年1-12月的PM2.5情况

代码语言:javascript
复制
import pandas as pd
df = pd.read_csv('PM_Beijing.csv', encoding='utf-8', usecols=[1, 2, 6, 7, 8, 9])
# 新建平均值列,并将平均值写入
# 其中,iloc[:, 2:6]指第3到第6列,mean(axis=1)为求行平均值
df['PM_ave'] = df.iloc[:, 2:6].mean(axis=1)
# 保存到文件,其中以'year'和'month'分组,计算'PM_ave'列的平均值。
df.groupby(['year', 'month'])['PM_ave'].mean().to_csv("北京每年1-12月的PM2.5结果.csv")
# 打印一份
print(df.groupby(['year', 'month'])['PM_ave'].mean())

运行上面的代码,结果如下

代码语言:javascript
复制
year  month
2010  1         90.403670
      2         97.239940
      3         94.046544
      4         80.072423
      5         87.071913
      6        109.038938
      7        123.426075
      8         97.683432
      9        122.792735
      10       118.784367
      11       138.384036
      12        97.115747
2011  1         44.873700
      2        150.290179
      3         57.991987
      4         91.720670
      5         65.108146
      6        108.794655
      7        107.386486
      8        103.733800
      9         94.969402
      10       145.556818
      11       109.434965
      12       108.721400
2012  1        118.922388
      2         84.442029
      3         96.474324
      4         87.835883
      5         90.966715
      6         96.634181
                  ...
2013  7         74.932839
      8         67.923611
      9         85.717824
      10       102.208781
      11        85.146296
      12        90.317764
2014  1        107.911738
      2        160.513889
      3        103.183244
      4         92.160648
      5         64.958557
      6         59.154630
      7         91.799955
      8         65.668237
      9         68.232639
      10       135.269713
      11       106.337500
      12        76.622536
2015  1        110.022737
      2        103.445561
      3         94.483423
      4         79.396991
      5         61.167563
      6         60.332407
      7         60.229503
      8         45.896057
      9         50.924769
      10        77.257841
      11       125.803125
      12       162.178987
Name: PM_ave, Length: 72, dtype: float64

这个作业挺简单的,做了下出这个作业的老师挺有水平的,学习的时候,口袋又多了几块钱

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 北京空气质量数据处理
  • 分析解决方法
  • 代码
  • 计算北京每年的PM2.5情况
  • 计算北京每年1-12月的PM2.5情况
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档