knitr::opts_chunk$set(echo = TRUE, cache = TRUE)

Add libraries & prep data

rm(list=ls())
library(plotly)
## Loading required package: ggplot2
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(data.table)
library(tidyr)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:data.table':
## 
##     hour, isoweek, mday, minute, month, quarter, second, wday,
##     week, yday, year
## The following object is masked from 'package:base':
## 
##     date
library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
accidents <- fread("dftRoadSafetyData_Accidents_2018.csv", header = TRUE, sep = ",")

convert severity to factor and add labels

accidents$Accident_Severity <- factor(accidents$Accident_Severity, levels = 1:3, labels = c("Fatal", "Serious", "Slight"))

# convert date strings to Date objects
accidents$Date <- dmy(accidents$Date)

# group data by date and severity, get count, one row per date
accident_count <- accidents %>%
    group_by(Date, Accident_Severity) %>%
    summarise(count = n()) %>%
    spread(key = Accident_Severity, value = count) %>% 
    as.data.frame()
## Warning: The `printer` argument is deprecated as of rlang 0.3.0.
## This warning is displayed once per session.
# create a smoother for each severity to visualise general trends
loess_slight <- loess(Slight ~ as.numeric(Date), data = accident_count)
loess_serious <- loess(Serious ~ as.numeric(Date), data = accident_count)
loess_fatal <- loess(Fatal ~ as.numeric(Date), data = accident_count)

plot data

plot_ly(accident_count) %>%
    add_trace(x = ~Date, y = ~Slight, type="scatter", mode = "markers", 
              name = "slight", legendgroup = "slight", 
              marker = list(color = "#52A9BD")) %>%
    add_trace(x = ~Date, y = ~Serious, type="scatter", mode = "markers",
              name = "serious", legendgroup = "serious", 
              marker = list(color = "#FFF16B")) %>%
    add_trace(x = ~Date, y = ~Fatal, type="scatter", mode = "markers",
              name = "fatal", legendgroup = "fatal", 
              marker = list(color = "#F5677D")) %>%
    add_trace(x = as.Date(loess_slight$x), y = fitted(loess_slight),
              type="scatter", mode = "lines",
              line = list(color = '#1A7A90'), 
              name = "slight Loess smoother", legendgroup = "slight", 
              hoverinfo = 'none', showlegend = FALSE) %>%
    add_trace(x = as.Date(loess_serious$x), y = fitted(loess_serious),
              type="scatter", mode = "lines",
              line = list(color = '#E9D625'),
              name = "serious Loess smoother", legendgroup = "serious",
              hoverinfo = 'none', showlegend = FALSE) %>%
    add_lines(x = as.Date(loess_fatal$x), y = fitted(loess_fatal),
              type="scatter", mode = "lines",
              line = list(color = '#DC2340'),
              name = "fatal Loess smoother", legendgroup = "fatal",
              hoverinfo = 'none', showlegend = FALSE) %>%
    layout(xaxis = list(title = "Year"),
           yaxis = list(title = "Number of Accidents")
    )
## Warning: Ignoring 5 observations