Files
2026-08-21 17:59:54 +01:00

241 lines
9.2 KiB
R

server <- function(input, output, session) {
countries <- c("Spain", "England", "Germany", "Italy", "France", "Portugal")
#### European performance over time ####
time_plot_debounced <- debounce(reactive(input$time_plot), millis = 200)
time_plot_level <- reactive({
val <- time_plot_debounced()
if (is.null(val)) 0 else val
})
time_plot_selected_data <- reactive({
season_league_full_dataset %>% filter(Country == countries[time_plot_level() + 1])
})
output$european_performance_over_time_plot <- renderPlotly({
width <- ifelse(is.null(input$screen_width), 760, input$screen_width)
custom_plotly(data = time_plot_selected_data(), x = ~Season, y = ~European_performance, type = "scatter", mode = "lines", hoverinfo = "none",
xaxis_title = "Season", yaxis_title = "European performance", width = width) %>%
layout(yaxis = list(range = c(0, 70)))
})
#### League characteristics ####
league_averages_plot_debounced <- debounce(reactive(input$league_averages_plot), millis = 200)
league_averages_plot_level <- reactive({
val <- league_averages_plot_debounced()
if (is.null(val)) 0 else val
})
league_averages_plot_selected_data <- reactive({
average_country_metrics_scaled %>% filter(Country == countries[league_averages_plot_level() + 1])
})
#plotting radar chart
output$league_characteristics_plot <- renderPlotly({
width <- ifelse(is.null(input$screen_width), 760, input$screen_width)
domain_size <- if(width <= 767) {
c(0.2, 0.8)
} else {
c(0.02, 0.98)
}
country_data <- league_averages_plot_selected_data()
values <- as.numeric(country_data[1, -1])
theta_labels <- gsub("_", " ", names(country_data)[-1])
theta_labels <- gsub("and ", "and<br>", theta_labels)
theta_labels <- gsub("4 ", "4<br>", theta_labels)
theta_labels <- gsub("number ", "number<br>", theta_labels)
theta_labels <- gsub("by ", "by<br>", theta_labels)
theta_labels <- gsub("Gini ", "Gini<br>", theta_labels)
custom_plotly(type = 'scatterpolar', fill = 'toself', hoverinfo = "none", xaxis_title = "", yaxis_title = "", width = width) %>%
add_trace(
r = c(values, values[1]),
theta = c(theta_labels, theta_labels[1])
) %>%
layout(
margin = list(t = 50),
polar = list(
domain = list(x = domain_size),
radialaxis = list(range = c(0,1))
),
showlegend = FALSE
)
})
#### Basic group profiling ####
basic_profiless_plot_debounced <- debounce(reactive(input$basic_profiling_plot), millis = 200)
basic_profiless_plot_level <- reactive({
val <- basic_profiless_plot_debounced()
if (is.null(val)) 0 else val
})
basic_profiless_plot_selected_data <- reactive({
european_performance_groups_characteristics %>% filter(performance_group == basic_profiless_plot_level() + 1)
})
#plotting radar chart
output$basic_profiles_characteristic_plot <- renderPlotly({
width <- ifelse(is.null(input$screen_width), 760, input$screen_width)
domain_size <- if(width <= 767) {
c(0.2, 0.8)
} else {
c(0.02, 0.98)
}
group_data <- basic_profiless_plot_selected_data()
values <- as.numeric(group_data[1, 2:10])
theta_labels <- gsub("_", " ", names(group_data)[2:10])
theta_labels <- gsub("and ", "and<br>", theta_labels)
theta_labels <- gsub("4 ", "4<br>", theta_labels)
theta_labels <- gsub("number ", "number<br>", theta_labels)
theta_labels <- gsub("by ", "by<br>", theta_labels)
theta_labels <- gsub("Gini ", "Gini<br>", theta_labels)
custom_plotly(type = 'scatterpolar', fill = 'toself', hoverinfo = "none", xaxis_title = "", yaxis_title = "", width = width) %>%
add_trace(
r = c(values, values[1]),
theta = c(theta_labels, theta_labels[1])
) %>%
layout(
margin = list(t = 50),
polar = list(
domain = list(x = domain_size),
radialaxis = list(range = c(-0.4,0.4))
),
showlegend = FALSE
)
})
#### Regression coefficients one season ####
regression_current_year_plot_debounced <- debounce(reactive(input$regression_current_year_plot), millis = 200)
regression_current_year_plot_level <- reactive({
val <- regression_current_year_plot_debounced()
if (is.null(val)) 0 else val
})
one_season_full_coefficients <- list(panel_all_robust_theory, panel_pc, indices_all_plotting_data)
coefficient_one_year_data <- reactive({
one_season_full_coefficients[[regression_current_year_plot_level() + 1]]
})
#plotting coefficients
output$regression_coefficients_current_plot <- renderPlotly({
width <- ifelse(is.null(input$screen_width), 760, input$screen_width)
if (regression_current_year_plot_level() %in% c(0,1)){
#version with all in one
coefficient_plot_function(regression_result = coefficient_one_year_data(), width = width)
} else if (regression_current_year_plot_level() == 2){
#indices version (multiple regressions combined in one)
coefficient_plot_function(regression_result = NULL, coefficient_plotting_data = coefficient_one_year_data(), width = width)
}
})
#### Regression coefficients next season ####
regression_next_year_plot_debounced <- debounce(reactive(input$regression_next_year_plot), millis = 200)
regression_next_year_plot_level <- reactive({
val <- regression_next_year_plot_debounced()
if (is.null(val)) 0 else val
})
next_season_full_coefficients <- list(panel_all_lead, panel_lead_pc, indices_lead_plotting_data)
coefficient_next_year_data <- reactive({
next_season_full_coefficients[[regression_next_year_plot_level() + 1]]
})
#plotting coefficients
output$regression_coefficients_next_plot <- renderPlotly({
width <- ifelse(is.null(input$screen_width), 760, input$screen_width)
if (regression_next_year_plot_level() %in% c(0,1)){
#version with all in one
coefficient_plot_function(regression_result = coefficient_next_year_data(), width = width, range_val = 15)
} else if (regression_next_year_plot_level() == 2){
#indices version (multiple regressions combined in one)
coefficient_plot_function(regression_result = NULL, coefficient_plotting_data = coefficient_next_year_data(), width = width, range_val = 15)
}
})
#### Regression coefficients by competition ####
regression_competition_plot_debounced <- debounce(reactive(input$regression_competition_plot), millis = 200)
regression_competition_plot_level <- reactive({
val <- regression_competition_plot_debounced()
if (is.null(val)) 0 else val
})
comp_breakdown_season_full_coefficients <- list(panel_all_CL, panel_pc_CL, indices_comp_breakdown_plotting_data)
coefficient_comp_breakdown_data <- reactive({
comp_breakdown_season_full_coefficients[[regression_competition_plot_level() + 1]]
})
#plotting coefficients
output$regression_coefficients_competition_plot <- renderPlotly({
width <- ifelse(is.null(input$screen_width), 760, input$screen_width)
if (regression_competition_plot_level() %in% c(0,1)){
#version with all in one
coefficient_plot_function(regression_result = coefficient_comp_breakdown_data(), width = width, range_val = 5)
} else if (regression_competition_plot_level() == 2){
#indices version (multiple regressions combined in one)
coefficient_plot_function(regression_result = NULL, coefficient_plotting_data = coefficient_comp_breakdown_data(), width = width, range_val = 5)
}
})
#### Clustering ####
clustering_plot_debounced <- debounce(reactive(input$clustering_plot), millis = 200)
clustering_plot_level <- reactive({
val <- clustering_plot_debounced()
if (is.null(val)) 0 else val
})
clustering_plot_selected_data <- reactive({
plotting_cluster_data %>% filter(cluster == clustering_plot_level() + 1)
})
#plotting radar chart
output$clustering_characteristics_plot <- renderPlotly({
width <- ifelse(is.null(input$screen_width), 760, input$screen_width)
domain_size <- if(width <= 767) {
c(0.2, 0.8)
} else {
c(0.02, 0.98)
}
group_data <- clustering_plot_selected_data()
values <- as.numeric(group_data[1, 2:10])
theta_labels <- gsub("_", " ", names(group_data)[2:10])
theta_labels <- gsub("and ", "and<br>", theta_labels)
theta_labels <- gsub("4 ", "4<br>", theta_labels)
theta_labels <- gsub("number ", "number<br>", theta_labels)
theta_labels <- gsub("by ", "by<br>", theta_labels)
theta_labels <- gsub("Gini ", "Gini<br>", theta_labels)
custom_plotly(type = 'scatterpolar', fill = 'toself', hoverinfo = "none", xaxis_title = "", yaxis_title = "", width = width) %>%
add_trace(
r = c(values, values[1]),
theta = c(theta_labels, theta_labels[1])
) %>%
layout(
margin = list(t = 50),
polar = list(
domain = list(x = domain_size),
radialaxis = list(range = c(-0.7,1.5))
),
showlegend = FALSE
)
})
}