Guest User

Untitled

a guest
Oct 3rd, 2016
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.86 KB | None | 0 0
  1. ## 這是UI的部分
  2.  
  3. shinyUI(fluidPage(
  4.  
  5. # Application title
  6. titlePanel("Inventory Replenishment Alarming System"),
  7.  
  8. # Sidebar with a slider input for number of bins
  9. sidebarLayout(
  10. sidebarPanel(
  11. fileInput ("file1","上傳庫存表格-限CSV格式"),
  12. hr(),
  13. fileInput("file2","上傳銷售表格-限CSV格式"),
  14. hr(),
  15. sliderInput("conservativepara","保守係數",0.5,1,step = 0.1,value = 0.7),
  16. actionButton("act","Run"),
  17. hr(),
  18. downloadButton("donwloadfile","Download")
  19.  
  20. ),
  21.  
  22. # Show a plot of the generated distribution
  23. mainPanel(
  24. dataTableOutput("contents")
  25. )
  26. )
  27. ))
  28.  
  29.  
  30. ## 這是 server的部分
  31.  
  32. shinyServer(function(input, output) {
  33.  
  34. options(shiny.maxRequestSize=30*1024^2)
  35.  
  36. #依前端送來的路徑將資料讀入
  37.  
  38. datafile <- eventReactive(input$act,{
  39. if (is.null(input$file1) | is.null(input$file2) ) {return(NULL)}
  40. tmpdata1 <- read.csv(input$file1$datapath,stringsAsFactors = FALSE)
  41. tmpdata2 <- read.csv(input$file2$datapath,stringsAsFactors = FALSE)
  42. tmpdata2[!tmpdata2$訂單日期=="",] -> rawraw
  43. mapvalues(tmpdata2$訂單號碼,rawraw$訂單號碼,rawraw$訂單日期) -> tmpdata2$訂單日期
  44.  
  45. # 排除預購字眼避免重複計算商品
  46.  
  47. str_replace_all(tmpdata1$商品名稱,"(\\[預購\\])|【預購】","") %>% trimws -> tmpdata1$商品名稱
  48. str_replace_all(tmpdata2$商品名稱,"(\\[預購\\])|【預購】","") %>% trimws -> tmpdata2$商品名稱
  49.  
  50. # 替換變數名稱以利後續的操作
  51.  
  52. colnames(tmpdata2)[colnames(tmpdata2)=="商品名稱"] <- "itemname"
  53. colnames(tmpdata2)[colnames(tmpdata2)=="選項"] <- "spec"
  54. colnames(tmpdata2)[colnames(tmpdata2)=="訂單日期"] <- "orderingdate"
  55. colnames(tmpdata1)[colnames(tmpdata1)=="商品名稱"] <- "itemname"
  56. colnames(tmpdata1)[colnames(tmpdata1)=="選項"] <- "spec"
  57. colnames(tmpdata1)[grep("庫存",colnames(tmpdata1))] <- "Remain"
  58. colnames(tmpdata1)[grep("商店貨號",colnames(tmpdata1))] <- "itemid"
  59.  
  60. # 合併資料
  61.  
  62. tmpdata2 %>% group_by(orderingdate,itemname,spec) %>% summarise(itemsales = sum(數量) ) -> Salesdata
  63. spread(Salesdata,key = "orderingdate",value = "itemsales") -> Salesmerge
  64. tmpdata1 %>% select(itemid,itemname,spec,Remain) -> Stockingmerge
  65. merge(Stockingmerge,Salesmerge,by=c("itemname","spec")) -> AlarmingBase
  66. apply( AlarmingBase,1,function(k) { k %>% .[-1:-4] %>% as.numeric } ) %>% t -> buyingmatrix
  67. buyingmatrix[is.na(buyingmatrix)] <- 0
  68. AlarmingBase %>% select( 1 : 4 ) -> AlarmingBase
  69.  
  70.  
  71. # 將產品做分類
  72.  
  73. AlarmingBase[grepl("戒指|對戒|戒組|尾戒|關節戒|連指戒|情侶戒|三件戒|開口戒",AlarmingBase$itemname),"category"]<-"戒指"
  74. AlarmingBase[grepl("耳環|耳針|耳扣|耳夾",AlarmingBase$itemname),"category"]<-"耳環"
  75. AlarmingBase[grepl("項鍊|鎖骨鍊|頸鍊|頸圈",AlarmingBase$itemname),"category"]<-"項鍊"
  76. AlarmingBase[grepl("手鍊|手環|手鐲",AlarmingBase$itemname),"category"]<-"手鍊"
  77. AlarmingBase[grepl("髮飾|髮帶|髮圈|髮夾|髮箍",AlarmingBase$itemname),"category"]<-"髮飾"
  78. AlarmingBase[grepl("手錶",AlarmingBase$itemname),"category"]<-"手錶"
  79. AlarmingBase[grepl("刺青貼紙",AlarmingBase$itemname),"category"]<-"刺青貼紙"
  80. AlarmingBase[grepl("墨鏡",AlarmingBase$itemname),"category"]<-"墨鏡"
  81. AlarmingBase[grepl("腳鍊",AlarmingBase$itemname),"category"]<-"腳鍊"
  82. AlarmingBase[is.na(AlarmingBase$category),"category"]<-"其它"
  83.  
  84. AlarmingBase[grepl("Gold",AlarmingBase$spec),"color"] <- "Gold"
  85. AlarmingBase[grepl("Black",AlarmingBase$spec),"color"] <- "Black"
  86. AlarmingBase[grepl("Pink",AlarmingBase$spec),"color"] <- "Pink"
  87. AlarmingBase[grepl("Yellow",AlarmingBase$spec),"color"] <- "Yellow"
  88. AlarmingBase[grepl("Blue",AlarmingBase$spec),"color"] <- "Blue"
  89. AlarmingBase[grepl("Red",AlarmingBase$spec),"color"] <- "Red"
  90. AlarmingBase[grepl("White",AlarmingBase$spec),"color"] <- "White"
  91. AlarmingBase[grepl("Brown",AlarmingBase$spec),"color"] <- "Brown"
  92. AlarmingBase[grepl("Purple",AlarmingBase$spec),"color"] <- "Purple"
  93. AlarmingBase[grepl("Orange",AlarmingBase$spec),"color"] <- "Orange"
  94. AlarmingBase[grepl("Rose Gold",AlarmingBase$spec),"color"] <- "Rose Gold"
  95. AlarmingBase[grepl("Gray",AlarmingBase$spec),"color"] <- "Gray"
  96. AlarmingBase[grepl("Green",AlarmingBase$spec),"color"] <- "Green"
  97. AlarmingBase[grepl("Silver",AlarmingBase$spec),"color"] <- "Silver"
  98. AlarmingBase[grepl("Gold",AlarmingBase$spec),"color"] <- "Gold"
  99. AlarmingBase[is.na(AlarmingBase$color),"color"] <- "No Show or rare color"
  100.  
  101.  
  102. # 對要進行隨機森林的變數進行調整
  103.  
  104. data.frame () -> ramdata
  105. for (i in 14 : 31) {
  106. data.frame(
  107. category = factor (AlarmingBase$category ),
  108. color = factor (AlarmingBase$color ),
  109. recent3 = apply(buyingmatrix,1,function(k) { k[ ( i - 9) : ( i - 7 ) ] %>% sum } ),
  110. recent7 = apply(buyingmatrix,1,function(k) { k[ ( i - 13 ) :( i - 7 ) ] %>% sum } ),
  111. target = apply(buyingmatrix,1,function(k) { k[ ( i - 6) : i ] %>% sum } )
  112. ) -> shorttermdata
  113. rbind(ramdata,shorttermdata) -> ramdata
  114. }
  115.  
  116. data.frame(
  117. category = factor (AlarmingBase$category),
  118. color = factor (AlarmingBase$color),
  119. recent3 = apply(buyingmatrix,1,function(k) { k[ (length(k) - 2) : (length(k) ) ] %>% sum } ),
  120. recent7 = apply(buyingmatrix,1,function(k) { k[ (length(k) - 6) : (length(k) ) ] %>% sum } )
  121. ) -> predata
  122.  
  123. # 進行隨機森林模型訓練
  124.  
  125. randomForest(target ~ ., data = ramdata , type = "regression" ) -> myway
  126. predict(myway,newdata = predata) * input$conservativepara -> AlarmingBase$future14
  127. ifelse(AlarmingBase$Remain < AlarmingBase$future14, "Run out" , "Stayed") -> AlarmingBase$Replenishment
  128.  
  129. # 排除官網上沒有的品項
  130.  
  131. paste0("http://www.bonnyread.com.tw/products?page=",1:100) -> klist
  132. sapply(klist,function(k) { k %>% GET %>% content(encoding = "UTF-8") %>%
  133. xml_find_all("//div[@class='title text-primary-color']") %>% xml_text(trim = TRUE)}) %>% unlist -> namelist
  134. str_replace_all(namelist,"(\\[預購\\])|【預購】","") -> namelist
  135. AlarmingBase[AlarmingBase$itemname %in% namelist,] -> AlarmingBase
  136.  
  137. # 輸出報表
  138.  
  139. AlarmingBase %>% select (-color,-category) %>% filter( !Remain == 0 ) -> AlarmingBase
  140. data.frame(AlarmingBase)
  141.  
  142.  
  143. } )
  144.  
  145.  
  146. output$contents <- renderDataTable({
  147. datafile()
  148.  
  149.  
  150. })
  151.  
  152. output$downloadfile <- downloadHandler(
  153. filename = function() {
  154. paste('replenishment', 'csv', sep='.')
  155. },
  156. content = function(file) {
  157. write.csv(datafile(), file)
  158. }
  159. )
  160.  
  161.  
  162. })
Advertisement
Add Comment
Please, Sign In to add comment