文章目录
主要结论:
1、空气质量总体分布上来说,南部市优于北部城市,西部城市优于东部城市。
2、临海城市的空气质量整上好于内陆城市。
3、是否临海,降雨量与纬度对空气量指数的影响较大。
4、我国城市平均空气质量数大致在(71.05~80.56〕这个区间内,在该区间的可能性概率为95%。
5、通过历史数,我们可以对空气质量指数进行预测。
一:项目背景
AQl(Air Quality Index),指空气质量指数,用来衡量空气清洁或污染的裎度。值越小,表示空气质量越好。近年来,因为环境问题,空气质量也越来越受到人们的重视。
本文我们将简单对一份与空气质量相关得数据进行分析,得到一些简单结论,并通过次案例更加熟悉数据分全流程。
本文分析目的主要有:
哪些城市的空气质量较好/较差?(描述述性统计分析)
空气质量在地理位置分布上,是否有一定的规律性?(描述性统计分析〕
临海城市的空气质量是否有别于内陆城市?(推断统计分析〕
空气质量主要受哪些因素影响?〔相关系数分析〕
全国城市空气质量普处于何种水平?〔区间估计〕
怎样预测一个城市的空气质量?(统计建模)
二:简单聊分析流程
受《对比excel,轻松学Python》作者张俊红老师的启发。(强烈推荐有兴趣的小伙伴去仔细品读,真的非常简单实用。值得入手。)其实数据分析的过程就类似与做菜的过程。
三:买菜,数据获取
四:洗菜,数据清洗
数据预处理
#读取数据
data = pd.read_csv('./data.csv')
#简单预览 可采取 head() tail()
data.head()
#大体了解数据
#查看数据条数
print(data.shape)
print(data.info())
数据清洗
#大体了解数据
#查看数据条数
print(data.shape)
print(data.info())
#也可对isnull 求和(isnull=1)
print(data.isnull().sum(axis=0))
可见Precipitation 列存在空值。
同时,可以直接查看空值的和
在这里插入代码片
缺失值
接下来我们需要对缺失值进行分析,决定我们采用何种方式处理。
#缺失值处理 需了解一下确实值列的特点,然后选择处理方法
print(data['Precipitation'].skew()) #计算偏度 偏度>0 右偏
#用核密度图看一下分布
sns.distplot(data['Precipitation'].dropna())
#对于右偏分布 用中位数填充更加靠谱
data.fillna({
"Precipitation": data["Precipitation"].median()}, inplace=True)
data.isnull().sum()
为啥右偏取中位数靠谱些?因为均值受极值的影响较大。
看下图: MO 众数 Me 中位数,x ba均值。
异常值
接下来看一下GDP列的异常值。
#异常值
sns.distplot(data['GDP']) #可以看出是右偏分布
print(data['GDP'].skew())
非常明显的右偏分布(红框内的长尾巴),我们可以拿出异常值看一下。(3倍标准差之外的数据)
#从上面可以看出,呈严重右偏分布 我们可以获取异常的数据部分
std = data['GDP'].std()
mean = data['GDP'].mean()
print(std,mean)
lower,upper = mean-3*std,mean+3*std
print(lower,upper)
#筛选出3倍标准差之外的数据
data[(data['GDP']<lower)|(data['GDP']>upper)] #8条异常
(均值2390,然后异常值都是上万的GDP)
同时我们可以利用箱线图查看异常值。
#利用箱线图图查看异常值
sns.boxplot(data=data['GDP'])
如何看箱线图:
对异常值进行操作,我们先采取对数转换,这样可以使得差距缩小。
#使用对数对数转换
fig,ax = plt.subplots(1,2)
fig.set_size_inches(15,5)
sns.distplot(data['GDP'],ax=ax[0])
sns.distplot(np.log(data['GDP']),ax=ax[1])
重复值
对于重复值,我们一般采取删除处理。(保留哪一个根据业务而定。)
#发现重复值 好像要指定单列或者多列 不然会报错 'Series' objects are mutable, thus they cannot be hashed
data['City'].duplicated()
print(data['City'].duplicated().sum()) #2条重复值
#查看重复值
data[data['City'].duplicated(keep=False)]
#对重复值可族谱删除处理,可以指定保留那条是否替换
data.drop_duplicates('City',inplace=True)
#再次确认是否有重复值
print(data['City'].duplicated().sum()) #0条重复值
五:切菜,数据转换
这一步往往和数据分析步同时进行。主要是做一些排序,筛选,分组聚类等。
六:炒菜,数据分析
哪些城市的空气质量较好/较差?(描述述性统计分析)
#思路:根据AQI进行排序 取出前10 后10
TOP10 = data.sort_values('AQI',ascending=False)[["City",'AQI']][0:10]
display(TOP10)
plt.figure(figsize=(18,6))
sns.barplot(x='City',y='AQI',data=TOP10,palette=sns.color_palette('muted',10)) #palette指定调色盘
plt.xticks(rotation=45)
#添加数据标签
x=np.arange(len(TOP10['City']))#因为x轴是汉字,所以默认对应的数值是从0开始的
p = TOP10['AQI']
for a,b in zip(x,p):
plt.text(a+0.1, b+0.02, int(b), ha='center', va= 'bottom',fontsize=12)
plt