R语言 shiny企业轻量级可视化应用案例(R语言&大数据分析qq群 456726635 欢迎讨论交流)

R语言 shiny企业轻量级可视化应用案例(R语言&大数据分析qq群 456726635 欢迎讨论交流)

#####UI代码:

library(shiny)


# Define UI for application that draws a histogram
fluidPage(
  
  titlePanel("客单量与客单价对比分析"),
  
  #h3("客单量与客单价对比分析"),
  
  # Sidebar with controls to select the variable to plot against
  # mpg and to specify whether outliers should be included
  #end = as.character(Sys.Date())
  sidebarLayout(
  
    sidebarPanel(
      selectInput("brand", "品牌:",
                  c("全部" = "全部",
                    "AD" = "AD",
                    "NK" = "NK",
                    "AK" = "AK",
                    "AO" = "AO",
                    "AS" = "AS",
                    "CV" = "CV",
                    "PU" = "PU",
                    "NF" = "NF",
                    "MT" = "MT",
                    "OT" = "OT",
                    "TB" = "TB",
                    "AC" = "AC",
                    "RB" = "RB",
                    "VN" = "VN",
                    "CB" = "CB",
                    "UG" = "UG"
                  )),
      selectInput("regi", "大区:",
                  c("全部" = "全部",
                    "东北" = "东北",
                    "华北" = "华北",
                    "鲁豫" = "鲁豫",
                    "西北" = "西北",
                    "西南" = "西南",
                    "华中" = "华中",
                    "华东" = "华东",
                    "华南" = "华南",
                    "云贵" = "云贵"
                  )),
      selectInput("cit", "城市:",
                  c("全部" = "全部"
                  )),
      selectInput("enti", "店铺:",
                  c("全部" = "全部"
                  )),
      
      
      
      dateRangeInput("dates", 
                     "Date range",
                     start = "2015-11-01", 
                     end = as.character(Sys.Date()),
                     language = "zh-CN"),
      
      br(),
      
      selectInput("variable", "Variable:",
                  c("客单量" = "quantity",
                    "客单价" = "price"
                  )),
 div(align="center",submitButton("确定",width='50%')),
  #    submitButton("确定"),
      
      width = 3
      
    ),
    
    
    
    # Show the caption and plot of the requested variable against
    # mpg
    mainPanel(
      
      plotOutput("mpgPlot",height=450),     #plotOutput("mpgPlot", height=400)
  br(),
   br(),
 h5(textOutput("caption"),style="color:blue")
      
    )

  )
  
)


#####SERVER部分代码:

library(shiny)
library(ggplot2)
library(data.table)

regiondata = fread("D:/nk4.csv",encoding="UTF-8",header=T)
head(regiondata)
#regiondata = read.csv("D:/nk4.csv",fileEncoding="UTF-8",header=T,sep=',')
regiondata=regiondata[which(regiondata$UPT>1.0),]   #客单量>1.0
#uniregion<-unique(regiondata$REGION_NAME)   # all regions
unibrand<-unique(regiondata$BRAND_NO)   # all brands
#unibrand<-as.character(unibrand)


listname<-vector()
quantity<-vector()
price<-vector()       #是否要清空???????????????










