小言_互联网的博客

【python与数据分析】实验十三 北京市空气质量

759人阅读  评论(0)

目录

一、实验内容

二、完成情况

三、数据分析

1.问题描述

2.编程思路

3.程序代码

4.程序运行结果

(1)2014年-2019年AQI时间序列折线图 

(2)各年AQI折线图、AQI直方图、PM2.5与AQI散点图、空气质量整体情况的饼图 

​(3)六种空气成分与AQI的散点图 

5.结果分析


一、实验内容

对《北京市空气质量》数据进行数据分析。其中包括数据的导入、预处理、可视化。

二、完成情况

1.完成了《北京市空气质量的数据分析》

2.敲试了听课ppt上的代码,由于内容较多,放于实验报告最后的【附录】部分

三、数据分析

1.问题描述

根据《北京市空气质量》的excel数据对今年北京市空气质量进行分析

2.编程思路

(1)首先导入数据,利用pandas库进行导入

(2)其次进行数据预处理,主要针对异常值,找到后用NAN替代

(3)绘制2014年-2019年AQI时间序列折线图,从空气质量指数的折线图直观地看2014年-2019年北京市空气质量的变化

(4)绘制各年AQI折线图,观看2014-2019年AQI均值的变动情况;绘制AQI直方图,看2014年-2019年AQI的分布;绘制PM2.5与AQI的散点图,分析PM2.5对AQI的影响;绘制质量等级的饼图,观看各个等级所占的比例

(5)在原有代码的基础上又编写了绘制六种空气成分与AQI的散点图,分析各个成分对AQI的影响

