[一天一點R]-1.時間資料前處理(1)

純日期(Date)

Mora chen
6 min readAug 2, 2018

一天R一點緣起

統計起家的我,R是我第一次接觸的資料分析語言,現在語言越來越多元,常常有時候,有一段時間沒寫 R,就很容易忘掉一些語法,雖說現在網路搜尋技術越來越好,只要關鍵字下的對,就不會找不到資料,尤其是現在最紅的資料分析語言,然而,雖然容易找到資料,同時資料量也隨之增大,需要更多時間來過濾資料的可用性與正確性,因此,萌生慢慢累積自己的筆記腦來降低大腦的負荷量,同時,也想嘗試透過這樣的方式,更精進與提高自己資料分析的效率,期望以一天一點的方式呈現,才能夠長時間的累積下去。

Photo by Charles Deluvio 🇵🇭🇨🇦 on Unsplash

不同時間區間,資料特性會有所變化

大數據,大數據除了變數變多以外,時間不斷的積累下,數據量也越來越多,很多時候,不同時間區間下,資料的特性會有很明顯的變化,例如冰品的銷售,冬天與夏天截然不同,因此,時間變數幾乎是每一個資料集中必有的變數。

時間資料型態分類

R的時間資料型態分類,可以分為三種,

(1)純日期(Date)

(2)日期+時間(Date+time)

(3)日期+時間+時區(Date+time+ timezone)

三種不同的時間資料型態,有各自擅長處理的語言,

今天的R一點,以純日期(Date)為主。

統一時間資料格式:as.Date()

通常,從csv、spss、sql近來的時間資料格式不一定相同,因此,要先統一不同資料來源的時間資料型態,首選是 as.Date{ x:character data}的這個函數,此函數包含在base這個package中,R裡面的package就如同其他語言的libaray,一般的時間資料格式的輸出習慣以破折號和斜線為主(dashes or slashes)為主,例如2013年2月14日,會以2014/02/04、2014/2/4、2014-02-04或2014–2–4以上這四個寫法居多,這四種時間資料格式的寫法,as.Date都能處理。

as.Date(“2014/02/04”)
[1] “2014–02–04”
as.Date(“2014/2/4”)
[1] “2014–02–04”
as.Date(“2014–2–4”)
[1] “2014–02–04”
as.Date(“2014–02–04”)

如果很不巧的,你拿到的資料型態是很特殊的,以2014年2月14號為例,如果資料呈現為14/2/2014比較特殊的時間資料格式,設計下圖的對應表,讓處理時間資料格式更有彈性。

https://www.statmethods.net/input/dates.html
as.Date(‘2/14/2014’,format=’%m/%d/%Y’)
[1] “2014–02–14”
as.Date(‘02/14/2014’,format=’%m/%d/%Y’)
[1] “2014–02–14”

取現在的時間

撰寫演算法時,我們常常會需要計算執行模組所需的時間,透過Sys.Date()這個函數,可以回傳今天的日期,date()則是回傳現在的日期與時間。

> Sys.Date( )
[1] “2018–08–02”
> date()
[1] “Thu Aug 02 23:00:44 2018”

因此,就能得知我寫這一篇文章的時間為2018年8月2號晚上11點整。

取兩個日期的天數差

Sys.Date() -as.Date(“1970–01–01”)Time difference of 17745 days

時間的加減

如果你想知道40天候是幾月幾日,就可以直接+40就行囉~

所以這邊要注意,as.Date的單位是"天"。

>as.Date(Sys.time())+40[1]“2018–09–12”

取出時間的年份、月份、星期?

如果我們要呈現的是歷年的趨勢變化,每個月的變化,一周的變化等,
這時,我們就必須從時間資料變數中萃取出年分、月與星期的資訊,然而as.Date所轉出的資料格式,能萃取出星期,但卻無法萃取出年分與月份,透過weekdays這個函數,我們就可以知道2014年2月14號是星期五囉~

> weekdays(as.Date(‘2014–02–14’))
[1] “星期五”

雖然這個資料格式使用上很簡單,但是卻無法萃取出年與月的資訊

因此,或許有更全面性的函數來進行時間資料格式的處理,
就改天再來介紹囉~

小提醒,上面的程式碼如果要貼在R code裡面,要注意的地方 :

> as.Date(“1970–01–01”)
Error in charToDate(x) :
character string is not in a standard unambiguous format

有時候是因為從另一個地方貼到R產生的錯誤,-重打就行囉~~

希望透過這樣的紀錄與分享,大家在資料科學領域一起精進,
如果內容上有錯誤的地方或者可以更好的地方,在請大家多多指教囉~

參考資料:

1.https://www.stat.berkeley.edu/~s133/dates.html

2.https://www.statmethods.net/input/dates.html

--

--

Mora chen

資料科學家與生活實踐者,心理學是我的興趣,期許自己能透過資料、心理與烹煮讓生活與世界更美好,逐步累積,https://morachen.netlify.com/