# This R environment comes with all of CRAN preinstalled, as well as many other helpful packages
# The environment is defined by the kaggle/rstats docker image: https://github.com/kaggle/docker-rstats
# For example, here's several helpful packages to load in 

library(ggplot2) # Data visualization
library(readr) # CSV file I/O, e.g. the read_csv function
library(data.table)
library(Metrics)
library(dplyr)
library(knitr)
# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory

#system("ls ../input")

# Any results you write to the current directory are saved as output.
#n = 15e6

train = fread("../input/train.csv", 
              select = c("Semana", "Cliente_ID", "Producto_ID", "Agencia_ID", "Demanda_uni_equil"))
              
sample_idx <- sample(nrow(train), nrow(train)*0.8)
data_train <- train[sample_idx, ]
data_test <- train[-sample_idx, ]

rm(train)
#val = train[train$Semana == 9]
#train = subset(train, Semana == 3 | Semana == 4 | Semana == 5 |Semana == 6 |Semana == 7 | +
#    Semana == 8)
    
#mysample <- train[sample(1:nrow(train), 100, replace=FALSE),]

#mysample

#y = data_train$Demanda_uni_equil
#mean_demand = mean(y)
#median_demand = median(y)
#log1p_mean = expm1(mean(log1p(y)))

y_val = data_test$Demanda_uni_equil
#results = c(rmsle(y_val, mean_demand), rmsle(y_val, median_demand), rmsle(y_val, log1p_mean))
#names(results) = c("mean", "median", "log1p_mean")
#kable(as.data.frame(results))
#barplot(results, main = "RMSLE by method on test set", ylab = "RMSLE", space = 0.1)


grouped_val = data_train[, .(mean = mean(Demanda_uni_equil),
          median = median(as.double(Demanda_uni_equil)), log1p_mean = expm1(mean(log1p(Demanda_uni_equil)))), by = c("Cliente_ID", "Producto_ID", "Agencia_ID")] %>% 
    merge(data_test, all.y = TRUE, by = c("Producto_ID","Cliente_ID","Agencia_ID"))
    
mask = !(is.na(grouped_val$mean))
y_val = grouped_val$Demanda_uni_equil[mask]
results = c(rmsle(y_val, grouped_val$mean[mask]), 
            rmsle(y_val, grouped_val$median[mask]),
            rmsle(y_val, grouped_val$log1p_mean[mask]))
names(results) = c("mean", "median", "log1p_mean")

kable(as.data.frame(results))
barplot(results, main = "RMSLE by method grouped by Product, Client, Agency", ylab = "RMSLE", space = 0.2)