大連市2016年空氣質量數據可視化

前幾天發現了一個很有趣的包——openair,可以將年度時間序列刻畫成周年日曆熱圖,感覺這種形式非常適合用於呈現年度空氣質量可視化,所以抓空爬了一些大連市2016年年度空氣質量數據拿來玩玩,目標網站網頁結構比較簡單,爬取過程很輕鬆,界面部分很規律,感覺這個代碼可以作為模板用,感興趣的小夥伴兒可以試著玩一玩!

library(RCurl)

library(XML)

library(dplyr)

library(ggplot2)

library(stringr)

library(rvest)

library(lubridate)

library("DT")

library(openair)

library(ggplot2)

數據爬取過程:

構造月度url地址(網站是按照月度數據存儲的,需要按月爬取)

urlbase<-"PM2.5歷史數據_空氣質量指數歷史數據_中國空氣質量在線監測分析平台歷史數據"

url<-"空氣質量指數AQI_PM2.5月統計歷史數據_中國空氣質量在線監測分析平台歷史數據大連"

rd <- getURL(url,.encoding="UTF-8")

rdhtml <- htmlParse(rd,encoding="UTF-8")

otherpage<-getNodeSet(rdhtml,"//a")

allurl<-laply(otherpage,xmlGetAttr,name=href)%>%grep("2016",.,value=T)%>%sub("麓貿脕盧","大連",.)

#以上還是編碼出了問題,不知道那個亂碼是什麼鬼!只能強行替換了!

allurl<-paste0(urlbase,allurl)

以上過程也可先通過觀察大連市的月度空氣質量url地址規律,然後通過paste函數直接生成。

allurl<-paste0("2017年03月空氣質量指數AQI_PM2.5日歷史數據_中國空氣質量在線監測分析平台歷史數據大連&month=",201601:201612)

這是簡單粗暴的方式,但是不保證任何網址都可以使用

先寫完一個看下具體情況

tbls<-read_html(allurl[1],encoding="utf-8")%>%html_table(.,header=TRUE,trim=TRUE);tbls<-tbls[[1]]

編寫單次爬取函數,使用for循環遍歷網址進行數據獲取(原諒我又用了for循環)

mytable<-data.frame()

for (i in allurl){

Sys.sleep(sample(1:5,1))

fun<-function(m){

table<-read_html(m,encoding="utf-8")%>%html_table(.,header=TRUE,trim=TRUE)

table<-table[[1]]

}

mytable<-rbind(mytable,fun(i))

}

使用動態表格查看數據

datatable(mytable)

#備份一份數據,以防原數據損壞

mytableb<-mytable

調整時間變數

mytable$日期<-as.Date(mytable$日期);names(mytable)[1]<-"date"

AQI指數年度分布日力圖

calendarPlot(mytable,pollutant="AQI",year=2016)

PM2.5指數年度分布日力圖

calendarPlot(mytable,pollutant="PM2.5",year=2016)

--------------------------------------------------------------------------------

接下來使用ggplot函數製作同樣的日力圖

dat <- mytable

這次使用lubridate包來處理時間日期變數(超級好用)

dat$month<-as.numeric(as.POSIXlt(dat$date)$mon+1)

dat$monthf<-factor(dat$month,levels=as.character(1:12),labels=c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),ordered=TRUE)

dat$weekday<-as.POSIXlt(dat$date)$wday

dat$weekdayf<-factor(dat$weekday,levels=rev(0:6),labels=rev(c("Sun","Mon","Tue","Wed","Thu","Fri","Sat")),ordered=TRUE)

dat$week <- as.numeric(format(dat$date,"%W"))

dat<-ddply(dat,.(monthf),transform,monthweek=1+week-min(week))

AQI指數為污染級別以上的天數分布

windowsFonts(myFont = windowsFont("微軟雅黑"))

ggplot(dat,aes(monthweek,weekdayf,fill=AQI))+

geom_tile(colour=white) +

facet_wrap(~monthf ,nrow=3) +

scale_fill_gradient(space="Lab",limits=c(100, max(dat$AQI)),low="yellow", high="red") +

labs(title="大連市2016年空氣日曆熱圖",subtitle="AQI指數為污染級別以上的天數分布(AQI>=100)",x="Week of Month",y="")+

theme(title=element_text(family="myFont"))

PM2.5指數為污染級別以上的天數分布

ggplot(dat,aes(monthweek,weekdayf,fill=PM2.5))+

geom_tile(colour=white) +

facet_wrap(~monthf ,nrow=3) +

scale_fill_gradient(space="Lab",limits=c(75, max(dat$PM2.5)),low="yellow", high="red") +

labs(title="大連市2016年氣溫日曆熱圖",subtitle="PM2.5指數為污染級別以上的天數分布(PM2.5>=75)",x="Week of Month",y="")+

theme(title=element_text(family="myFont"))

大體來看,大連整個2016年度污染天氣相對來講,還算是挺良心的,跟帝都比起來要好很多。AQI和PM2.5在污染級別以上的天數不超過兩個月。

-------------------------------------------------------------------------------------------------------

接下來呢,我們做一些詳細的統計工作,具體就是從時間細分維度來查看季度、月度、周度等平均AQI、PM2.5指數分布情況

data3<-mytable[,c(1,2,4,5)]

data3<-transform(data3,Quarter=quarter(date),Month=month(date),Week=week(date))

data3$質量等級<-factor(data3$質量等級,levels=c("重度污染","中度污染","輕度污染","良","優"),labels=c("重度污染","中度污染","輕度污染","良","優"),order=T)

首選查看五個污染級別在2016年度出現的頻率:

countd<-count(data3$質量等級)%>%arrange(.,-freq)

