Disclaimer

* I am sharing my personal views not the views of RenaissanceRe 
  or any of its subsidiary companies.
  
* Thought provoking only: The materials are provided for information 
  purposes only and are in summary form.
  
* This is not consulting: No representations or warranties are given. 
  If you want to use these ideas, hire a pro.
  
* This is not financial advice: No financial advice is being given 
  nor any recommendation to invest in any product. 
  
* Historical data is no assurance as to future results.

Source

Quick Survey

Most Common Programming Language in Business:

  • Reactive

  • Functional

  • REPL Environment

  • Business DSL

Spreadsheet Challenges

  • Commingle Data, Business Logic, and Presentation

  • Changing Data is Easy & Tracking Changes is Hard

  • Versioning: Q-End_2018-Q4_final4_revised.xlsx

  • Speed and Size

  • Reads Non-linearly

Data Science Workflow

JD’s Lemma:

To migrate Excel analysts to coding, help them be better at Excel first.

If you fail to migrate them to coding, you will at least have better Excel!

@cmastication

Corporations Are Sad Silos

Art by Allison Horst

How do Business Analysts See Themselves…

Tools AND Training Get Analysts Over the Line

JD’s Lemma:

To migrate Excel analysts to coding, help them be better at Excel first.

If you fail to migrate them to coding, you will at least have better Excel!

Build a Culture of Good Excel Hygiene

  • Not Stylistic - Let Marketing Own That

  • Principle Based:

    • Minimize Errors

    • Maximize Readability

    • Save Time

But that Coding Environment Though…

Friction!

Energy converted to heat:

\[E_{th}=\int _{C}\mathbf {F} _{\mathrm {fric} }(\mathbf {x} )\cdot d\mathbf {x} \ =\int _{C}\mu _{\mathrm {k} }\ \mathbf {F} _{\mathrm {n} }(\mathbf {x} )\cdot d\mathbf {x} \]

Source: https://en.wikipedia.org/wiki/Friction

How To Coexist?

Example Design Pattern:

library(tidyverse)
library(openxlsx)
wb <- loadWorkbook("iris_wb.xlsx")

Write & Save

writeDataTable(
  wb = wb,
  sheet = "iris_sheet",
  x = iris,
  startCol = 1,
  startRow = 1,
  tableStyle = "TableStyleLight9",
  tableName = "iris_table")
saveWorkbook(wb = wb,
             file = "iris_wb.xlsx",
             overwrite = T)

XKCD Assumptions:

Assumption:

All time is of equal value

Reality:

Certain windows of time are precious

XKCD Assumptions:

Assumption:

Current frequency of reporting = future freq

Reality:

Once automated, reports find new uses

XKCD Assumptions:

Assumption:

All time spent doing analytics is of equal utility

Reality:

Some tasks are so awful you just can’t even…

XKCD Assumptions:

Assumption:

Automated and manual workflows produce the same product

Reality:

Manual processes breed errors

Why R & Python?

Python - Existing Code, IT adoption

R - Powerful, Approachable, Workflow from Database to Output

Example R Table Output

df_cars  %>%
  filter(hp > 90) %>%
  group_by(cyl) %>%
  summarize(avg_hp = mean(hp)) %>%
  gt() %>%
  fmt_number(columns = vars(avg_hp), decimals = 1) %>%
  tab_header(title = "What a Pretty Table!")
What a Pretty Table!
cyl avg_hp
4 99.7
6 122.3
8 209.2

Example R Plotting

ggplot(df_cars, mapping = aes(x = as.factor(cyl), y = hp)) +
  geom_boxplot()

Example R Plotting

ggplot(df_cars, mapping = aes(x = disp, y = hp)) +
  geom_point()

Render Same Source Different Output

Render Same Source Different Output

Different Languages in R Markdown

```{python}
x = 'hello, python world!'
x.split(' ')
```
## ['hello,', 'python', 'world!']
```{r}
py$x
```
## [1] "hello, python world!"

Different Languages in R Markdown

```{r}
py$x <- 'Updated in R'
```
```{python}
x.split(' ')
```
## ['Updated', 'in', 'R']

What’s the Point?

  • Excel is Your Most Used Programming Language

  • Lower the Friction to Helping Business Users Adopt Additional Tools

  • Don’t Boil the Ocean: 10% Improvement

  • Business, Automate Yourself

Art by Allison Horst: @allison_horst

All drawn digitally with Procreate on iPad…