Pandas数据分析案例(盛华化工锅炉排放数据可视化分析)

实验环境

操作系统:Linux/Windows10

开发工具: Jupyter Notebook

编程环境 :Python 3.8,Pandas 1.1.x,Matplotlib 3.3.x(建议安装Anaconda3环境)

数据集介绍

盛华化工锅炉排放数据,数据包含两个锅炉烟气脱硫出口排放氮氧化物、 二氧化硫和烟尘的检测值,数据时间范围为:2018-11-17 23:00:00 - 2018-11-27 23:00:00

问题描述

通过可视化数据分析,发现排放异常情况,并结合实际情况进行相应整顿。

实验步骤

一、数据导入与观察

  1. 数据导入

    实验数据为excel文件(相应数据文件及源代码可在文末的链接中下载),可以使用pandas的read_excel进行导入。

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    #数据导入
    #sheet_name指定要读取的sheet,可以是代表顺序的整数、sheet的名称,或者是它们组成的列表,默认为None,将读取所有sheet
    #header, 指定数据的字段信息所在的行,可以是整数或者是整数组成的列表,如果设为None,表示数据中没有字段信息。
    data = pd.read_excel("盛华化工锅炉排放数据.xlsx",sheet_name=0,header=1)
    
  2. 观察数据

    (1) 查看数据的前五行数据

    data.head(5)
    

    在这里插入图片描述

    通过观察,数据文件被正确解析,数据为典型的长格式,在数据分析之前需要进行数据重塑,将长格式转换成宽格式

    (2) 观察数据概况,包括数据的行索引,列索引,数据类型,非空值个数以及内存使用情况

    data.info()
    

    在这里插入图片描述

    数据包含1411条样本,通过观察发现数据没有缺失值,并且数据时间列正确解析为datetime64[ns]类型。

    (3) 观察数据的统计信息

    data.describe()
    

    在这里插入图片描述

    (4) 观察有哪些排放口和排放指标

    data['排放口'].drop_duplicates(), data['指标名称'].drop_duplicates()
    

    在这里插入图片描述

    排放口一共有两个,分别为1号锅炉和2号锅炉,一共包含三个排放指标,分别为:氮氧化物、 二氧化硫、烟尘

二、数据转换

  1. 数据时间转换

希望分析各类排放指标在不同时间点(以小时为单位)的平均观测值,所以需要根据数据时间生成小时列。

#生成时间_小时列
data["时间_小时"] = data["数据时间"].apply(lambda x : x.hour)
data.head()

输出结果为:

数据时间排放口指标名称检测值排放标准是否超标时间_小时
02018-11-27 23:00:002号锅炉烟气脱硫出口氮氧化物82.5210023
12018-11-27 23:00:002号锅炉烟气脱硫出口二氧化硫0.253523
22018-11-27 23:00:001号锅炉烟气脱硫出口氮氧化物59.6410023
32018-11-27 23:00:001号锅炉烟气脱硫出口烟尘2.241023
42018-11-27 23:00:002号锅炉烟气脱硫出口烟尘2.331023
  1. 指标检测值数据重塑

将长格式转换为宽格式,注意这里的数据维度包括:时间_小时、指标名称、排放口;数据值包括:检测值和排放标准。

首先通过pivot_table方法生成检测数据的宽格式

#数据重塑
#index指定行索引使用的列,如果指定多个列为行索引,则生成多级索引
#columns指定列索引将要使用的列,如果指定多个列为列索引,则生成多级索引
#values指定透视图观察的数据
#aggfunc指定如果聚合观察值
indicators = pd.pivot_table(data, 
                            index='时间_小时', 
                            columns = ['指标名称','排放口'],
                            values = '检测值',
                            aggfunc='mean')
indicators

输出结果为:

指标名称二氧化硫氮氧化物烟尘
排放口1号锅炉烟气脱硫出口2号锅炉烟气脱硫出口1号锅炉烟气脱硫出口2号锅炉烟气脱硫出口1号锅炉烟气脱硫出口2号锅炉烟气脱硫出口
时间_小时
02.8614291.00272774.640000124.2209092.3554552.619091
14.4842860.41666772.610000126.8918182.3863642.568182
25.0783330.79333372.085455132.1772732.4600002.694545
32.9583331.05571470.493636147.0145452.5327272.764545
42.4857140.78857171.782727151.5881822.3463642.813636
52.7125000.44800068.623333142.0427272.3383332.751000
62.6833330.56000072.127273141.4518182.4736362.742727
72.5262500.46857169.035455135.7463642.4345452.591818
83.0657143.04000069.292727134.0718182.4218182.640000
93.1625001.76100069.881818109.6481822.6154552.511818
102.3311110.98375070.605000118.8430002.6400002.409167
113.5457140.68571471.384545119.8272732.7936362.545455
124.2900000.81800065.349091119.97272711.0127272.558182
132.0855561.03777869.407273115.3463642.6418182.450000
141.8420001.29545570.449091105.0072732.5654552.519091
154.3022221.60444470.928333122.3900003.6609092.608000
164.5663641.18272772.358182104.2833335.4470002.453636
173.4414290.64000073.27909182.2490912.6654552.348182
181.3944440.34714371.234545112.4045452.5218182.509091
195.0271430.62333371.381818126.1554552.4436362.569091
202.6575000.24571468.595455123.4072732.4745452.659091
212.1871431.09888967.420909123.8836362.6140002.623636
220.9033330.60000070.330909124.5418182.4809092.549091
239.5140000.66875075.206364124.2509092.4018182.624545
  1. 提取排放标准

