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


    目录

    一、实验内容

    二、完成情况

    三、数据分析

    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有较强的正相关关系,另外三个成分相关关系弱一些。

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

  • 相关阅读:
    【Linux学习】动态库和静态库
    LuaHttp库写的一个简单的爬虫
    新一代开源免费的轻量级 SSH 终端,太棒了
    Flink SQL管理平台flink-streaming-platform-web安装搭建
    Redis事务入门及命令
    Kakfa客户端SSL访问kafka
    今天面了个腾讯拿 38K 出来的,让我见识到了基础的天花板
    关联规则--Apriori算法
    十二、消息服务(1)
    echarts 多个数据xAxis和series读取(Object.values使用)
  • 原文地址:https://blog.csdn.net/m0_72318954/article/details/128139810