• 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)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. 观察数据

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

      data.head(5)
      
      • 1

      在这里插入图片描述

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

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

      data.info()
      
      • 1

      在这里插入图片描述

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

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

      data.describe()
      
      • 1

      在这里插入图片描述

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

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

      在这里插入图片描述

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

    二、数据转换

    1. 数据时间转换

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

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

    输出结果为:

    数据时间排放口指标名称检测值排放标准是否超标时间_小时
    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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    输出结果为:

    指标名称二氧化硫氮氧化物烟尘
    排放口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
    
    • 1
    • 2

    输出结果为:

    排放标准
    指标名称
    氮氧化物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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. 对两个排放口在各个时间点的检测值与排放标准进行对比分析

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

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

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

      在这里插入图片描述

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

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

      plot_indicator_hours('二氧化硫')
      
      • 1

      在这里插入图片描述

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

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

      plot_indicator_hours('烟尘')
      
      • 1

      在这里插入图片描述

      分析结果:绿色虚线为烟尘的排放标准,其中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()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      在这里插入图片描述

    分析结果

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

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

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

    相关资源

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

  • 相关阅读:
    微服务真的需要前后端分离吗?
    C#-文件读写
    CART(classification and regression tree)
    全光谱台灯对孩子有伤害吗?儿童用台灯的好处和坏处是什么
    QGIS如何将路网中的多条路段合并成一条完整的路
    校园网升级改造怎么做
    String类常用方法总结
    云原生之旅 - 12)使用 Kaniko 在 Kubernetes上构建 Docker 容器镜像
    通过实例理解Go Web身份认证的几种方式
    Java面向对象(高级)-- 类中属性赋值的位置及过程
  • 原文地址:https://blog.csdn.net/tangyi2008/article/details/126258208