# 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" ) }) }) }