iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0
AI & Data

機器學習_資料採礦_透過數據協助決策_R語言系列 第 7

[Day 7] 政府開放資料_計程車營運狀況調查_決策樹篇-2

  • 分享至 

  • xImage
  •  

調整變數,賦予決策樹更有正確的價值。
今天的幾個重點:
1.增加、刪減之前選取的變數。
2.把不應該是因子(factor)變數的,改成數型(numeric)型態。
3.驗證數據的正確性,把資料的百分之90當做traindata用來訓練電腦,百分之10當做testdata,進行驗證。( 小弟在做事後驗證跟即時監控的,這個很重要不能忽略 )#這個明天做

我們昨天的資料分析結果告訴了我:載客趟數多、行駛公里數越多則賺的多,難這些都不太算data mining成功,因為非常直觀,不過這些卻是"電腦AI"告訴我的!而不是我隨口瞎忽悠的,代表著這個mining看起來是很可行的。

https://ithelp.ithome.com.tw/upload/images/20181019/201116033K0hfdcve7.png

但是這兩個變數...不太算是人為可以控制的,因此我決定刪掉這兩個變數在運行一次,並且把我認為的數值變數從因子改回數型(numeric)型態。

這次的分析告訴了我,有無加入無線電或衛星派遣的確是會影響獲利的,經過Excel計算,如果我單論有加入者(2924人),平均一天獲利1798.5元,沒有的(3741人)則為1327.8。

在來就是營業時數,在"選擇開計程車之最主要原因"提到,很多人選擇開計程車的原因就是"營業時間較自由",因此這次的分析告訴我說,只要你願意花時間,就能夠提高收入(這我超有印象是我大學時代時的結論...,感覺也是沒啥用,但這的確是一個"人為"可以改變的變數)。
以下程式碼亂到不行,orz

library(tidyverse)
library(magrittr)

y = read.csv("C:\\Users\\Day 7 變數名稱關連.csv")
x = read.csv("C:\\Users\\Day 7 資料關連.csv")
xx = x
x[is.na(x)] = 0


i = 1
for(i  in c(1:length(x))){
  for_vlookup = y[,(i+1)]
  
  if(length(which(for_vlookup == "" )) !=0)
    for_vlookup = for_vlookup[-which(for_vlookup == "" )] %>% as.character()#擷取一整行然後扣掉空值
  a = 1:length(for_vlookup) #告訴我總共有多少變數
  #把每一行都轉換成一個VLOOKUP用的表格
  df1  = data.frame(
    x1 = c(as.numeric(as.character(for_vlookup[a[a%%2==1]])),0),
    x2 = c(as.character(for_vlookup[a[a%%2==0]]),0)
  )
  #每一行的資料
  df2  = data.frame(
    x1 =as.numeric(as.character(x[,i]))
  )
  #VLOOKUP 
  w =  df2 %>% inner_join(df1 , by = "x1")
  
  #如果遇到開放題,則放棄vlookup
  #取代掉原本的數字,變成方便閱讀的中文
  if(identical(for_vlookup,character(0))==F){ 
    xx[,i] = w[,2]
  }else{
    xx[,i] =  ifelse(xx[,i]==-1,0,xx[,i])
  }
  
}
View(xx)
q = read.csv("C:\\Users\\Day 5 資料.csv")[,45:49] ##把之前保險數拉出來
q[is.na(q)] = 0 
qq = apply(q,1,sum)

xx = xx %>% 
  mutate("保險數" = qq)



xx[,"每天空車時數"] = as.numeric(xx[,"每天空車時數"])
xx[,"年齡"] = as.numeric(as.character(xx[,"年齡"]))
xx[,"每月放假"] = as.numeric(xx[,"每月放假"])
xx[,"已行駛公里數"] = as.numeric(xx[,"已行駛公里數"])
xx[,"營業時數"] = as.numeric(xx[,"營業時數"])

taxi = xx 
library(rpart)
np = ceiling(0.1 * nrow(taxi)) #資料筆數
test.index = sample(1:nrow(taxi),np)
taxi.testdata = taxi[test.index,]
taxi.traindata = taxi[test.index,]

taxi.tree = rpart(一天營業總收入~.,data = taxi)


plot(taxi.tree);text(taxi.tree)

很感謝大家的追蹤、收藏跟點閱,只是每天上班額外的時間真的偏少(偶爾在上班的時候也會開寫啦>//<),所以常常交出一些看起來像半成品的東西,但這樣一天一天累積,我相信最後回頭統整的時候,還會是很有質量的。有感受到自己每天碰統計的時間越來越多,然後我最後會出幾篇整理好的版本,讓大家方便copy走使用的。


上一篇
[Day 6] 政府開放資料_計程車營運狀況調查_決策樹篇
下一篇
[Day 8] 政府開放資料_計程車營運狀況調查_簡單回歸
系列文
機器學習_資料採礦_透過數據協助決策_R語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言