# Defien server logic required to plot various variables against
# mpg
function(input, output, session) {
  
  
  output$mpgPlot <- renderPlot({
    
    from = input$dates[1]
    to = input$dates[2]
    regiondata<-regiondata[which(as.Date(as.character(regiondata$PERIOD_SDATE),format="%Y%m%d") >= from & as.Date(as.character(regiondata$PERIOD_SDATE),format="%Y%m%d") <= to),]
    if(input$brand=="全部")  # display all brands
    {
      for (a in unibrand)
      {
        slic <- data.table(subset(regiondata,grepl(a,regiondata$BRAND_NO,ignore.case = F)))
        #       slic <-slic[which(slic$UPT>1.0),]
        
        temp1<-slic$PCT
        temp1=as.numeric(temp1)
        temp2<-slic$UPT
        temp2=as.numeric(temp2)
        
        listname[a]<-a
        quantity[a]=data.table(temp2)
        price[a]=data.table(temp1)
        
      }
    }
    else
    {
      onebrand<-input$brand
      
      slicbrand <- data.table(subset(regiondata,grepl(onebrand,regiondata$BRAND_NO,ignore.case = F)))
      uniregion<-unique(slicbrand$REGION_NAME)
      if(input$regi=="全部")   # display all regions
      {
        for (i in uniregion)
        {
          slic <- data.table(subset(slicbrand,grepl(i,slicbrand$REGION_NAME,ignore.case = F)))
          slic <-slic[which(slic$UPT>1.0),]
          
          temp1<-slic$PCT
          temp1=as.numeric(temp1)
          temp2<-slic$UPT
          temp2=as.numeric(temp2)
          
          listname[i]<-i
          quantity[i]=data.table(temp2)
          price[i]=data.table(temp1)
          
        }
      }
      else
      {
        oneregion<-input$regi
        
        slicregion <- data.table(subset(slicbrand,grepl(oneregion,slicbrand$REGION_NAME,ignore.case = F)))
        head(slicregion)
        unicity<-unique(slicregion$MANAGING_CITY_NAME) 
        
        if(input$cit=="全部")   # display all citys of one region
        {
          for(j in unicity)
          {
            slic <- data.table(subset(slicregion,grepl(j,slicregion$MANAGING_CITY_NAME,ignore.case = F)))
            slic <-slic[which(slic$UPT>1.0),]
            
            temp1<-slic$PCT
            temp1=as.numeric(temp1)
            temp2<-slic$UPT
            temp2=as.numeric(temp2)
            
            listname[j]<-j
            quantity[j]=data.table(temp2)
            price[j]=data.table(temp1)
          }
          
        }
        else
        {
          
          onecity=input$cit
          sliccity <- data.table(subset(slicbrand,grepl(onecity,slicbrand$MANAGING_CITY_NAME,ignore.case = F)))
          unientity<-unique(sliccity$ORGAN_NAME)
 
 uu<-vector()
 
 
 if(length(unientity)>20)
 {
    for(p in 1:length(unientity))
    {
         sentity <- data.table(subset(sliccity,grepl(unientity[p],sliccity$ORGAN_NAME,ignore.case = F)))
     uu[p]=sum(sentity$UPT*sentity$PCT)
    }
unientity<-unientity[order(uu,decreasing=TRUE)[1:20]]
 
 }
          
          if(input$enti=="全部") # display all entitys of one city,one region
          {
            
            for(k in unientity)
            {
              slic <- data.table(subset(sliccity,grepl(k,sliccity$ORGAN_NAME,ignore.case = F)))
              slic <-slic[which(slic$UPT>1.0),]
              
              
              temp1<-slic$PCT
              temp1=as.numeric(temp1)
              temp2<-slic$UPT
              temp2=as.numeric(temp2)
              
              listname[k]<-k
              quantity[k]=data.table(temp2)
              price[k]=data.table(temp1)
              
              
              
            }
          }
          else                        #display all salers of one entity 
          {
            oneentity=input$enti
            sliceentity<- data.table(subset(slicbrand,grepl(oneentity,slicbrand$ORGAN_NAME,ignore.case = F)))
            unisaler<-unique(sliceentity$ASSISTANT_NAME)    # all salers of one entity 
            
            for(h in unisaler)
            {
              slic <- data.table(subset(sliceentity,grepl(h,sliceentity$ASSISTANT_NAME,ignore.case = F)))
              slic <-slic[which(slic$UPT>1.0),]
              
              
              temp1<-slic$PCT
              temp1=as.numeric(temp1)
              temp2<-slic$UPT
              temp2=as.numeric(temp2)
              
              
              listname[h]<-h
              quantity[h]=data.table(temp2)
              price[h]=data.table(temp1)
              
              
              
            }
            
          }
          
        }
        
        
      }
      
      
      
    }
    
    
    if(input$variable=="quantity") 
    {
      
      
      quantity=as.vector(quantity)
      
      par(cex.axis=1.5,las=1,cex.main=1.7)
      #  if(input$regi=="regionall" ||input$regi!="regionall") par(cex.axis=1.5,las=1)
      if(input$cit != "全部" ) 
 {
    
    par(pty='m',oma=c(7,0,0,0),cex.axis=1.2,las=3)
 
      #  boxplot(quantity,main="客单量对比",xaxt = "n",xlab="")      #boxplot(quantity,names = ,main="客单量对比")
   #     axis(1, labels = FALSE)
# par(pty='m',oma=c(7,0,0,0),cex.axis=1.2)
  #     text(x = seq_along(listname),y = par("usr")[3]-0.05,srt=45, adj=1,labels=listname,xpd=TRUE)
  
 }
      else 
 {
    par(cex.axis=1.5,las=1)

 }
 #     if(input$enti!="全部") par(cex.axis=1.5,las=1)
      
      #  par(pty='m',oma=c(4,0,0,0),las=3)
 
       boxplot(quantity,names = listname,main="客单量对比",outline = FALSE,col='#ADD8E6')
 #       boxplot(quantity,main="客单量对比",xaxt = "n",xlab="",space=2)      #boxplot(quantity,names = ,main="客单量对比")
 #       axis(1, labels = FALSE)
 #      text(x = seq_along(listname),y = par("usr")[3],srt=45, adj=c(1,1,1,1),labels=listname,xpd=TRUE)
#   text(x = seq_along(listname),y = par("usr")[3]-1,srt=45, adj=1,labels=listname,xpd=TRUE)
      
    }
    if(input$variable=="price") 
    {
      if(input$cit != "全部" ) par(pty='m',oma=c(4,0,0,0),cex.axis=0.8,las=3)
      else par(cex.axis=1.5,las=1)
      if(input$enti!="全部") par(cex.axis=1.5,las=1)
      boxplot(price,names = listname,main="客单价对比",outline = FALSE)
      
    }
    
   
    
  })


图片是程序运行的效果图。

点击链接加入群【R语言&大数据分析】:https://jq.qq.com/?_wv=1027&k=4BQLEWp,R语言&大数据分析qq群 456726635 欢迎讨论交流