专栏首页毛利学PythonPython北京空气质量数据处理

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值,再后项数据填充,使用的时候发现后项数据填充只适合数值类型,不适合文本类型,那只好遍历了。

代码

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情况

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())

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

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情况

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())

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

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

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

本文分享自微信公众号 - Python之王(gh_70a22bfa8e3a),作者:小sen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据科学篇| statsmodels库的使用(六)

    statsmodels是一个Python模块,它提供对许多不同统计模型估计的类和函数,并且可以进行统计测试和统计数据的探索。

    润森
  • 机器学习之逻辑回归

    文中的所有数据集链接:https://pan.baidu.com/s/1TV4RQseo6bVd9xKJdmsNFw

    润森
  • 股票分析实战

    沪深300股票指数由中证指数公司编制的沪深300指数于2005年4月8日正式发布。沪深300指数以2004年12月31日为基日,基日点位1000点·沪深300指...

    润森
  • 漫谈可视化Prefuse(六)---改动源码定制边粗细

    可视化一路走来,体会很多;博客一路写来,收获颇丰;代码一路码来,思路越来越清晰。终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行。   跌跌撞撞整合了个...

    JackieZheng
  • [Python3 开发技巧]·如何打乱字典中多个对应数组

    当我们把数个对应数组保存到字典中,在我们读取的时候这些数据会按照我们保存的顺序读取出来。如果我们需要打乱顺序,但不改变对应数组的关系时,例如原先位置0对应的各个...

    小宋是呢
  • 知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    Enjoy233
  • 一、通过requests库爬取数据并保存为csv文件

    网址:https://wp.m.163.com/163/page/news/virus_report/index.html?nw=1&anw=1

    不温卜火
  • ptb_reader源码解析

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    ke1th
  • Python Ajax请求及返回 jso

    py3study
  • TP数据避免重复和去重处理

    alter table gift_doc add unique index(num_id);

    php007

扫码关注云+社区

领取腾讯云代金券