一、了解数据及建模

北京空气质量数据,下载地址

数据建模:

PUT air_quality
{"mappings": {"doc": {"dynamic": false,"properties": {"@timestamp": {"type": "date"},"city": {"type": "keyword","ignore_above": 256},"parameter": {"type": "keyword","ignore_above": 256},"status": {"type": "keyword","ignore_above": 256},"value": {"type": "long"}}}},"settings": {"index": {"number_of_shards": "1","number_of_replicas": "0"}}
}

二、导入数据

本次实验使用Filebeat + Ingest Nodde架构。

filebeat 配置:


filebeat.prospectors:
- type: logenabled: truepaths:- /home/wfs/data/*.csvexclude_lines: ["^A ","^The","^Site","^,"]output.elasticsearch:hosts: ["192.168.20.20:9200"]pipeline: "airquality"index: "air_quality"username: "elastic"password: "123456"setup.template.name: "airquality"
setup.template.pattern: "airquality*"
setup.template.enabled: false

数据:

# ls /home/wfs/data/
Beijing_2008_HourlyPM2.5_created20140325.csv  Beijing_2014_HourlyPM25_created20150203.csv
Beijing_2009_HourlyPM25_created20140709.csv   Beijing_2015_HourlyPM25_created20160201.csv
Beijing_2010_HourlyPM25_created20140709.csv   Beijing_2016_HourlyPM25_created20170201.csv
Beijing_2011_HourlyPM25_created20140709.csv   Beijing_2017_HourlyPM25_created20170803.csv
Beijing_2012_HourlyPM2.5_created20140325.csv
Beijing_2013_HourlyPM2.5_created20140325.csv

Pipeline配置:

PUT /_ingest/pipeline/airquality
{"processors": [{"grok": {"field": "message","patterns": ["%{DATA:city},%{DATA:parameter},%{DATA:date},%{NUMBER:year},%{NUMBER:month},%{NUMBER:day},%{NUMBER:hour},%{NUMBER:value},%{DATA:unit},%{DATA:duration},%{WORD:status}"]}},{"set": {"field": "_id","value": "{{city}}-{{date}}"}},{"date": {"field": "date","target_field": "@timestamp","formats": ["MM/dd/yyyy HH:mm","yyyy-MM-dd HH:mm"],"timezone": "Asia/Shanghai"}},{"remove": {"field": "message"}},{"remove": {"field": "beat"}},{"remove": {"field": "offset"}},{"remove": {"field": "source"}},{"remove": {"field": "date"}},{"convert": {"field": "year","type": "integer"}},{"convert": {"field": "month","type": "integer"}},{"convert": {"field": "day","type": "integer"}},{"convert": {"field": "hour","type": "integer"}},{"remove": {"field": "duration"}},{"remove": {"field": "unit"}},{"convert": {"field": "value","type": "integer"}}],"on_failure": [{"set": {"field": "error.message","value": "{{ _ingest.on_failure_message }}"}}]
}

数据导入完成后诶下图所示:

可以看到数据是以小时为间隔采集的,为了便于分析,可以借助python,将小时数据聚合到天的维度。

from datetime import datetime
from elasticsearch import Elasticsearches = Elasticsearch(['192.168.20.20:9200'])search_query = {"query": {"range": {"value": {"gte": 1}}},"aggs": {"days": {"date_histogram": {"field": "@timestamp","interval": "day","time_zone": "+08:00"},"aggs": {"pm25": {"stats": {"field": "value"}}}}},"size": 0
}
res = es.search(index='air_quality', body=search_query)index_name = 'air_quality_days'
index_type = 'doc'
es.indices.delete(index=index_name, ignore=[400, 404])for info in res['aggregations']['days']['buckets']:cur_date = datetime.strptime(info['key_as_string'], '%Y-%m-%dT%H:%M:%S.%f+08:00')new_doc = {"@timestamp": info['key_as_string'],'year': cur_date.year,'month': cur_date.month,'day': cur_date.day,"value_max": info['pm25']['max'],"value_avg": info['pm25']['avg'],"value_min": info['pm25']['min'],}es.index(index=index_name, doc_type=index_type, id=new_doc['@timestamp'], body=new_doc)print(new_doc)

可以看到,上边的search_query实质上是对value大于1的按天进行分桶,并使用status返回当天PM25的系列统计值,完全等价于如下DSL:

GET air_quality/_search
{"size":0,"query": {"range": {"value": {"gt": 1}}},"aggs": {"days": {"date_histogram": {"field": "@timestamp","interval": "day","time_zone": "+08:00"},"aggs": {"PM25": {"stats": {"field": "value"}}}}}
}

然后对上述聚合分析循环遍历,创建新的以天为维度的索引air_quality_days

三、数据实战分析

通过数据,我们首先可以从整体上看下十年来空气质量是否有好转:
1.空气质量分析 – 每年蓝天占比饼图:

这里使用了脚本动态生成到了rate_level字段,

在ManageMent–>Index Patterns中配置:

脚本内容:

double val=doc['value_max'].value;
String rtn="";
if(val<50){
rtn="1-Good"
}else if(val<100){
rtn="2-Moderate"
}else if(val<150){
rtn="3-Unhealthy for Sensitive Groups"
}else if(val<200){
rtn="4-Unhealthy"
}else if(val<300){
rtn="5-Very Unhealthy"
}else{
rtn="6-Hazardous"
}
return rtn;

2.空气质量分析 – AQI质量随时间分布占比:

配置比较简单:Options中设置:Chart Type:Bar Stacked:Percent

3.空气质量分析 – 每年蓝天占比(VB):
以value_max的值等于100为判断依据,小于100定为Good,Panel Options 中将书剑间隔Interval设置为1y即可

4.空气质量分析 – 每月蓝天占比(VB):
同理,将时间间隔修改为1M

然后在具体到某一时间段内,看一下空气质量是否有改善。比如通过数据对比2016年冬季较2015年同一时刻的空气质量情况。
1.空气质量分析 – 2016 vs 2015 冬季雾霾天数占比(TL)

.es(index=air_quality_days,q='value_max:>150',offset=-1y).divide(.es(index=air_quality_days,offset=-1y)).multiply(100).label(2015).lines(fill=1,width=1),.es(index=air_quality_days,q='value_max:>150').divide(.es(index=air_quality_days)).multiply(100).label(2016).lines(fill=3,width=1).title("2016 vs 2015雾霾天数占比")


2.空气质量分析 – 2016 VS 2015 PM25最大值比较 (VB)

将 Offset series time设置为1y即可得到2015年的数据,通过Fill(0-1)和Line Width控制线的样式和透明度

3.空气质量分析 – 2016、2015年冬季雾霾天数(VB Metric)

4.空气质量分析 – 2016、2015年冬季每天空气质量情况

最后附上两个dashboard:

ELK实践(三)北京历年空气质量数据分析相关推荐

  1. 机器学习KNN算法实践:预测城市空气质量

    出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...

  2. 空气质量数据分析及web实现

    本次课程设计主要是针对大数据计算框架这门课程的总结,同时利用web进行展示,也是对自己之前学习前端的一次小检验.同时也是自己第一次和同学们进行分工合作完成的作业,自己主要负责对所有的内容整合,并进行w ...

  3. 2014-2022年4月全国空气质量数据分析

    2014-2022年4月所有城市及站点空气质量数据集(更新中)更新时间不固定 时间范围:2014-2022年4月年 数据来源:中国环境监测总站的全国城市空气质量实时发布平台 数据格式说明距离: 全国城 ...

  4. 【空气质量数据分析专题九】污染物浓度小时变化分析

    前言 对空气质量小时级别五年数据进行小时变化分析,可以看出污染物浓度在一天中逐小时变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各小时的平均浓度,最后进行可视化分析.处理方 ...

  5. 【空气质量数据分析专题五】污染物浓度年际变化分析

    前言 大气空气质量污染物一般为SO2.NO2 .CO.PM10.PM2.5.O3六项污染物.日级别浓度中,除O3使用最大8小时滑动平均浓度外,其他五项污染物均采用日平均浓度. 除CO浓度单位为mg/m ...

  6. Matplotlib空气质量数据分析(附数据集下载)

    使用JupyterLab进行的数据分析 数据集下载 import pandas as pd import numpy as np from pandas import Series, DataFram ...

  7. Python爬虫实践:获取石家庄空气质量历史数据(13年至今)

    from urllib.request import urlopen from bs4 import BeautifulSoup import re import numpy import csv i ...

  8. 【空气质量数据分析专题八】污染物浓度日变化分析

    前言 对空气质量日级别五年数据进行日变化分析,可以看出污染物浓度逐日变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各日平均浓度,最后进行可视化分析.日变化分析方式有多种,这 ...

  9. 【空气质量数据分析专题七】污染物浓度月变化分析

    前言 对空气质量日级别五年数据进行月变化分析,可以看出污染物浓度随月份变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各月平均浓度,最后进行可视化分析.月变化分析方式有多种, ...

  10. Python数据分析练习:北京、广州PM2.5空气质量分析(2)

    <接上一篇> 2. 数据分析 2.1 空气质量等级的对比分析 广州2015年与2016年的空气质量等级对比,分别统计全年各个等级的次数占比(例如:Good占比 = Good次数/全年总测量 ...

最新文章

  1. mysql用语_mysql基本sql语句大全(基础用语篇)
  2. 关于数据仓库数据质量的问题处理
  3. 基因对智力的预测能力不到7%,别迷信它
  4. pytorch mseloss测试
  5. 受益终生的世界顶级八大思维
  6. Spring-注入参数详解-[集合类型属性]
  7. java备还原mysql_用java来备份还原mysql数据库
  8. android 点击外部接收事件,Android Dialog外部点击事件
  9. Linux下 运行Jmeter (含一个jmeter简单示例)
  10. C语言学习之函数调用递归问题,有5个学生坐在一起,问第5个学生多少岁?
  11. mysql删除用户账号和密码_mysql添加、删除用户和授权用户
  12. PowerShell-将CSV导入SQL Server
  13. maven多模块项目,多web合并项目使用心得
  14. [转载] python中@property装饰器
  15. java 参数命名规则_Java命名规范
  16. RISC-V架构能否引领物联网时代?
  17. 蓝牙—RFCOMM协议
  18. muParser公式库使用简介
  19. 网页自动关机代码HTML,电脑如何自动关机
  20. 关于使用mysqlworkbench实现远程连接数据库

热门文章

  1. Python练手项目:求解史上最难数独问题
  2. 《矩阵分析与应用》(第2版)———知识+Matlab2018a——2nd
  3. 综合评价方法之秩和比法(RSR)
  4. hibernate二级缓存(二)二级缓存实现原理简单剖析
  5. [渝粤教育] 中国地质大学 国际贸易实务 复习题
  6. BeanUtils工具
  7. Win10蓝牙驱动程序错误怎么回事?
  8. Visual studio2012密钥 vs2012密钥 本人亲测 真实有效
  9. vs2012 express 密钥
  10. 切底删掉顽固360的.dll文件、删除删不掉的一些文件