For the last few months I have been working on turning some previous work into an R package
marketr. I needed to learn a quite a bit to develop it as a working package posted to GitHub; and in turn, do even more to get it on to CRAN. Once you understand the end product there are a lot of things I could have done differently in the development to help next time.
devtools package gives a lot of great feedback to prepare you for CRAN submission. I ended up submitting to CRAN and only having to make some fairly minor changes to then get acceptance of the package in my second submission.
I developed the code behind
marketr in order to save myself time when doing ad hoc calculations of marketing metrics along different dimensions. My team at that time had some standard hierarchical reporting but we were supplementing that with analysis of other slices of the data— going deeper, or grouping by multiple dimensions.
marketr allows me to quickly do these calculations with whatever combination of dimensions I specify.
Putting it into a package helped ensure consistency of calculation, especially for others who were inexperienced R users. They no longer needed to try and adapt my code, or have the possibility of the calculation being incorrect.
marketr is useful regardless of your speed or experience with R if you are working with these metrics.
Below I’ve adapted some of the material from the README and vignette to explain what the package does and show how it does it. Visit the GitHub to learn more or contribute.
Introduction to marketr
marketr facilitates tidy calculation of popular quantitative marketing metrics (like Customer Experience Index and Net Promoter Score). By “tidy”, I am referring to the usage of the tidyverse packages and methodology for organizing and analyzing data. The package is designed so that beginning R users can calculate these metrics, along many dimensions, without needing to learn much R syntax. It is also helpful for more experienced programmers to do these calculations quickly.
install.packages("marketr") provides the current verision from CRAN.
The development version can be installed from GitHub:
Generate survey response data
To demonstrate the basic usage I will create simulated survey response data.
emotion are the columns that make up CXi;
nps_question is used for NPS;
months will show how these metrics can be calculated along categorical features and/or trended over time.
## Warning: package 'dplyr' was built under R version 3.5.3
## ## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats': ## ## filter, lag
## The following objects are masked from 'package:base': ## ## intersect, setdiff, setequal, union
library(magrittr) library(ggplot2) needs <- sample(2:5, 1000, replace = T) ease <- sample(2:5, 1000, replace = T) emotion <- sample(2:5, 1000, replace = T) nps_question <- sample(3:10, 1000, replace = T) grps <- c("a", "b", "c") months <- sample(1:12, 1000, replace = T) survey_data <- tibble::as_tibble(cbind(needs, ease, emotion, nps_question, grps, months)) %>% mutate(month = as.numeric(months))
## Warning in cbind(needs, ease, emotion, nps_question, grps, months): number ## of rows of result is not a multiple of vector length (arg 5)
## # A tibble: 6 x 7 ## needs ease emotion nps_question grps months month ## <chr> <chr> <chr> <chr> <chr> <chr> <dbl> ## 1 5 3 4 7 a 4 4 ## 2 5 2 5 5 b 9 9 ## 3 2 4 4 6 c 11 11 ## 4 3 3 4 5 a 1 1 ## 5 4 2 3 3 b 5 5 ## 6 2 2 2 10 c 9 9
Customer Experience Index (CXI) was developed by Forrester. Per Forrester, CXi “measures how successfully a company delivers customer experiences that create and sustain loyalty.”
It involves scoring three questions, each with a likert scale response, and then averaging those scores together. Below, four calculations are done using two different functions.
# Overall CXi cxi_calc(survey_data) %>% knitr::kable()
## CXi by group cxi_calc(survey_data, grps, cx_high = 4, cx_low = 2) %>% knitr::kable()
# Overall CXi trend cxi_trend(survey_data, month) %>% knitr::kable()
# Overall CXi trend by group - plotted cxi_trend(survey_data, month, grps, cx_high = 4, cx_low = 2, min_surveys = 1, avg_surveys = 0) %>% ggplot(aes(x = month, y = cxi)) + geom_line() + facet_wrap(grps ~ ., nrow = 3)
## Joining, by = "grps"Joining, by = "grps"
Net Promoter Score (NPS) was originally developed by Fred Reichheld and now is owned by Bain Company and Satmetrix Systems. The Wikipedia page is another good source of information. According to Wikipedia it “is a management tool that can be used to gauge the loyalty of a firm’s customer relationships.”
The calculation requires a single question with a ten-point scale. Like CXi it is not difficult to do manually; the package enables deeper analysis.Below, four calculations are done using two different functions.
# Overall NPS nps_calc(survey_data) %>% knitr::kable()
## NPS by group nps_calc(survey_data, grps) %>% knitr::kable()
# Overall NPS trend nps_trend(survey_data, month) %>% knitr::kable()
# Overall NPS trend by group - plotted nps_trend(survey_data, month, grps, min_surveys = 1, avg_surveys = 0) %>% ggplot(aes(x = month, y = nps)) + geom_line() + facet_wrap(grps ~ ., nrow = 3)
## Joining, by = "grps"Joining, by = "grps"