ELK实践(三)北京历年空气质量数据分析
一、了解数据及建模
北京空气质量数据,下载地址
数据建模:
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实践(三)北京历年空气质量数据分析相关推荐
- 机器学习KNN算法实践:预测城市空气质量
出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...
- 空气质量数据分析及web实现
本次课程设计主要是针对大数据计算框架这门课程的总结,同时利用web进行展示,也是对自己之前学习前端的一次小检验.同时也是自己第一次和同学们进行分工合作完成的作业,自己主要负责对所有的内容整合,并进行w ...
- 2014-2022年4月全国空气质量数据分析
2014-2022年4月所有城市及站点空气质量数据集(更新中)更新时间不固定 时间范围:2014-2022年4月年 数据来源:中国环境监测总站的全国城市空气质量实时发布平台 数据格式说明距离: 全国城 ...
- 【空气质量数据分析专题九】污染物浓度小时变化分析
前言 对空气质量小时级别五年数据进行小时变化分析,可以看出污染物浓度在一天中逐小时变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各小时的平均浓度,最后进行可视化分析.处理方 ...
- 【空气质量数据分析专题五】污染物浓度年际变化分析
前言 大气空气质量污染物一般为SO2.NO2 .CO.PM10.PM2.5.O3六项污染物.日级别浓度中,除O3使用最大8小时滑动平均浓度外,其他五项污染物均采用日平均浓度. 除CO浓度单位为mg/m ...
- Matplotlib空气质量数据分析(附数据集下载)
使用JupyterLab进行的数据分析 数据集下载 import pandas as pd import numpy as np from pandas import Series, DataFram ...
- Python爬虫实践:获取石家庄空气质量历史数据(13年至今)
from urllib.request import urlopen from bs4 import BeautifulSoup import re import numpy import csv i ...
- 【空气质量数据分析专题八】污染物浓度日变化分析
前言 对空气质量日级别五年数据进行日变化分析,可以看出污染物浓度逐日变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各日平均浓度,最后进行可视化分析.日变化分析方式有多种,这 ...
- 【空气质量数据分析专题七】污染物浓度月变化分析
前言 对空气质量日级别五年数据进行月变化分析,可以看出污染物浓度随月份变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各月平均浓度,最后进行可视化分析.月变化分析方式有多种, ...
- Python数据分析练习:北京、广州PM2.5空气质量分析(2)
<接上一篇> 2. 数据分析 2.1 空气质量等级的对比分析 广州2015年与2016年的空气质量等级对比,分别统计全年各个等级的次数占比(例如:Good占比 = Good次数/全年总测量 ...
最新文章
- mysql用语_mysql基本sql语句大全(基础用语篇)
- 关于数据仓库数据质量的问题处理
- 基因对智力的预测能力不到7%,别迷信它
- pytorch mseloss测试
- 受益终生的世界顶级八大思维
- Spring-注入参数详解-[集合类型属性]
- java备还原mysql_用java来备份还原mysql数据库
- android 点击外部接收事件,Android Dialog外部点击事件
- Linux下 运行Jmeter (含一个jmeter简单示例)
- C语言学习之函数调用递归问题,有5个学生坐在一起,问第5个学生多少岁?
- mysql删除用户账号和密码_mysql添加、删除用户和授权用户
- PowerShell-将CSV导入SQL Server
- maven多模块项目,多web合并项目使用心得
- [转载] python中@property装饰器
- java 参数命名规则_Java命名规范
- RISC-V架构能否引领物联网时代?
- 蓝牙—RFCOMM协议
- muParser公式库使用简介
- 网页自动关机代码HTML,电脑如何自动关机
- 关于使用mysqlworkbench实现远程连接数据库