3.程序代码


  
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt #matplotlib的Pyplot子模块,指定别名为plt
  4. #%matplotlib inline
  5. #将matplotlib的图表直接嵌入到Notebook之中,或者使用指定的界面库显示图表,它有一个参数指定matplotlib图表的显示方式。inline表示将图表嵌入到Notebook中。
  6. #Python提供了许多魔法命令,使得在IPython环境中的操作更加得心应手。魔法命令都以%或者%%开头,以%开头的成为行命令,%%开头的称为单元命令。行命令只对命令所在的行有效,而单元命令则必须出现在单元的第一行,对整个单元的代码进行处理。
  7. #执行%magic可以查看关于各个命令的说明,而在命令之后添加?可以查看该命令的详细说明。
  8. plt.rcParams[ 'font.sans-serif']=[ 'SimHei'] #解决中文显示乱码问题
  9. plt.rcParams[ 'axes.unicode_minus']= False
  10. data=pd.read_excel( 'D:\个人成长\学业\课程\python\实验\题目\北京市空气质量数据.xlsx') #要注意路径
  11. #指定立即显式所绘图形,且通过参数设置解决图形中文显示乱码问题
  12. data.isnull()
  13. data=data.replace( 0,np.NaN)
  14. plt.figure(figsize=( 10, 5))
  15. #利用函数plt.figure说明图形的一般特征,如这里指宽10高5
  16. plt.plot(data[ 'AQI'],color= 'black',linestyle= '-',linewidth= 0.5)
  17. #利用函数plt.plot绘制序列折线图,同时指定折线颜色、线性、线宽等
  18. plt.axhline(y=data[ 'AQI'].mean(),color= 'red', linestyle= '-',linewidth= 0.5,label= 'AQI总平均值')
  19. #在参数y指定位置上画一条平行于横坐标的直线,并给定直线图例文字
  20. #plt.axvline在参数x指定位置上画一条平行于纵坐标的直线,并给定直线图例文字
  21. data[ '年']=data[ '日期'].apply( lambda x:x.year)
  22. AQI_mean=data[ 'AQI'].groupby(data[ '年']).mean().values
  23. #分组计算各年AQI的平均值
  24. year=[ '2014年', '2015年', '2016年', '2017年', '2018年', '2019年']
  25. col=[ 'red', 'blue', 'green', 'yellow', 'purple', 'brown']
  26. for i in range( 6):
  27. plt.axhline(y=AQI_mean[i],color=col[i], linestyle= '--',linewidth= 0.5,label=year[i])
  28. #利用for循环绘制多条平行于横坐标的直线,表征各年AQI平均值
  29. plt.title( '2014年至2019年AQI时间序列折线图')
  30. plt.xlabel( '年份')
  31. plt.ylabel( 'AQI')
  32. #指定图的标题,横纵坐标的坐标标签
  33. plt.xlim(xmax= len(data), xmin= 1)
  34. plt.ylim(ymax=data[ 'AQI']. max(),ymin= 1)
  35. #指定横纵坐标的取值范围
  36. plt.yticks([data[ 'AQI'].mean()],[ 'AQI平均值'])
  37. plt.xticks([ 1, 365, 365* 2, 365* 3, 365* 4, 365* 5],[ '2014', '2015', '2016', '2017', '2018', '2019'])
  38. #在指定坐标刻度位置上给出刻度标签
  39. plt.legend(loc= 'best')
  40. #利用legend在指定位置(best表示最优位置)显式图例
  41. plt.text(x= list(data[ 'AQI']).index(data[ 'AQI']. max()),y=data[ 'AQI']. max()- 20,s= '空气质量最差日',color= 'red')
  42. #利用text在指定的行列位置上显式指示文字
  43. plt.show()
  44. #表示此次绘图结束
  45. import warnings
  46. #导入warning模块,并指定忽略代码运行过程中的警告信息
  47. warnings.filterwarnings(action = 'ignore')
  48. plt.figure(figsize=( 10, 5))
  49. plt.subplot( 2, 2, 1)
  50. #将绘图区域分成2行2列4个单元,且下一副图将在第2个单元显示
  51. plt.plot(AQI_mean,color= 'black',linestyle= '-',linewidth= 0.5)
  52. plt.title( '各年AQI均值折线图')
  53. plt.xticks([ 0, 1, 2, 3, 4, 5, 6],[ '2014', '2015', '2016', '2017', '2018', '2019', '2020'])
  54. plt.subplot( 2, 2, 2)
  55. plt.hist(data[ 'AQI'],bins= 20)
  56. #绘制AQI的直方图,图中包含20个柱形条,即将数据分成20组
  57. plt.title( 'AQI直方图')
  58. plt.subplot( 2, 2, 3)
  59. plt.scatter(data[ 'PM2.5'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  60. #利用scatter绘制PM2.5和AQI的散点图,并指定点的大小、颜色和形状
  61. plt.title( 'PM2.5与AQI散点图')
  62. plt.xlabel( 'PM2.5')
  63. plt.ylabel( 'AQI')
  64. plt.subplot( 2, 2, 4)
  65. tmp=pd.value_counts(data[ '质量等级'],sort= False)
  66. #等同:tmp=data['质量等级'].value_counts()
  67. share=tmp/ sum(tmp)
  68. labels=tmp.index
  69. explode = [ 0, 0.2, 0, 0, 0, 0.2, 0]
  70. plt.pie(share, explode = explode,labels = labels, autopct = '%3.1f%%',startangle = 180, shadow = True)
  71. #利用pie绘制饼图
  72. plt.title( '空气质量整体情况的饼图')
  73. plt.show()
  74. fig,axes=plt.subplots(nrows= 2,ncols= 2,figsize=( 10, 5))
  75. #说明绘图区域的宽和高,并指定将绘图区域分成2行2列4个单元。结果将赋值给fig和axes对象。
  76. #可通过fig对整个图的特征进行设置,axes对应各个单元格对象
  77. axes[ 0, 0].plot(AQI_mean,color= 'black',linestyle= '-',linewidth= 0.5)
  78. axes[ 0, 0].set_title( '各年AQI均值折线图')
  79. axes[ 0, 0].set_xticks([ 0, 1, 2, 3, 4, 5, 6])
  80. axes[ 0, 0].set_xticklabels([ '2014', '2015', '2016', '2017', '2018', '2019', '2020'])
  81. axes[ 0, 1].hist(data[ 'AQI'],bins= 20)
  82. axes[ 0, 1].set_title( 'AQI直方图')
  83. axes[ 1, 0].scatter(data[ 'PM2.5'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  84. axes[ 1, 0].set_title( 'PM2.5与AQI散点图')
  85. axes[ 1, 0].set_xlabel( 'PM2.5')
  86. axes[ 1, 0].set_ylabel( 'AQI')
  87. axes[ 1, 1].pie(share, explode = explode,labels = labels, autopct = '%3.1f%%',startangle = 180, shadow = True)
  88. axes[ 1, 1].set_title( '空气质量整体情况的饼图')
  89. #通过图形单元索引的方式指定绘制单元,例如:axes[0,0]表示第1行第1列的单元格
  90. #图标题、坐标轴标签、坐标轴刻度
  91. fig.subplots_adjust(hspace= 0.5)
  92. fig.subplots_adjust(wspace= 0.5)
  93. #调节各图形单元行或列之间的距离
  94. plt.show()
  95. fig,axes=plt.subplots(nrows= 2,ncols= 3,figsize=( 10, 5))
  96. #说明绘图区域的宽和高,并指定将绘图区域分成2行2列4个单元。结果将赋值给fig和axes对象。
  97. #可通过fig对整个图的特征进行设置,axes对应各个单元格对象
  98. axes[ 0, 0].scatter(data[ 'PM2.5'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  99. axes[ 0, 0].set_title( 'PM2.5与AQI散点图')
  100. axes[ 0, 0].set_xlabel( 'PM2.5')
  101. axes[ 0, 0].set_ylabel( 'AQI')
  102. axes[ 0, 1].scatter(data[ 'PM10'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  103. axes[ 0, 1].set_title( 'PM10与AQI散点图')
  104. axes[ 0, 1].set_xlabel( 'PM10')
  105. axes[ 0, 1].set_ylabel( 'AQI')
  106. axes[ 0, 2].scatter(data[ 'SO2'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  107. axes[ 0, 2].set_title( 'SO2与AQI散点图')
  108. axes[ 0, 2].set_xlabel( 'SO2')
  109. axes[ 0, 2].set_ylabel( 'AQI')
  110. axes[ 1, 0].scatter(data[ 'CO'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  111. axes[ 1, 0].set_title( 'CO与AQI散点图')
  112. axes[ 1, 0].set_xlabel( 'CO')
  113. axes[ 1, 0].set_ylabel( 'AQI')
  114. axes[ 1, 1].scatter(data[ 'NO2'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  115. axes[ 1, 1].set_title( 'NO2与AQI散点图')
  116. axes[ 1, 1].set_xlabel( 'NO2')
  117. axes[ 1, 1].set_ylabel( 'AQI')
  118. axes[ 1, 2].scatter(data[ 'O3'],data[ 'AQI'],s= 0.5,c= 'green',marker= '.')
  119. axes[ 1, 2].set_title( 'O3与AQI散点图')
  120. axes[ 1, 2].set_xlabel( 'O3')
  121. axes[ 1, 2].set_ylabel( 'AQI')
  122. #通过图形单元索引的方式指定绘制单元,例如:axes[0,0]表示第1行第1列的单元格
  123. #图标题、坐标轴标签、坐标轴刻度
  124. fig.subplots_adjust(hspace= 0.5)
  125. fig.subplots_adjust(wspace= 0.5)
  126. #调节各图形单元行或列之间的距离
  127. plt.show()

4.程序运行结果

(1)2014年-2019年AQI时间序列折线图 

(2)各年AQI折线图、AQI直方图、PM2.5与AQI散点图、空气质量整体情况的饼图 

 (3)六种空气成分与AQI的散点图 

5.结果分析

        从2014年-2019时间折线图可知,AQI有周期性变动,但总体上看AQI逐年降低,即北京市空气质量在逐年改善,这从各年AQI均值折现也可以看出;从直方图可以看出,AQI集中在60~70附近,即良附近,即近年北京市空气质量大多为良,这一点从空气质量等级的饼图可以得到验证;从AQI与空气成分的散点图可以看出,AQI与PM2.5、PM10、CO有较强的正相关关系,另外三个成分相关关系弱一些。

        综上所述,北京市空气质量在逐年改善,但仍需进一步努力;多植树造林,增加绿化面积对改善空气成分有帮助,进而可以改善空气质量。


转载:https://blog.csdn.net/m0_72318954/article/details/128139810
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场