Added barplot for balance between teams
This commit is contained in:
parent
64ad86242b
commit
662e1bb737
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.Rproj.user
|
||||||
|
.Rhistory
|
||||||
|
.RData
|
||||||
|
.Ruserdata
|
24
Data/Loader.R
Normal file
24
Data/Loader.R
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Functions
|
||||||
|
get_winner_name <- function(match_row) {
|
||||||
|
if(match_row["home_score"] > match_row["away_score"]) {
|
||||||
|
return(match_row["home_team"])
|
||||||
|
}
|
||||||
|
else if(match_row["home_score"] < match_row["away_score"]) {
|
||||||
|
return(match_row["away_team"])
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return("Draw")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load data
|
||||||
|
football_data <- as_tibble(read.csv("results.csv"))
|
||||||
|
football_data_ext <- football_data %>%
|
||||||
|
select(2:5) %>% mutate(winner = apply(., 1, get_winner_name))
|
||||||
|
|
||||||
|
# Prepare data
|
||||||
|
home_teams <- football_data %>%
|
||||||
|
select("home_team") %>% unique()
|
||||||
|
|
||||||
|
away_teams <- football_data %>%
|
||||||
|
select("away_team") %>% unique()
|
38
Server/Results.R
Normal file
38
Server/Results.R
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Functions
|
||||||
|
getMatchesList <- function(first_team, second_team, football_data) {
|
||||||
|
matches <- football_data %>%
|
||||||
|
filter(home_team %in% c(first_team, second_team)
|
||||||
|
& away_team %in% c(first_team, second_team))
|
||||||
|
return(matches)
|
||||||
|
}
|
||||||
|
|
||||||
|
getBalance <- function(football_data) {
|
||||||
|
balance <- football_data %>%
|
||||||
|
count(winner, sort = TRUE)
|
||||||
|
return(balance)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Results with pagination
|
||||||
|
resultsWithPagination <- function(input, output) {
|
||||||
|
output$results_pagination <- DT::renderDataTable(
|
||||||
|
getMatchesList(input$first_team, input$second_team, football_data),
|
||||||
|
extensions = 'Buttons',
|
||||||
|
options = list(
|
||||||
|
lengthMenu = list(c(5, 10, -1), c('5', '10', 'All')),
|
||||||
|
pageLength = 10,
|
||||||
|
searching = FALSE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Balance
|
||||||
|
balanceBetweenTeams <- function(input, output) {
|
||||||
|
output$balance <- renderPlot({
|
||||||
|
barplot(
|
||||||
|
bal <- getBalance(getMatchesList(input$first_team, input$second_team, football_data_ext))$n,
|
||||||
|
main = "Balance between teams",
|
||||||
|
col = rainbow(3),
|
||||||
|
names.arg = getBalance(getMatchesList(input$first_team, input$second_team, football_data_ext))$winner
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
8
Server/main.R
Normal file
8
Server/main.R
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Import files
|
||||||
|
source("Server/Results.R")
|
||||||
|
|
||||||
|
# Server logic
|
||||||
|
server <- function(input, output) {
|
||||||
|
balanceBetweenTeams(input, output)
|
||||||
|
resultsWithPagination(input, output)
|
||||||
|
}
|
24
UI/main.R
Normal file
24
UI/main.R
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# UI
|
||||||
|
ui <- fluidPage(
|
||||||
|
|
||||||
|
# Application title
|
||||||
|
titlePanel("International football results 1872-2018"),
|
||||||
|
|
||||||
|
# Sidebar with a slider input for number of bins
|
||||||
|
sidebarLayout(
|
||||||
|
sidebarPanel(
|
||||||
|
selectInput("first_team",
|
||||||
|
"First team:",
|
||||||
|
home_teams),
|
||||||
|
selectInput("second_team",
|
||||||
|
"Second team:",
|
||||||
|
away_teams)
|
||||||
|
),
|
||||||
|
|
||||||
|
# Show a plot of the generated distribution
|
||||||
|
mainPanel(
|
||||||
|
plotOutput("balance"),
|
||||||
|
DT::dataTableOutput("results_pagination")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
75
app.R
75
app.R
@ -10,77 +10,10 @@
|
|||||||
library(shiny)
|
library(shiny)
|
||||||
library(dplyr)
|
library(dplyr)
|
||||||
|
|
||||||
# Functions
|
# Load files
|
||||||
get_matches_list <- function(first_team, second_team) {
|
source("Data/Loader.R")
|
||||||
matches <- football_data %>%
|
source("UI/main.R")
|
||||||
select(1:9) %>%
|
source("Server/main.R")
|
||||||
filter(home_team %in% c(first_team, second_team)
|
|
||||||
& away_team %in% c(first_team, second_team))
|
|
||||||
return(matches)
|
|
||||||
}
|
|
||||||
|
|
||||||
get_winner_name <- function(match_row) {
|
|
||||||
if(match_row["home_score"] > match_row["away_score"]) {
|
|
||||||
return(match_row["home_team"])
|
|
||||||
}
|
|
||||||
else if(match_row["home_score"] < match_row["away_score"]) {
|
|
||||||
return(match_row["away_team"])
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return("Draw")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Load data
|
|
||||||
football_data <- as_tibble(read.csv("results.csv"))
|
|
||||||
football_data_ext <- football_data %>%
|
|
||||||
select(2:5) %>% mutate(winner = apply(., 1, get_winner_name))
|
|
||||||
|
|
||||||
# Prepare data
|
|
||||||
home_teams <- football_data %>%
|
|
||||||
select("home_team") %>% unique()
|
|
||||||
|
|
||||||
away_teams <- football_data %>%
|
|
||||||
select("away_team") %>% unique()
|
|
||||||
|
|
||||||
# UI
|
|
||||||
ui <- fluidPage(
|
|
||||||
|
|
||||||
# Application title
|
|
||||||
titlePanel("International football results 1872-2018"),
|
|
||||||
|
|
||||||
# Sidebar with a slider input for number of bins
|
|
||||||
sidebarLayout(
|
|
||||||
sidebarPanel(
|
|
||||||
selectInput("first_team",
|
|
||||||
"First team:",
|
|
||||||
home_teams),
|
|
||||||
selectInput("second_team",
|
|
||||||
"Second team:",
|
|
||||||
away_teams)
|
|
||||||
),
|
|
||||||
|
|
||||||
# Show a plot of the generated distribution
|
|
||||||
mainPanel(
|
|
||||||
#plotOutput("balance"), TODO: balance plot (W:L:D)
|
|
||||||
DT::dataTableOutput("results_pagination")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Server logic
|
|
||||||
server <- function(input, output) {
|
|
||||||
#output$balance <- renderPlot()
|
|
||||||
output$results_pagination <- DT::renderDataTable(
|
|
||||||
get_matches_list(input$first_team, input$second_team),
|
|
||||||
extensions = 'Buttons',
|
|
||||||
options = list(
|
|
||||||
lengthMenu = list(c(5, 10, -1), c('5', '10', 'All')),
|
|
||||||
pageLength = 10,
|
|
||||||
searching = FALSE
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Run the application
|
# Run the application
|
||||||
shinyApp(ui = ui, server = server)
|
shinyApp(ui = ui, server = server)
|
||||||
|
Loading…
Reference in New Issue
Block a user