某個城市近70年來的氣溫統計
專案背景
這個專案的資料記錄了一個城市的近70年來的氣溫變化, 降雨量等的記錄,而這個專案是採用R語言作為資料分析工具。 是一個練手的專案,如有錯誤還望大家多多提意見,同時也感謝來自Kaggle提供的原始資料
切入正題
資料的載入, 匯入csv檔案
dataSet<-read。csv(“D:/R/weather_1948-2017/weather_1948-2017。csv”)
檢視資料集合的基本資訊
str(dataSet)
可以看出共觀測到25551條資料 和5個數據欄位
$ DATE #時間日期
$ PRCP #當天的降水量 以英寸為單位
$ TMAX: #當天的最高氣溫 (華氏攝氏度)
$ TMIN: #當天的最低氣溫 (華氏攝氏度)
$ RAIN: #當天是否降雨 (true/false)
我們來對每年的降雨量進行大致上資料的統計
library(lubridate)
library(sqldf)
dataSet$year <- year(dataSet$DATE)
我們獲取了從1948年到2017年每年的總降水量
yearRain <- sqldf(“select sum(PRCP) as yPRCP, year from dataSet as yPRCP group by year”)
獲取年降雨量的平均值
mean(yearRain$yPRCP)
我們將年降雨量的資料進行歸類
table(cut(yearRain$yPRCP, breaks = c(20, 30, 40, 50, 60)))
從圖片可以看出年降雨量大部分集中在35~40英寸和40~50英寸2個區間內
現在我們來分析一下年降水量是否近似正態分佈
histRains <- hist(yearRain$yPRCP, ylab = “數量”, xlab = “降水量的區間(英寸)”, main = “降水量的分佈圖”)
xfit <- seq(min(yearRain$yPRCP), max(yearRain$yPRCP), length(70))
yfit <- dnorm(xfit, mean = mean(yearRain$yPRCP), sd = sd(yearRain$yPRCP))
yfit <- yfit * (diff(histRains$mids[1:2])-0。2) * length(yearRain$yPRCP)
lines(xfit, yfit, col = “blue”, lwd = 2)
可以看出圖上的資料大致上呈正態分佈,說明這個城市70年來的降雨量還是比較正常的
既然已經知道這年降雨量的大致情況 ,那麼我們再進一步的瞭解這一年中的月份的降水量情況
sqldf(“select count(*) from dataSet group by RAIN”)
可以看出這70年來的降雨的天數與不降雨的天數大致比例是2:3也就是平均一年中大概150天在下雨
dataSet$month <- month(dataSet$DATE)
rainDataSet <- sqldf(“select * from dataSet where RAIN = 1”)
table(rainDataSet$month)
barplot(table(rainDataSet$month))
可以看出這近70年來每年的降雨量在11, 12, 1,3月份是比較多,而且可以看出這個城市的夏天明顯降雨量是比較少,會比較乾燥
問題1:是不是當月的降水天數越多, 當月降雨天的日降水量就越大
PRCPMax <- sqldf(“select PRCP from rainDataSet where month in (11, 12, 1)”)
nrow(PRCPMax)
table(cut(PRCPMax$PRCPmm, breaks = c(0, 10, 25, 50, 100, 200)))
nrow(PRCPMin)
table(cut(PRCPMin$PRCPmm, breaks = c(0, 10, 25, 50, 100, 200)))
圖中 PRCPMax是降水天數最多的月份11, 12, 1月份資料集合,PRCPMin是降水天數最少的月份7, 8, 9月份資料集合。可以看出這夏天這3個月的降水天數明顯少很多,也看出夏季日降水量小於25毫米天數比例的確實比冬季高,且降水量在10-25毫米天數比例明顯少於冬季
test1 <- c(PRCPMax$PRCPmm)
test2 <- c(PRCPMin$PRCPm)
wilcox。test(test1, test2, alternative = “greater”)
透過Wilcoxon秩檢驗我們發現p-value遠小於0。05,的確11, 12, 1月份日降水量的確大於7, 8, 9月份
問題2:降水對溫度是否有影響(我們取1949年-2017年的全部8月份的資料比較,因為夏天氣溫比較高,降雨對氣溫的影響會比較明顯)
rainDataSet$year <- year(rainDataSet$DATE)
PRCPAugust <- rainDataSet[which(rainDataSet$month == “8”), c(“PRCP”, “year”)]
TMAXAugust <- rainDataSet[which(rainDataSet$month == “8”), c(“TMAX”)]
dataSetAugust <- data。frame(PRCPAugust, TMAXAugust)
names(dataSetAugust) <- c(“PRCP”, “year”, “TMAX”)
attach(dataSetAugust)
plot(TMAX ~ PRCP, main=“當天的降雨量與最高溫度的散點圖”, xlab=“降水量(英寸)”, ylab=“最高溫度(華氏度)”)
abline(lm(TMAX ~ PRCP))
summary(lm(TMAX ~ PRCP))
從圖形上看, 溫度會隨著降水量的增加而下降
從資料的迴歸分析上看, 引數確實是高度顯著,也就是降雨量與溫度的確存在某種關係。但是我們也應該注意到Multiple R-squared=0。06059,這也說明了降水量和溫度的線性關係並不是很強
問題3:年降水量是不是在逐年增加還是逐年降少
attach(yearRain)
plot(year, yPRCP,)
summary(lm(yPRCP ~ year))
從散點圖 除了1980-1990這10年的降水量比較少, 基本上其他年份並沒很明顯的變化趨勢
Q-Q圖可以看其圖形基本上是呈一條直線,這也說明了總體上降水量處於正態分佈,即便是算上降水量比較少的10年,也是在合理的範圍內
問題4:是不是天氣越來越熱了呢(我們獲取沒有無降水天的資料,因為降水可能會降低溫度,影響資料)
unRainDataSet <- sqldf(“select * from dataSet where RAIN = 0”)
PRCPMedian <- sqldf(“select median(TMAX), year from unRainDataSet group by year”)
names(PRCPMedian) <- c(“TMAX”, “year”)
plot(TMAX ~ year, data = PRCPMedian)
可以看出在2010年前,每年的溫度總體上是比較平衡的趨勢, 在進入2010年後,溫度有一個比較明顯的上升趨勢
PRCPMedian <- PRCPMedian[order(PRCPMedian$TMAX, decreasing = T), c(“TMAX”, “year”)]
row。names(PRCPMedian) <- c(1:70)
這是我們對每年溫度做一個排名,可以看出在前12名中2010年後的年份佔據了4個,而且溫度最高的年份是2017年和2016年,貌似現在的天氣正變得越來越熱了
最後我們在分析下在過去剛剛結束的2017年裡, 這座城市的氣候狀況
states2017 <- sqldf(“select * from dataSet where date >= ‘2017-01-01’ and date <= ‘2017-12-31’”)
sum(states2017$PRCP)
max(states2017$TMAX)
min(states2017$TMIN)
可以看出這一年裡的總降水量為43。55英寸(約為1106。17毫米),最高溫度華氏96度(35。5攝氏度),最低溫度是20華氏度(-6。66攝氏度)
wencha <- states2017$TMAX-states2017$TMIN
wencha2017 <- data。frame(c(1:348), wencha)
names(wencha2017) <- c(“day”, “wencha”)
plot(wencha2017$wencha2017 ~ wencha2017$day)
可以看在橫座標150-275這段時間對應的縱座標比較大,折算一下也就是說從6月到9月這夏季的四個月溫差比較大的