博客內容簡介及目錄 http://www.cnblogs.com/weibaar/p/6644261.html
紀念一下,在心心念念想從會計本科轉為數據分析師快兩年后,近期終於邁出了使用R的第一步,在參考他人的例子前提下,成功寫了幾行代碼。用成本的角度來說,省去了部門去買昂貴的數據分析軟件的金錢和時間,而對自己來說,則是在數據分析又邁出了一步,往經濟寬裕又邁出了一步,往財務自由又邁出了一步,不得不寫個隨筆紀念一下。
以及,有時候,入門真的沒有想象中困難,關鍵是要找到入門的方法,一竅通,百竅通。
以下為代碼。簡而言之就是寫了一個時間序列預測的代碼,包括完整的數據導入,數據處理和數據輸出過程。加載了forecast包,應用了auto.arima函數。
1 rawdata<-read.table("file.csv",header=TRUE,sep=",") 2 library(forecast) 3
4 5 Rawdata_Grand.Total=rawdata$Grand.Total 6 TS_Grand.Total=ts(Rawdata_Grand.Total,start=2011,frequency=12) 7 Arima_Grand.Total<-auto.arima(TS_Grand.Total,trace=T) 8 Forecast_Grand.Total<-forecast(Arima_Grand.Total,h=12,fan=T) 9 Forecast_Grand.Total$Mean 10 Mean_Grand.Total<-Forecast_Grand.Total$mean[3-14] 11 Lower_Grand.Total<-Forecast_Grand.Total$lower 12 Lower_Grand.Total_96=Lower_Grand.Total[3-14,16] 13 Upper_Grand.Total<-Forecast_Grand.Total$upper 14 Upper_Grand.Total_96=Upper_Grand.Total[3-14,16] 15 Result_Grand.Total<-data.frame(Mean_Grand.Total,Lower_Grand.Total_96,Upper_Grand.Total_96) 16 write.csv(Result_Grand.Total,'result.csv')
解決問題中學會幾點:
1)有的R沒有forecast的包,這一般是因為R版本太低導致的,可以到CRAN上去具體搜這個包的名字,看看版本要求。一般升級R既可以解決(吐槽:R的升級竟然要重新安裝包!太不智能了!不過R在一個系統里可以安裝N個版本,也很神奇)
2)關於數據載入,最方便的還是read.table引入csv格式,這里空格會變成.,注意標題清理。以及R對大小寫的要求超級高……
3)時間序列轉換,用ts(data,start=xxxx,frequency=12)可以自動生成月度數據,超級方便。
4)forecast包很萬能,有auto.arima可以自動擬合函數,然后forecast可生成觀測值,這里我選的是12.然后fan=T(生成一堆預測值),fan=F,生成80%,95%置信區間預測值。
5)forecast生出的那個結果包,表面上生成的是各個置信區間的值,實際上……實際上生成了一個對象,當使用attributes查看時,出來了以下
> attributes(Forecast_Grand.Total)
$names [1] "method" "model" "level" "mean" "lower" "upper" [7] "x" "xname" "fitted" "residuals"
$class [1] "Forecast_Grand.Total"
所以之前我花了很大精力,想直接調用forecast生成的那個預測值以及96置信區間,最后都失敗了。最后使用attributes查看后,再用$引用即可了,然后取1-12,第16列等,不知道是否有更簡便的方法。
6)r直接輸出為csv實在太爽!就是不知道有沒有R合並各個文件的好方法,不然太糟心。
隨文附上數據,已經做模糊化處理,不要太講究數據質量
20900,18100,21100,21100,24800,24000,27200,29600,30100,33800,37900,36500,34900,34300,34700,36400,44300,37800,47100,45900,47800,51500,56300,52500,60600,54000,55900,52500,54500,51700,56400,62700,63400,65000,73500,72600