#---------------------------------------------------------------------------------------------#
cat("Setting up Enviornment\n")
library(data.table)
library(dplyr)
PATH = "../input/"
#---------------------------------------------------------------------------------------------#
#---
#---
#---
#---------------------------------------------------------------------------------------------#
cat("Load train data\n")
train <- train <- fread(paste0(PATH, "train.csv"), sep=",", na.strings="", skip=124035160,
                        col.names=c("id","date","store_nbr","item_nbr","unit_sales","onpromotion"))
train[,":="(unit_sales = log1p(ifelse(unit_sales>0,unit_sales,0))
            ,id = NULL
            ,onpromotion = as.numeric(onpromotion)
            ,date = as.Date(date)
            )]
#---------------------------------------------------------------------------------------------#
#---
#---
#---
#---------------------------------------------------------------------------------------------#
cat("Filling in missing train items")
#Get unique information
u_dates <- unique(train$date)
u_stores <- unique(train$store_nbr)
u_items <- unique(train$item_nbr)
#Make every item/store/date combination possibility
all_combos <- expand.grid(u_dates,u_stores,u_items) %>% as.data.table()
colnames(all_combos) <- c("date","store_nbr","item_nbr")
#Fill in gaps of train
not_in_train <- all_combos %>% anti_join(train, by=c("item_nbr","store_nbr","date"))
train <- rbindlist(list(train, not_in_train), use.names=TRUE, fill=TRUE) %>% as.data.table()
#Fill in NAs
train[is.na(unit_sales), unit_sales := 0]
train[is.na(onpromotion), onpromotion := 0]
#---------------------------------------------------------------------------------------------#
#---
#---
#---
#---------------------------------------------------------------------------------------------#
cat("Calculating Means")
train <- train %>% group_by(item_nbr,store_nbr,onpromotion) %>% 
                summarise(
                  unit_sales = expm1(mean(unit_sales))
                )
#---------------------------------------------------------------------------------------------#
#---
#---
#---
#---------------------------------------------------------------------------------------------#
cat("Making submission")
test <- fread(paste0(PATH, "test.csv"), sep=",", na.strings = "")
test[,":="(onpromotion = as.numeric(onpromotion)
          #,date = as.Date(date)
          )]
test <- test %>% left_join(train, by=c("item_nbr","store_nbr","onpromotion")) %>% 
                select(id, unit_sales) %>% as.data.table()
test[is.na(unit_sales), unit_sales := 0]
write.table(test, "submission.csv", sep=",", dec=".", quote=FALSE, row.names=FALSE)
#---------------------------------------------------------------------------------------------#