ggplot(countd,aes(reorder(x,freq),freq))+

geom_bar(fill="#0C8DC4",stat="identity")+

coord_flip()+

labs(title="大連市2016年度空氣質量分布",subtitle="污染級別頻率分布圖",caption="PM2.5查詢|PM2.5歷史數據查詢|PM2.5全國排名|PM2.5統計分析|PM2.5全國分布圖|中國空氣質量在線監測分析平台")+

geom_text(aes(label=freq),hjust=1,colour="white",size=8)+

theme_bw()+

theme(

text=element_text(family="myFont"),

panel.border=element_blank(),

panel.grid.major=element_line(linetype="dashed"),

panel.grid.minor=element_blank(),

plot.caption=element_text(hjust=0,size=10),

axis.title=element_blank()

)

基於季度空氣質量平均水平分布圖:

Quarter<-aggregate(AQI~Quarter,data=data3,FUN=mean)

ggplot(Quarter,aes(reorder(Quarter,-AQI),AQI))+

geom_bar(fill="#0C8DC4",stat="identity")+

labs(title="大連市2016年度空氣質量分布",subtitle="AQI污染指數季度指標平均分布圖",caption="PM2.5查詢|PM2.5歷史數據查詢|PM2.5全國排名|PM2.5統計分析|PM2.5全國分布圖|中國空氣質量在線監測分析平台")+

geom_text(aes(label=round(AQI)),vjust=1.5,colour="white",size=8)+

theme_bw()+

theme(

text=element_text(family="myFont"),

panel.border=element_blank(),

panel.grid.major=element_line(linetype="dashed"),

panel.grid.minor=element_blank(),

plot.caption=element_text(hjust=0,size=10),

axis.title=element_blank()

)

基於月度空氣質量平均水平分布圖:

Month<-aggregate(AQI~Month,data=data3,FUN=mean)

ggplot(Month,aes(reorder(Month,-AQI),AQI))+

geom_bar(fill="#0C8DC4",stat="identity")+

labs(title="大連市2016年度空氣質量分布",subtitle="AQI污染指數月度指標平均分布圖",caption="PM2.5查詢|PM2.5歷史數據查詢|PM2.5全國排名|PM2.5統計分析|PM2.5全國分布圖|中國空氣質量在線監測分析平台")+

geom_text(aes(label=round(AQI)),vjust=1.5,colour="white",size=6)+

theme_bw()+

theme(

text=element_text(family="myFont"),

panel.border=element_blank(),

panel.grid.major=element_line(linetype="dashed"),

panel.grid.minor=element_blank(),

plot.caption=element_text(hjust=0,size=10),

axis.title=element_blank()

)

基於月度空氣質量平均水平分布圖:

Week<-aggregate(AQI~Week,data=data3,FUN=mean)

ggplot(Week,aes(factor(Week,order=T),AQI,group=1))+

geom_line(col="#0C8DC4")+

labs(title="大連市2016年度空氣質量分布",subtitle="AQI污染指數周度指標平均分布圖",caption="PM2.5查詢|PM2.5歷史數據查詢|PM2.5全國排名|PM2.5統計分析|PM2.5全國分布圖|中國空氣質量在線監測分析平台")+

geom_text(aes(label=ifelse(Week>100,Week,"")),vjust=1.5,colour="white",size=6)+

theme_bw()+

theme(

text=element_text(family="myFont"),

panel.border=element_blank(),

panel.grid.major=element_line(linetype="dashed"),

panel.grid.minor=element_blank(),

plot.caption=element_text(hjust=0,size=10),

axis.title=element_blank()

)

從以上周度AQI平均指標上來看,大連市2016年度的周度平均AQI指數大部分周都在100以下,看到這個感覺生活在大連還是蠻幸福的,看著北上的小夥伴兒隔三差五的在朋友圈曬人間仙境也是一件很有趣的事哈哈!

文件及代碼分享在QQ群共享中, 魔方學院QQ群:553270834

我們EasyCharts團隊在網易雲課堂等你來上課哦,長按下面的二維碼就可進入網易學習課堂。本課程定價為19.9,在2017年1月11日前的打折優惠價為9.9

Excel商業圖表修鍊秘笈-基礎篇 - 網易雲課堂 (二維碼自動識別)

簡介

真正的高手,不是會製作高難度的圖表,而是能把最平常的圖表繪製出商務范!小菜鳥,老司機,都不容錯過本課程哦!

1. 這是Excel史上最全的基礎圖表類型講解;本課程重點講解了23個基礎圖表案例,包括Excel自動生成的柱形圖,條形圖,折線圖,面積圖,散點圖,餅圖,圓環圖、雷達圖,表格,卡片等常用商業圖表。

2. 這是Excel史上最全的商業圖表風格學習大全;本課程提供了5種商業圖表風格的圖表,包括《商業周刊》風格,《華爾街日報》風格1和2,《經濟學人》風格1和2,共5種經典商業雜誌圖表的風格。

3. 本課程包括了150多張張商業圖表演示Excel源文件。每個基礎圖表案例至少提供6種以上不同的圖表風格演示,供讀者選擇與學習,可以滿足不同人群的審美需求。

EasyCharts團隊出品

帥的人都關注了EasyCharts團隊^..^~

QQ交流群:553270834

微信公眾號:EasyCharts

更多信息敬請查看: easychart.github.io/pos


推薦閱讀:

R語言可視化——ggplot繪製中心密度輻射圖
R語言可視化——數據地圖離散百分比填充(環渤海)
R語言分析告訴你應避開哪個國家以躲避空難
MySQL入門及其與R的交互
R語言數據可視化——顏色綜合運用與色彩方案共享

TAG:数据可视化 | R | ggplot2 |