R語言關於時間格式轉化爲數值的解決方案

好了,在前一篇文章中,我們將數據集轉化爲numeric格式,以便於在實際工作中預測投資者是否再次投資。

不過上次的數據集轉化,將時間格式全部轉化爲了NA,導致預測準確率下降了約5%(因爲失去了時間早晚這個維度),我們今天就來講一下如何將數據集中的時間變量轉化爲numeric格式。


首先我們先回憶一下將時間變量轉化爲numeric格式的難點:

因爲讀入數據集的時候,所有數據都是以factor格式存儲,如果直接用as.numeric函數轉化時間,會發生一個奇特的現象——時間順序被打亂,我這邊數據集的情況如下:


直接使用as.numeric函數轉化時間,出現下圖:


請問它的規律在哪裏?!恕我眼拙,看了半天沒明白它轉化爲數值的主要邏輯,不得已,我只有回去繼續找可能實現的路徑。

後來知道factor型變量直接轉化爲數值會出現這樣的問題,那麼我不用factor變量轉化,先用character變量轉化再轉化爲numeric行麼?嘗試如下:


使用as.character函數轉化沒有問題,但是再進行as.numeric函數轉化就出現問題了!具體如下:


所有時間變量全變成了NA!你大爺的!那我辛辛苦苦轉化時間變量爲了啥?!

好,從頭再來!這次我總結了教訓,決定先把時間變量以時間的形式存儲起來,然後再來進行as.numeric函數轉化,看看會不會出現問題?嘗試如下:


上面的函數直接使用as.date就行,接下來我們看看是否能使用as.numeric函數轉化(因爲我們的主要目的是保存時間變量的先後順序,而不是絕對值,所以這裏我們沒有考慮絕對時間的對錯問題),如下圖:


大家可以看到,時序是正確的,如果不清楚,我在數值上加上720000就看的很清楚了!如下圖:


好了,這樣就可以知道,距離我們越近的時間,數值越大,這個變量就能精準的表達時間遠近了!到此爲止,這個數據集的基礎清洗就完畢了!附上我的部分代碼:

library(rJava)
library(xlsxjars)
library(xlsx)
library(Matrix)

data<-read.xlsx('G:/數據文件//建模分析/0718/33.xlsX',1,encoding = 'UTF-8',header=T)
#對數據集進行字符化處理以便進行替換,原數據集數據類型爲factor
data[] <- lapply(data, as.character) 
#將數據集中‘NA’數據替換爲0
data[is.na(data)]<-0
#將數據集中‘是’數據替換爲1
data[data=='是']<-1
#將數據集中‘pc’數據替換爲1
data[data=='pc']<-1
#將數據集中‘wap’數據替換爲2,雙引號和單引號意義相同
data[data=="wap"]<-2
#將數據集中‘ios’數據替換爲3
data[data=='ios']<- 3
#將數據集中‘android’數據替換爲4
data[data=='android']<- 4
#將數據集中‘新手專享’數據替換爲1
data[data=='新手專享']<-1
#將數據集中‘直投散標’數據替換爲2
data[data=='直投散標']<-2
#將數據集中‘定期寶’數據替換爲3
data[data=='定期寶']<-3
#將數據集中‘雙收計劃’數據替換爲4
data[data=='雙收計劃']<-4
#將數據集中‘新手標’數據替換爲5
data[data=='新手標']<-5
#將數據集中‘register_time’列數據轉換爲時間格式
data$register_time<-as.Date(data$register_time)
#將數據集中‘first_invest_time’列數據轉換爲時間格式
data$first_invest_time<-as.Date(data$first_invest_time)
#將數據集整體轉化爲數據格式,方便後續做xgboost模型
data[] <- lapply(data, as.numeric) 
#將數據集中的時間變量轉化爲正數
data$register_time<-data$register_time+720000
data$first_invest_time<-data$first_invest_time+720000

data[1:10,]


發佈了24 篇原創文章 · 獲贊 16 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章