当前位置:天才代写 > tutorial > 其他教程 > 日历中的夏天

日历中的夏天

2017-12-04 08:00 星期一 所属: 其他教程 浏览:452

看着有节,摸着无节–打一糊口用品

不知不觉,夏日已逐步邻近。女人们飞扬的裙角,小贩叫卖的西瓜,蚊蝇嗡嗡的声音,以及翻过的一页日历,都提醒着你–夏天快来了。夏季有着差异的界说,按照中国人的日历,我们所俗称的夏季从“立夏”开始,到“立秋”竣事。在气候学上,若持续五天平均温度高出22度,则算作夏季的开始,若五天平均温度低于22度则算作入秋。而天文学上的夏季一般是指6、7、8三个月。

我们想知道:哪一种夏季的界说更合乎我们的感受?照旧用数据可视化来措辞吧。这项任务根基上有两个步调,一是获取某都市的2011年日平均温度数据,二是按照数据绘制日历热图(Calendar Heatmap)


本文所回收的数据源是Wunderground提供的API。该API所提供的数据极为富厚,除了汗青温度数据外,尚有湿度、风向等大量信息可以操作,所以它被数据源手册所推荐。为了利用这个API我们先申请一个免费帐户,然后操作R语言中的RJSONIO包来理会所获得的天气数据。利用这个API要留意的是,其免费帐户每分钟限制10次挪用,超出会间断毗连。不知作别人怎么弄的,本人的笨步伐是在措施中增加了暂停。这样就得到了365个日平均温度。

日历热图是一种有趣的东西,它可以在日历表中显示时间序列数据的变革。在2009年的The Data Expo中,获奖团队就是操作了SAS来生成日历热图。多才多艺的R语言虽然也可以做到。在《R Graphs Cookbook》这本书中就提到了绘制日历热图的要领,第一种要领是Paul Bleicher所写的一个函数,它是基于grid,lattice,chron这三个扩展包来编写的。第二种要领是利用openair扩展包中的calendarPlot函数。生成的图形就象下面这个样子。

看起来不错,可是我们还没完。我们但愿挑选出平均温度在22度以上的日子,突出显示出来。所以我们回收第三种要领,用ggplot2包来绘制日历热图,下面的图形参考了MarginTale的这篇文章。

上图中数日子是竖着来数的,横轴暗示每月的第几周,纵轴暗示礼拜几。灰色部门暗示当天平均温度在22度以下,有色彩的区块暗示在22度以上。颜色越偏黄则暗示温度越高。在2011年,立夏的时间是5月6日,立秋是8月8日,但可以调查到立秋之后仍有许多时间温度在22度以上。这就是我们所俗称的“秋老虎”。假如凭据气候学的界说来看,四月末就呈现了持续五天的高温,所以夏天应该在四月末就开始了,一直延续到十月初竣事。而天文学上的夏季则是六、七、八三个月,这三个月根基上全是22度以上。看起来天文学的夏季是较量切合我们人体的感受的。其它的要么偏短,要么偏长。

写到这里,想起了梁静茹的一首歌:
安全的夏天
天空中繁星点点
心里头有些忖量
忖量着你的脸
我可以冒充看不见
也可以偷偷的想念
直到让我摸到你那暖和的脸

(最后要说的是,本人不是气象专家,本文也没有思量到湿度对体感温度的影响等其它因素。主要照旧向列位先容R语言中日历热图的绘制。)

R代码在此:

# 加载所需扩展包 library(RCurl)library(RJSONIO)require(quantmod)library(ggplot2)
# 提取武汉市2011年一年的汗青数据date <- seq.Date(from=as.Date(‘2011-01-01’), to=as.Date(‘2011-12-31′), by=’1 day’)date.range <- as.character(format(date,”%Y%m%d”))n <- length(date.range)temp <- humi <- rep(0,n)for (i in 1:n) { # 你要用本身申请的API key来取代措施中的yourkey url <- ‘http://api.wunderground.com/api/yourkey/’ finalurl <- paste(url,’history_’,date.range[i], ‘/q/wuhan.json’,sep=”) web <- getURL(finalurl) raw <-fromJSON(web) temp[i] <- raw$history$dailysummary[[1]]$meantempm humi[i] <- raw$history$dailysummary[[1]]$humidity # 在轮回内增加一个7秒的暂停,制止毗连断开。 Sys.sleep(7)}# 将得到的数据整合为数据框,并将温度和湿度转为数值名目dataset <- data.frame(temp,humi,date,stringsAsFactors=F)dataset$temp <- as.numeric(dataset$temp)dataset$humi <- as.numeric(dataset$humi)
# 用openair包绘制日历热图install.packages(‘openair’)library(openair)calendarPlot(dataset,pollutant=’temp’,year=2011)
# 用ggplot2包绘制日历热图# 复制一个新的数据框dat <- dataset# 先取得月份,再转为因子名目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)$wdaydat$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))# 画图P <- ggplot(dat, aes(monthweek, weekdayf, fill = temp)) + geom_tile(colour=’white’) + facet_wrap(~monthf ,nrow=3) + scale_fill_gradient(space=”Lab”,limits=c(22, max(dat$value)), low=”red”, high=”yellow”) + opts(title = “武汉市2011年气温日历热图”) + xlab(“Week of Month”) + ylab(“”)P
 

    关键字:

天才代写-代写联系方式