You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
6.2 KiB

# Module for a graph
# Module to show some stats
basicstatUI <- function(id) {
ns <- NS(id)
fluidRow(
h3("No of Assets"),
br(),
p("This section shows some basic information about the portfolio."),
plotOutput(ns("statplot")),
verbatimTextOutput(ns("balancetext"))
)
}
basicstatServer <- function(id, dt) {
moduleServer(id,
function(input, output, session) {
df <- reactive({
dt %>%
ungroup() %>%
arrange(id, report_date) %>%
group_by(id) %>%
slice_max(report_date, n = 1) %>%
mutate(yr = lubridate::year(origination_date))
})
output$statplot <- renderPlot({
req(!is.null(df))
withProgress(message = "Plotting some graphs",
detail = "Won't take long",
value = 0,
{
setProgress(value = 1, message = "1 of 3..")
p1 <-
df() %>%
group_by(yr, loan_status) %>%
summarise(no_of_loans = n()) %>%
ungroup() %>%
ggplot(aes(
x = yr,
y = no_of_loans,
label = no_of_loans,
fill = factor(
loan_status,
levels = c("0", "1"),
labels = c("Good", "Bad")
)
)) +
geom_col(position = "dodge") +
geom_text(aes(y = no_of_loans + 20), position = position_dodge(width = 1)) +
labs(title = "No. of assets by year",
x = "Year",
y = "#") +
theme_bw() +
theme(legend.position = "none")
setProgress(value = 2, message = "2 of 3..")
p2 <-
df() %>%
group_by(asset_type, loan_status) %>%
summarise(no_of_loans = n()) %>%
ungroup() %>%
ggplot(aes(
x = asset_type,
y = no_of_loans,
label = no_of_loans,
fill = factor(
loan_status,
levels = c("0", "1"),
labels = c("Good", "Bad")
)
)) +
geom_col(position = "dodge") +
geom_text(aes(y = no_of_loans + 20), position = position_dodge(width = 1)) +
labs(title = "No. of assets by asset type",
x = "Asset Type",
y = "#") +
theme_bw() +
theme(legend.position = "none")
setProgress(value = 3, message = "3 of 3..")
p3 <-
df() %>%
group_by(customer_type, loan_status) %>%
summarise(no_of_loans = n()) %>%
ungroup() %>%
ggplot(aes(
x = customer_type,
y = no_of_loans,
label = no_of_loans,
fill = factor(
loan_status,
levels = c("0", "1"),
labels = c("Good", "Bad")
)
)) +
geom_col(position = "dodge") +
geom_text(aes(y = no_of_loans + 20), position = position_dodge(width = 1)) +
labs(title = "No. of assets by customer type",
x = "Customer Type",
y = "#") +
theme_bw() +
theme(legend.position = "bottom",
legend.title = element_blank())
setProgress(value = 4, message = "Patching..")
p4 <- p1 / (p2 | p3)
setProgress(value = 5, message = "Done..")
})
p4
})
output$balancetext <- renderText({
paste0(
"Total assets (no.): ",
length(unique(df()$id)) ,
"\n",
"Total balance outstanding: ",
round(sum(df()$balance) / 1000000, 2),
" M"
)
})
})
}