提取排放标准的数据,该数据只涉及指标名称一个维度

standard = data[['指标名称','排放标准']].drop_duplicates().set_index('指标名称')
standard

输出结果为:

排放标准
指标名称
氮氧化物100
二氧化硫35
烟尘10

三、数据可视化分析

  1. 准备工作

    将使用pandas和matplotlib完成数据可视化分析,通过如下设置解决中文显示问题,并设置画布大小

    # 用来正常显示中文标签
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 用来正常显示负号
    plt.rcParams['axes.unicode_minus'] = False
    # 设置画布大小
    plt.rcParams['figure.figsize'] = (8,5)
    #设置dpi
    plt.rcParams['figure.dpi'] = 120
    
  2. 对两个排放口在各个时间点的检测值与排放标准进行对比分析

    #定义绘图函数,对比分析各个时间点上的检测值与排放标准的差距
    def plot_indicator_hours(indicator):
        indicators[indicator].plot(title=F'{indicator}各个时间点的排放情况')
        #绘制排放标准的参考线
        plt.axhline(y=standard['排放标准'][indicator], c='g',ls='--')
    

    (1) 氮氧化物在各个时间点上的排放情况

    #可视化氮氧化物在各个时间点上的排放情况
    plot_indicator_hours('氮氧化物')
    

    在这里插入图片描述

    分析结果:绿色虚线为氮氧化物的排放标准,1号锅炉烟气脱硫出口的氮氧化物排放量达标,排放量比较平稳;2号锅炉烟气脱硫出口的氮氧化物排放量超标,排放量波动较大。

    (2) 二氧化硫在各个时间点上的排放情况

    plot_indicator_hours('二氧化硫')
    

    在这里插入图片描述

    分析结果:绿色虚线为二氧化硫的排放标准,两个排放口的排放情况良好,其中1号锅炉烟气脱硫出口的二氧化硫排放略高于2号锅炉。

    (3) 烟尘在各个时间点上的排放情况

    plot_indicator_hours('烟尘')
    

    在这里插入图片描述

    分析结果:绿色虚线为烟尘的排放标准,其中2号锅炉烟气脱硫出口的烟尘排放量良好,排放情况稳定;1号锅炉烟气脱硫出口的烟尘排放量在中午12点和下午4点时排放量异常偏高,且中午12点的排放量超标,可结合实际情况考虑测量数据是否异常或者其他原因引起的排放量增高。

  3. 对两个排放口各个排放指标与排放标准进行对比分析

    #计算各个指标的检测值平均值
    mean_indicator = indicators.mean().to_frame().unstack().droplevel(0,axis=1)
    #计算各个指标与排放标准的差值
    diff_indicator = pd.concat([mean_indicator,standard],axis=1)
    diff_indicator['1号锅炉排放指标'] = diff_indicator['1号锅炉烟气脱硫出口']-diff_indicator['排放标准']
    diff_indicator['2号锅炉排放指标'] = diff_indicator['2号锅炉烟气脱硫出口']-diff_indicator['排放标准']
    #绘制柱状图
    diff_indicator[['1号锅炉排放指标','2号锅炉排放指标']].plot.bar()
    

    在这里插入图片描述

分析结果

  • 二氧化硫:两个排放口均达标,其中2号锅炉排放更平稳,排放量更低。

  • 氮氧化物:1号锅炉排放达标,且排放量平稳;2号锅炉排放超标,且排放量波动较大,需要整顿

  • 烟尘:2号锅炉排放达标,且排放量平稳;1号锅炉排放量基本达标,但排放波动大,且在中午12时的检测测超标,需要排查原因

相关资源

链接:https://pan.baidu.com/s/1b9z18GSmUqwUuimZt_lHsQ?pwd=k90y
提取码:k90y

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JJustRight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值