Py学习  »  Python

Python分析北京雾霾天,原来这几个小时最严重......

大数据分析和人工智能 • 5 年前 • 635 次点击  


什么是PM2.5



pm为英文particulate matter的缩写,翻译成中文叫做颗粒物。pm2.5是指大气中直径小于或等于2.5微米的颗粒物,有时也被称作入肺颗粒物。我们日常常见的雾霾天气大 多数情况下就是由pm2.5造成的。虽然pm2.5在大气中的含量极少,但是,由于质量小,携带病毒及有害物质时间长、传输渠道多样、移动距离较远、对人 体和大家环境质量造成的危害较大,pm2.5的确是名符其实的隐型杀手!  



但是随着北京的大力治理,比如二氧化硫浓度降幅64.3%、淘汰167万辆老旧机动车、城六区整治千条背街小巷、原生垃圾实现无害化处理等等措施,北京PM2.5下降近四分之一, 我们终将赢得蓝天(来源北京娱乐信报)。


百度指数也给出了我们同样结论。数据从2013年1月到2018年6月,PM2.5指数明显在降低,也可以说是逐年减少。



了解了这些以后,我们切换到今天的主题,Python分析北京地区PM2.5。


环境



环境:MAC + Python3.6
IDE:Spyder
模块:matplotlib、pandas、numpy 、os、seaborn


数据集获取



    我们首先使用pandas包中read_csv文件读取数据集。该数据集包含2013年以来,美国大使馆和我国给出的每一个月的 PM 值。然后使用pandas包中基本数据方法进行数据预览,主要包括,数据集整体预览、前10行查看、数据文件的基本信息等。具体代码如下:

def collect_data():
    '''
        STEP1: 收集数据
    '''

    data_pd = pd.read_csv(os.path.join('./data/pm/Beijing_PM.csv'))

    return data_pd 


def inspect_data(data_pd):
    '''
        STEP2: 描述数据
    '''

    print('数据文件中一共有{}行,{}列'.format(data_pd.shape[0],data_pd.shape[1]))

    print('数据预览')
    print(data_pd)

    print('数据的前5行')
    print(data_pd.head)

    print('数据文件的的基本信息')
    print(data_pd.info())

    print('数据内容的统计信息')
    print(data_pd.describe())


运行结果截图如下


数据集共26280行,7列,占用1.4M内存,数据类型为int or float。



每年平均值分析




根据上面的数据集,首先分析的是每年的平均值,查看逐年变化情况。本次分析使用的技术点主要是分组,也就是根据年份(year)进行分组,然后使用柱形图进行可视化结果。从下面的两个图(PM chian mean vs PM us mean)可以看出,无论美国大使馆还是我国给出的PM数据,每年的PM值都在减少,说明我国治理卓有成效,终将获得蓝天。

为了更方便查看我国和美国使馆检测的每年平均PM2.5值的对比,我们可以使用python中的堆叠柱状图可视化,如下图所示。两个机构给出的数据没有很大的差异。具体的技术点主要是使用pandas包中的plot.bar函数,但是可视化之前需要先分组处理数据。具体代码,可以回复PM2.5获得。

#堆叠柱状图可视化
    filter_mean.plot.bar(stacked=True)
    plt.title('Mean PM 2.5')
    plt.tight_layout()
    plt.savefig(os.path.join(output_path,'filter_mean.png'))
    plt.show()

可视化结果如下


四季分析



四季分析主要是从四个季度进行对比分析。从下图可以看出,PM最高的季度是第四季,也就是冬天的时候雾霾最为严重。主要使用的技术点是使用箱形图分析。箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。

 #绘制盒形图函数boxplot
    sns.boxplot(x='season',y=var,data = data_df)
    plt.savefig(os.path.join(output_path,'year_'+var+'.png'))
    plt.show


运行效果如下:


每月以及每小时分析



从每月的分析看出,每年的11月、12月、1月最为严重。在每月里面,早晚高峰的时间更为严重。本次可视化的技术点是使用散点图。





    
def analyze_dual_variables(data_df,var1,var2):
    '''
        查看双变量的关系,散点图
    '''


    sns.jointplot(x=var1,y=var2,data=data_df)
    plt.savefig(os.path.join(output_path,var1+'_'+var2+'_sandian.png'))
    plt.show()

运行效果图

也可以使用透视表可视化每一个月的PM, 具体如下


按小时分析

相关性分析



    相关性分析主要用到的技术点是热点图,以及相关性计算。利用热力图可以看数据表里多个特征两两的相似度,具体代码如下:

def analyze_variable_relationship(data_df):
    '''
        可视化变量关系
        热图
    '''

    #绘制出所有变量直接的关系,形成一个矩阵
    #corr计算相关系数
    corr_df = data_df.corr()
    #热图
    sns.heatmap(corr_df,annot=True)
    plt.savefig(os.path.join(output_path,'heatmap_df.png'))
    plt.show()


效果如下:


从上面各个角度分析,我们可以看出北京地区的PM2.5真的在减少,每年都有减少。但是大气污染排放源体系构成复杂、时空变化较快,对有关研究解析工作提出了巨大挑战。有关政府部门应当加大与科研机构合作的力度和广度,进一步全面准确掌控PM2.5的污染源数据,让清洁空气行动获得更为有力的技术支撑,让大气污染防治工作可以聚焦重点污染领域精准发力、持续用力,最终让北京收获更多蓝天(来源人民网)。



扫美女,领取全部代码

更多python实战内容,推荐一个Python实战圈。提供清晰的多系统学习路径、快速学习运用python的圈子圈主是世界500强高级软件工程师,多年编码经验。具体可以提供以下内容:

【基础】0基础入门python,24小时有人快速解答问题;

【提高】40多个项目实战,老手可以从真实场景中学习python;

【直播】不定期直播项目案例讲解,手把手教你如何分析项目;

【分享】优质python学习资料分享,让你在最短时间获得有价值的学习资源;圈友优质资料或学习分享,会不时给予赞赏支持,希望每个优质圈友既能赚回加入费用,也能快速成长,并享受分享与帮助他人的乐趣。

【人脉】收获一群志同道合的朋友,并且都是python从业者

【价格】本着布道思想,只需 69元 加入能保证学习效果圈子


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/IhHBD7oGLB
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/25296
 
635 次点击