ELK实践(三)北京历年空气质量数据分析
一、了解數(shù)據(jù)及建模
北京空氣質(zhì)量數(shù)據(jù),下載地址
數(shù)據(jù)建模:
二、導(dǎo)入數(shù)據(jù)
本次實(shí)驗(yàn)使用Filebeat + Ingest Nodde架構(gòu)。
filebeat 配置:
數(shù)據(jù):
# 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.csvPipeline配置:
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 }}"}}] }數(shù)據(jù)導(dǎo)入完成后誒下圖所示:
可以看到數(shù)據(jù)是以小時(shí)為間隔采集的,為了便于分析,可以借助python,將小時(shí)數(shù)據(jù)聚合到天的維度。
可以看到,上邊的search_query實(shí)質(zhì)上是對(duì)value大于1的按天進(jìn)行分桶,并使用status返回當(dāng)天PM25的系列統(tǒng)計(jì)值,完全等價(jià)于如下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"}}}}} }然后對(duì)上述聚合分析循環(huán)遍歷,創(chuàng)建新的以天為維度的索引air_quality_days:
三、數(shù)據(jù)實(shí)戰(zhàn)分析
通過數(shù)據(jù),我們首先可以從整體上看下十年來(lái)空氣質(zhì)量是否有好轉(zhuǎn):
1.空氣質(zhì)量分析 – 每年藍(lán)天占比餅圖:
這里使用了腳本動(dòng)態(tài)生成到了rate_level字段,
在ManageMent–>Index Patterns中配置:
腳本內(nèi)容:
2.空氣質(zhì)量分析 – AQI質(zhì)量隨時(shí)間分布占比:
配置比較簡(jiǎn)單:Options中設(shè)置:Chart Type:Bar Stacked:Percent
3.空氣質(zhì)量分析 – 每年藍(lán)天占比(VB):
以value_max的值等于100為判斷依據(jù),小于100定為Good,Panel Options 中將書劍間隔Interval設(shè)置為1y即可
4.空氣質(zhì)量分析 – 每月藍(lán)天占比(VB):
同理,將時(shí)間間隔修改為1M:
然后在具體到某一時(shí)間段內(nèi),看一下空氣質(zhì)量是否有改善。比如通過數(shù)據(jù)對(duì)比2016年冬季較2015年同一時(shí)刻的空氣質(zhì)量情況。
1.空氣質(zhì)量分析 – 2016 vs 2015 冬季霧霾天數(shù)占比(TL)
2.空氣質(zhì)量分析 – 2016 VS 2015 PM25最大值比較 (VB)
將 Offset series time設(shè)置為1y即可得到2015年的數(shù)據(jù),通過Fill(0-1)和Line Width控制線的樣式和透明度
3.空氣質(zhì)量分析 – 2016、2015年冬季霧霾天數(shù)(VB Metric)
4.空氣質(zhì)量分析 – 2016、2015年冬季每天空氣質(zhì)量情況
最后附上兩個(gè)dashboard:
總結(jié)
以上是生活随笔為你收集整理的ELK实践(三)北京历年空气质量数据分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jquery 实现原理之 Ajax
- 下一篇: devexpress gridcontr