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