# CTR by Artist, by Year

CTR.by <- function(byCol=NULL, value=NULL, Group=c(byCol, value)) {
  byGrp <- c("Year", byCol)
  ret <- fbAdds[, list("CTR" = 100*sum(Clicks) / sum(Impressions)), by=byGrp]

  # Error Check
  if (!is.null(value) & !is.null(byCol))
    stop("One of `value` or `byCol` must be left as NULL.")
  if (!all(is.character(c(byCol, value))))
    stop("`byCol` // `value` should be character")

  if(!is.null(value))
    ret[, "Name" := value]
  else
    setnames(ret, byCol, "Name")

  ## Add a column to indicate which grouping (for when rbind'd)
  ret[, "Group" := Group]  # note that one of these are going to be NULL

  setcolorder(ret, c("Year", "Name", "Group", "CTR"))
}


CTR_byArtist_year <- CTR.by("Name", Group="Artist")
CTR_byType_year <- CTR.by("Type")
CTR_yearlyAvg <- CTR.by( value="Avg for Year") 

CTRData <- rbindlist(list (CTR_yearlyAvg , CTR_byType_year , CTR_byArtist_year))

## Round Off
CTRData[, CTR := round(CTR, 3)]

# Group column, fix
CTRData[, Group := factor(Group, levels=c("Avg for Year", "Type", "Artist"))]
# fctrOrder <- c("Avg for Year", setdiff(levels(CTRData$Group), "Avg for Year"))
# CTRData[, setFactorOrder(Group, fctrOrder)]
# CTRData$Group

setkey(CTRData, Year, Group, Name)
kv <- getKeyVals(CTRData)


# CTRData[, YearFactor := factor(Year)]
CTRData[, Year := as.num.as.char(Year)]
setkeyv(CTRData, names(kv))

require(ggplot2)

{
  ggplot(data=CTRData[!"Artist"], aes(color=Group)) + 
  geom_line(aes(x=Year, y=CTR)) + 
  geom_point(aes(x=Year, y=CTR), alpha=0.5)
}

{
  ggplot(data=CTRData[!"Artist"], aes(color=Name)) + 
    geom_line(aes(x=Year, y=CTR)) + 
    geom_point(aes(x=Year, y=CTR), alpha=0.5) + facet_grid(Group~.) + ylim(c(0,2))
}

plot.new()
CTRData[order(as.numeric(Group))]
setkey(CTRData, Group)

CTRData[!"Artist"]