library(shiny)
shinyUI(fluidPage(
titlePanel("Classification tree model on iris dataset."),
sidebarLayout(
sidebarPanel(
checkboxInput("ex","Uncheck for using your own file",value = TRUE),
fileInput("file", "Upload the *.csv file with headers"),
uiOutput("dependent"),
uiOutput("predictor"),
sliderInput("prop",
"Enter the training data ratio",
min = .5,
max = 1,
value = .6,step = .05)
),
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Model",br(),verbatimTextOutput("model"),verbatimTextOutput("text")),
tabPanel("Confusion Matrix & Statistics",br(),verbatimTextOutput("matrix")),
tabPanel("Tree",br(),plotOutput("tree")))
)
)
)) ## server.R code
library(shiny)
library(rattle)
library(dplyr)
library(datasets)
library(caret)
library(e1071)
shinyServer(function(input, output) {
output$dependent <- renderUI({
if(input$ex==TRUE){
data = datasets::iris
dependents <- select_if(data,is.factor)
selectInput("depvar","Select the dependent variable",choices = colnames(dependents))
}
else{
file1 <- input$file
data = read.table(file = file1$datapath,sep =",",header = TRUE)
dependents <- select_if(data,is.factor)
selectInput("depvar","Select the dependent variable",choices = colnames(dependents))
}
})
output$predictor <- renderUI({
if(input$ex==TRUE){
data = datasets::iris
dependents <- select_if(data,is.numeric)
checkboxGroupInput("predvar","Select the predictor variables",choices = colnames(dependents))
}
else{
file1 <- input$file
data = read.table(file = file1$datapath,sep =",",header = TRUE)
dependents <- select_if(data,is.numeric)
checkboxGroupInput("predvar","Select the predictor variables",choices = colnames(dependents))
}
})
model <- reactive ({
req(input$depvar, input$predvar)
prop = input$prop
predictor = input$predvar
dependent = input$depvar
if(length(predictor)==0){return("Select atleast one predictor")}
if(input$ex==TRUE){data <- datasets::iris}
else{file1 <- input$file
data = read.table(file = file1$datapath,sep =",",header = TRUE)
data = as.data.frame(data)}
set.seed(69)
inTrain <- createDataPartition(y=data[[dependent]],p=prop,list = FALSE)
train <- data[inTrain,]
train <- train %>% select(predictor,dependent)
train(dependent~.,data=data,method = "rpart")
})
test <- reactive ({
prop = input$prop
predictor = input$predvar
dependent = input$depvar
if(length(predictor)==0){return("Select atleast one predictor")}
if(input$ex==TRUE){data = datasets::iris}
else{file1 <- input$file
data = read.table(file = file1$datapath,sep =",",header = TRUE)}
set.seed(69)
inTrain <- createDataPartition(y=data[[dependent]],p=prop,list = FALSE)
test <- data[-inTrain,]
test <- test %>% select(predictor,dependent)
})
output$model <- renderPrint({
model()
})
output$matrix <- renderPrint({
dependent <- input$depvar
if(length(input$predvar)==0){return("Select atleast one predictor")}
predict <- predict(model(),test())
confusionMatrix(predict,test()$dependent)
})
output$tree <- renderPlot({
if(length(input$predvar)==0){return("Select atleast one predictor")}
fancyRpartPlot(model()$finalModel)
})
})