北京市空气质量数据的监测

目录

对某市空气质量检测数据的读取及处理

1.1使用Pandas的DataFrame类对象读取数据

1.2过滤数据中的缺失值、重复值和异常值

1.3同时,在生成的DataFrame中增加两列“年份”、“月份”,并使用apply函数和lambda表达式从“日期”列中获取相应的值

1.4.使用apply函数和lambda表达式从“日期”列中获取相应的值

1.5.根据月份生成相应的季度标志变量

1.6对空气质量指数AQI分组,获得对应的空气质量等级

2对某市空气质量检测数据的基本分析。

2.1利用Numpy对空气质量监测数据进行随机抽样、条件抽样;

2.2计算各季度AQI和PM2.5的平均值等描述统计量

2.2自定义函数。查看空气质量较差的若干天的数据,以及各季度中空气质量较差的若干天的数据;

 2.3AQI的分布特征及相关性分析,利用Matplotlib,对空气质量监测数据做如下图形化展示


对某市空气质量检测数据的读取及处理

1.1使用Pandas的DataFrame类对象读取数据

执行如下源代码:

import numpy as np
import pandas as pd
data=pd.read_excel(r'C\:北京市空气质量 (1).xlsx')
print(data)

得到如下结果

1.2过滤数据中的缺失值、重复值和异常值

执行代码和结果如下

对缺失值进行处理:

使用 isnull 函数查看数据中的缺失值
data.isnull().sum()
运行结果为
 

对重复值处理
data.duplicated().sum()#处理重复值

运行结果如下

对异常值处理

#定义一个函数处理异常值
def replace(x):
    QU=x.quantile(0.75)
    QL=x.quantile(0.25)
    IQR=QU-QL
    x[(x>(QU+1.5*IQR))|(x<(QL-1.5*IQR))]=np.nan#将异常值换成空值
    return x
replace(data["AQI"])

运行结果如下

1.3同时,在生成的DataFrame中增加两列“年份”、“月份”,并使用apply函数和lambda表达式从“日期”列中获取相应的值

执行代码如下:

增加年份

import datetime
year = []
for i in range(len(data)):
    year.append(data["日期"][i].year) 

data.insert(1, "年份", year)#增加年份列

增加月份

month=[]
for x in range(len(data)):
    month.append(data["日期"][x].month)
data.insert(2,"月份",month)#增加月份列

其结果如下

在这一步执行的代码中,首先定义一个空的字典,并对其进行赋值,使用 insert函数增加一列,其中,代码中的1,2表示insert函数新增列所添加的位置,同时使用append() 方法,该方法用于在列表的末尾追加元素。

1.4.使用apply函数和lambda表达式从“日期”列中获取相应的值

代码如下:

print(data['日期'])
data['年']=data['日期'].apply(lambda x:x.year)
print(data['年'])

运行结果为:

在上述代码中,Lambda 表达式是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。

apply函数是pandas里面所有函数中自由度最高的函数。该函数如下:

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。

这个函数需要自己实现,函数的传参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据 结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数 会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。

1.5.根据月份生成相应的季度标志变量

执行代码如下:

data=pd.read_excel(r"C:\Users\lrh77\Desktop\python\北京市空气质量.xlsx")  # 数据文件地址
data=data.replace(0,np.NaN)
data['年']=data['日期'].apply(lambda x:x.year)
month=data['日期'].apply(lambda x:x.month)
quarter_month={'1':'一季度','2':'一季度','3':'一季度',
               '4':'二季度','5':'二季度','6':'二季度',
               '7':'三季度','8':'三季度','9':'三季度',
              '10':'四季度','11':'四季度','12':'四季度'}
data['季度']=month.map(lambda x:quarter_month[str(x)])
print(data)

运行结果如下

1.6对空气质量指数AQI分组,获得对应的空气质量等级

执行代码如下:

bins=[0,50,100,150,200,300,1000]
data['等级']=pd.cut(data['AQI'],bins,labels=['一级优','二级良','三级轻度污染','四级中度污染','五级重度污染','六级严重污染'])
print('对AQI的分组结果:\n{0}'.format(data[['日期','AQI','等级','季度']]))

运行结果为:

2对某市空气质量检测数据的基本分析

2.1利用Numpy对空气质量监测数据进行随机抽样、条件抽样;

执行代码如下:

#利用Numpy对空气质量检测数据进行随机抽样、条件抽样
np.random.seed(123)
sampler=np.random.randint(0,len(data),10)
print(sampler)
sampler=np.random.permutation(len(data))[:10]
print(sampler)
# 条件抽样
data.take(sampler)
data.loc[data['质量等级']=='优',:]

运行结果为:

上述代码中,首先利用Pandas函数random.randint()在指定范围内随机抽取指定个数(这里是10)的随机数。然后利用Pandas函数random.permutation是对数据随机打乱重排。之后再抽取前10个样本观测。然后利用数据框的take()方法,基于指定随机数获得数据集的一个子集。最后利用数据框访问的方式,抽取满足指定条件(质量等级等于优)行的数据。

2.2计算各季度AQI和PM2.5的平均值等描述统计量

执行代码如下 :

pd.DataFrame(data["AQI"].describe())#对AQI进行描述
pd.DataFrame(data["PM2.5"].describe())#对PM2.5进行描述

运行结果为:

在上述代码中,使用describe函数来描述数据的统计量

2.2自定义函数。查看空气质量较差的若干天的数据,以及各季度中空气质量较差的若干天的数据;

执行代码如下:

def top(df,n=10,column='AQI'):
    return df.sort_values(by=column,ascending=False)[:n] # 对AQI列的数据进行降序排列,然后返回前n个(这里n=10)
print('空气质量最差的5天:\n',top(data,n=5)[['日期','AQI','PM2.5','等级']])

运行结果为

 查看各季度空气质量情况

执行代码如下:

print('各季度空气质量情况:\n',pd.crosstab(data['等级'],data['季度'],margins=True,margins_name='总计',normalize=False))

运行结果为:

 2.3AQI的分布特征及相关性分析,利用Matplotlib,对空气质量监测数据做如下图形化展示

执行代码如下:

import warnings
warnings.filterwarnings(action = 'ignore')
plt.figure(figsize=(10,5))
plt.subplot(2,2,1)
plt.plot(AQI_mean,color='black',linestyle='-',linewidth=0.5)
plt.title('各年AQI均值折线图')
plt.xlabel('PM2.5')
plt.ylabel('AQI')
plt.subplot(2,2,4)
tmp=pd.value_counts(data['质量等级'],sort=False)  #等同:tmp=data['质量等级'].value_counts()
share=tmp/sum(tmp)
labels=tmp.index
explode = [0, 0.2, 0, 0, 0,0.2,0]
plt.pie(share, explode = explode,labels = labels, autopct = '%3.1f%%',startangle = 180, shadow = True)
plt.title('空气质量整体情况的饼图')

运行结果为:

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值