본문 바로가기

R

그래프(원형,막대)

728x90
반응형

그래프

 

 1. 기본 막대 그래프

 2. 기본 원형 그래프

 3. 기본 라인 그래프

 4. ggplot2 막대 그래프

 5. plotly  원형 그래프

 6. plotly  라인 그래프

 7. 소리를 그래프로 시각화 하는 방법

 8. 산포도 그래프와 상관관계

 9. 사분위수 그래프

 10. 샤이니에 데이터 테이블 표시 하는 방법

 11. 오라클 데이터베이스와 R 과 연동하여 샤이니에 구현

 12. 워드 클라우드

 13. 구글 지도 그래프

 

 

 

R 에서 그래프 그리는 방법

1. 막대 그래프

2. 원형 그래프

3. 라인 그래프

4. 특수 그래프(지도, 소리 시각화, 워드 클라우드)

5. 사분위수 그래프(평균, 중앙값, 이상치)

 

 

 

 

 

 

막대 그래프

 

문제114.

emp 테이블의 월급으로 기본적인 막대 그래프를 그리시오

barplot(emp$sal)

 

 

 

 

문제115. 위의 그래프의 제목을 Salary Bar Chart 라고 이름을 붙이시오

 

barplot(sal, main="Salary Bar Chart")

 

 

 


 

 

 

문제116. 막대 그래프의 x 축에 사원 이름을 붙이시오

 

barplot(sal, main="Salary Bar Chart",

        names.arg=ename, ylab="Salary")

 

*names.arg = x(컬럼명 쓰면 행값을 취함)

*ylab= y

 

 


 

 

 

 

문제117. 막대 그래프의 색깔을 입히시오

barplot(sal, main="Salary Bar Chart",

        names.arg=ename, ylab="Salary",

        col=('blue'))

 

 

 

 

 

문제118. 아래와 같이 치킨집 연도별 창업건수를 막대 그래프로

시각화 하시오 

 

 

창업=read.csv("창업건수.csv",header=T)

head(창업)

barplot(창업$치킨집, main="연도별 치킨창업",

          names.arg=창업$X, ylab="치킨집",

          col=('blue'))

 

폐업=read.csv("폐업건수.csv",header=T)

head(폐업)

barplot(폐업$치킨집, main="년도별 치킨폐업",

          names.arg=폐업$X, ylab="치킨집",

          col=('blue'))

 

graphics.off()  #그래프 지우는

 

 

 

문제119. 치킨집 년도별 창업건수, 폐업건수를 아래와 같이

막대 그래프로 시각화 하시오

 

창업=read.csv("창업건수.csv",header=T)

head(창업)

barplot(창업$치킨집, main="연도별 치킨창업",

          names.arg=창업$X, ylab="치킨집",

          ylim=c(0,4000),col=('blue'))

 

폐업=read.csv("폐업건수.csv",header=T)

head(폐업)

barplot(폐업$치킨집, main="년도별 치킨폐업",

          names.arg=폐업$X, ylab="치킨집",

          ylim=c(0,4000), col=('blue'))

 

graphics.off()

 

x <- rbind(창업$치킨집, 폐업$치킨집)

x

barplot(x, main="년도별 치킨 창업,폐업",

          names.arg=창업$X, ylab="치킨집",

          ylim=c(0,4000),col=c('blue','red'),

          beside=T)

 


 

 

 

 

문제120. 위의 그래프에 legend 달아서 파란색이 창업이고

빨간색이 폐업이라고 하시오

 

barplot(x, main="년도별 치킨 창업,폐업",

          names.arg=창업$X, ylab="치킨집",

          ylim=c(0,4000), col=c('blue','red'),

          legend=c("창업","폐업"),

          beside=T)

 

 


 

 

 

 

 

문제121. 카페(커피음료) 얼마나 창업하고 얼마나 폐업하는지

막대그래프로 시각화 하시오

 

창업=read.csv("창업건수.csv",header=T)

head(창업)

barplot(창업$커피음료, main="연도별 카페창업",

          names.arg=창업$X, ylab="커피음료",

          ylim=c(0,4000),col=('blue'))

 

폐업=read.csv("폐업건수.csv",header=T)

head(폐업)

barplot(폐업$커피음료, main="년도별 카페폐업",

          names.arg=폐업$X, ylab="커피음료",

          ylim=c(0,2000), col=('blue'))

 

graphics.off()

 

x <- rbind(창업$커피음료, 폐업$커피음료)

x

barplot(x, main="년도별 카페 창업,폐업",

          names.arg=창업$X, ylab="카페",

          ylim=c(0,4000),col=c('blue','red'),

          legend=c("창업","폐업"),

          beside=T)

 


 

 

 

 

 

문제122.

R샤이니로 막대 그래프 시각화를 자동화 시키는 기본코드를 돌려보시오

 

library(shiny)

library(datasets)

 

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

 

# Define UI ----

ui <- fluidPage(   

 

  # Give the page a title

  titlePanel("년도별 업종별 창업현황"),

 

  # Generate a row with a sidebar

  sidebarLayout(     

   

    # Define the sidebar with one input

    sidebarPanel(

      selectInput("region", "업종:",

        # 우리의 csv 컬럼네임즈가 치킨집,커피음료...이렇게 되어있음

#자료 맨앞에 X 있는데 그걸 없어고 싶다!!

# colnames(create_cnt)[-1] 이걸 추가해주면 !

                  choices=colnames(create_cnt)[-1]),

      hr(), #희미한 선있음 그거임

      helpText("Data from AT&T (1961) The World's Telephones.") # 그냥 냅두신다함

    ),

   

    # Create a spot for the barplot

    mainPanel(

      plotOutput("phonePlot") 

    )

   

  )

)

 

# Define server logic ----

server <-function(input, output) {

#  input 왼쪽, output 오른쪽 같은데?

 

  # Fill in the spot we created for a plot

  output$phonePlot <- renderPlot({

   

    # Render a barplot   # input 그대로 가져와서

    barplot(create_cnt[,input$region],

# 테이블 이름 바꿔주면

            main=input$region, names.arg=create_cnt$X,

            ylab="창업건수",col='blue',

            xlab="Year")

  })

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

 

실행시키고

상단에 open in browser 눌러보시오

 

 


 

 

 

문제123.

샤이니로 아래와 같이 창업,폐업을 같이 출력되게 하는

자동화 화면을 구현하시오

 

library(shiny)

library(datasets)

 

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

drop_cnt<-read.csv("d:\\data\\폐업건수.csv", header=T)

#create_cnt

#drop_cnt

#밖에서 rbind 시키니까 에러뜬다.

 

# Define UI ----

ui <- fluidPage(   

 

  # Give the page a title

  titlePanel("년도별 업종별 창업 폐업 현황"),

 

  # Generate a row with a sidebar

  sidebarLayout(     

   

    # Define the sidebar with one input

    sidebarPanel(

      selectInput("region", "업종:",

                  # 우리의 csv는 컬럼네임즈가 치킨집,커피음료...이렇게 되어있음

                  #자료 맨앞에 X가 있는데 그걸 없어고 싶다!!

                  # colnames(create_cnt)[-1] 이걸 추가해주면 됨!

                  choices=colnames(create_cnt, drop_cnt)[-1]),

      hr(), #희미한 선있음 그거임

      helpText("Data from AT&T (1961) The World's Telephones.")

    ),

   

    # Create a spot for the barplot

    mainPanel(

      plotOutput("phonePlot") 

    )

   

  )

)

 

# Define server logic ----

server <-function(input, output) {

 

  # Fill in the spot we created for a plot

  output$phonePlot <- renderPlot({

   

    # Render a barplot

    barplot(rbind(create_cnt[,input$region],  #행으로 잡으면 vector, matrix 에러뜸

                  drop_cnt[,input$region]),

            main=input$region,  # 메인이름

            names.arg=create_cnt$X, # x축에 담을 내용

            ylab="건수",  # y 내용은 해당 컬럼의 내용( 건수) 알아서 가져옴.

   # 따로 y 담을내용 설정 필요없음

            col=c("blue","red"),

            xlab="Year",

            legend=c("창업","폐업"),

            arg.legend=list(x='topright'),

            beside=TRUE,

            ylim=c(0,3000)

            )

  })

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

  

 

 

 

데이터 분석 시각화 가격

테블로 분석 시각화 --> 사람당 300만원(슈퍼유저),

일반유저 120만원

2 라이센스

*참고 NEWSJELLY 


 

 

원형 그래프를 샤이니로 시각화

 

문제124.

사원 테이블의 월급을 원형 그래프로 그리시오!

 pie(emp$sal)

 

 

문제125. 누구의 월급인지 명시시켜서 그래프로 그리시오

pie(emp$sal, main="Salary Pie Chart", labels=emp$ename, col=rainbow(15))

 

 

 

 

 

문제126.

위의 그래프에 월급에 비율을 붙여서 출력하시오

sal_labels<-round(emp$sal/sum(emp$sal)*100, 1) #자신의 월급을 전체월급으로 나눔

sal_labels

sal_labels2<-paste(emp$ename, sal_labels, "%")

sal_labels2

pie(sal, main="Salary Pie Chart", labels=sal_labels2, col=rainbow(15))

 

 

 

 

 

문제127.

2014년도 업종별 창업 비율을 아래와 같이 원형 그래프로 그리시오!

 

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

#drop_cnt<-read.csv("d:\\data\\폐업건수.csv", header=T)

x2<-create_cnt[create_cnt$X=='2014', -1]  # X 빼버림

x2

  미용실 양식집 일식집 치킨집 커피음료 한식음식점 호프간이주점
10   1980   1870   1095   1193     3053       9772         1272

 

cnt_labels<-round(x2/sum(x2)*100, 1)

cnt_labels

   미용실 양식집 일식집 치킨집 커피음료 한식음식점 호프간이주점
10    9.8    9.2    5.4
      5.9     15.1       48.3          6.3

 

 

t(cnt_labels)  #전치

         

10
미용실        9.8
양식집        9.2
일식집        5.4
치킨집        5.9
커피음료     15.1
한식음식점   48.3
호프간이주점  6.3

cnt_labels2<-paste(colnames(cnt_labels),t(cnt_labels), '%')

pie(t(cnt_labels), col=rainbow(7), labels=cnt_labels2)

 

 

 

 

 

문제128.

2013년도 업종별 창업 비율을 아래와 같이 원형 그래프로 그리시오

* 답에서 년도만 변경!

 

 

 

문제129.

위의 스크립트를 편하게 사용할 있도록 샤이니 구현하시오

(년도별 창업현황을 샤이니로 구현!)

 

 

library(shiny)

library(datasets)

 

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

drop_cnt<-read.csv("d:\\data\\폐업건수.csv", header=T)

#create_cnt

#drop_cnt

#밖에서 rbind 시키니까 에러뜬다.

 

# Define UI ----

ui <- fluidPage(   

 

  # Give the page a title

  titlePanel("년도별 업종별 창업현황"),

 

  # Generate a row with a sidebar

  sidebarLayout(     

   

    # Define the sidebar with one input

    sidebarPanel(

      selectInput("region", "업종:",

                  # 우리의 csv는 컬럼네임즈가 치킨집,커피음료...이렇게 되어있음

                  #자료 맨앞에 X가 있는데 그걸 없고 싶다!!

                  # colnames(create_cnt)[-1] 이걸 추가해주면 됨!

choices=colnames(create_cnt)[-1]),

      hr(), #희미한 선있음 그거임

      helpText("Data from AT&T (1961) The World's Telephones.")

    ),

   

    # Create a spot for the barplot

    mainPanel(

      plotOutput("phonePlot") 

    )

   

  )

)

 

# Define server logic ----

server <-function(input, output) {

 

  # Fill in the spot we created for a plot

  output$phonePlot <- renderPlot({

   

    # Render a barplot

   

   

   cnt_2014<-create_cnt[create_cnt$X==2014,-1]

    cnt2<-round(cnt_2014/sum(cnt_2014)* 100, 1)

    labels<-paste(colnames(cnt_2014), cnt2, '%')

    pie(t(cnt2), main="창업현황", col=rainbow(15), labels=labels)

   

   

    )

  })

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

 

 

 

라인(plot) 그래프

 

문제130. 아래의 (plot) 그래프를 그리시오

graphics.off()

cars<-c(1,3,6,4,9)

cars

plot(cars)

 

 


 

 

 

문제131. 위의 그래프에 파란색 선을 그리시오

graphics.off()

cars<-c(1,3,6,4,9)

cars

plot(cars, type="o", col="blue")

 

 

 

 

 

문제132.

차와 트럭의 판매 댓수를 라인 그래프로 시각화 하시오

graphics.off()

cars<-c(1,3,6,4,9)

cars

trucks<-c(2,5,4,5,12)

plot(cars, type="o", col="blue", ylim=c(0,12))

 

#그래프 창을 닫지 말고 바로 이어서

 

lines(trucks, type="o", pch=22, lty=2, col="red")

 

#덧대어 그릴땐 lines !!

 

 

설명:

pch = 21: 동그라미  (default)

pch = 22 : 네모

lty = 1 : 직선  (default)

lty = 2 : 점선


 


 

 

 

 

 

문제133. 다시 위의 2개의 그래프를 아래의 순서대로 시각화 하시오

(순서대로 그래프 생성 모습을 있음)

 

graphics.off()

cars<-c(1,3,6,4,9)

cars

trucks<-c(2,5,4,5,12)

 

g_range<-range(0,cars,trucks)  # range 0부터 가장 값을 가져온다

g_range

[1]  0 12

*값이 가장큰 trucks 12 출력된다.

 

plot(cars, type="o", col="blue", ylim=g_range,

     axes=FALSE, ann=FALSE)

 

axis(1, at=1:5, lab=c("mon","tye","wed","thu","fri"))  #가로축

axis(2)  #세로축

box() #그래프 담는 박스가 생김

lines(trucks, type="o", pch=22, lty=2, col="red")

legend(1,12,c("cars","trucks"), col=c("blue","red"),

       cex=0.8, pch=21:22, lty=1:2)

 

※설명:

cex = 0.8  글씨크기

 

 

 

 

문제134.

위의 코드를 활용해서 치킨집의 창업/폐업 현황을

라인 그래프로 시각화 하시오

 

graphics.off()

 

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

drop_cnt<-read.csv("d:\\data\\폐업건수.csv", header=T)

 

g <- create_cnt$치킨집

m <- drop_cnt$치킨집

g_range <- range(0, g, m)

plot(g, type="o", col="blue", ylim=g_range,

     axes=FALSE, ann=FALSE)

axis(1, at=1:10, lab=create_cnt$X)

axis(2)

box()

lines(m, type="o", pch=22, lty=2, col="red")

title(main="치킨집 창업/폐업현황", col.main="red", font.main=4)

title(xlab="Years", col.lab=rgb(0,0.5,0))

title(ylab="Total", col.lab=rgb(0,0.5,0))

legend(5, g_range[2], c("창업","폐업"), cex=0.8,

       col=c("blue","red"), pch=21:22, lty=1:2)

 

 



 


 

 

 

 

 

문제135.

내용을 활용하여 창업/폐업을 샤이니로 자동화 하시오

 

library(shiny)

library(datasets)

 

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

drop_cnt<-read.csv("d:\\data\\폐업건수.csv", header=T)

#create_cnt

#drop_cnt

#밖에서 rbind 시키니까 에러뜬다.

 

# Define UI ----

ui <- fluidPage(   

 

  # Give the page a title

  titlePanel("년도별 업종별 창업현황"),

 

  # Generate a row with a sidebar

  sidebarLayout(     

   

    # Define the sidebar with one input

    sidebarPanel(

      selectInput("region", "업종:",

                  # 우리의 csv는 컬럼네임즈가 치킨집,커피음료...이렇게 되어있음

                  #자료 맨앞에 X가 있는데 그걸 없어고 싶다!!

                  # colnames(create_cnt)[-1] 이걸 추가해주면 됨!

                  choices=clonames(create_cnt)[-1]),

      hr(), #희미한 선있음 그거임

      helpText("Data from AT&T (1961) The World's Telephones.")

    ),

   

    # Create a spot for the barplot

    mainPanel(

      plotOutput("phonePlot") 

    )

   

  )

)

 

# Define server logic ----

server <-function(input, output) {

 

  # Fill in the spot we created for a plot

  output$phonePlot <- renderPlot({

   

    # Render a barplot

   

    g <- create_cnt[, input$region]

    m <- drop_cnt[, input$region]

    g_range <- range(0, g, m)

    plot(g, type="o", col="blue", ylim=g_range,

         axis=FALSE, ann=FALSE)

    axis(1, at=1:10, lab=create_cnt$X)

# axis=FALSE, ann=FALSE 사용하여

#기본축과 주석을 비활성화하여 자체 축을 만들 있음.

# at 인수는 레이블을 배치 위치를 지정

# lab 이라는 벡터는 실제 레이블을 저장.

 


    axis(2)

    box()

    lines(m, type="o", pch=22, lty=2, col="red")

    title(main=input$region, col.main="red", font.main=4)

    title(xlab="Years", col.lab=rgb(0,0.5,0))

    title(ylab="Total", col.lab=rgb(0,0.5,0))

    legend(5, g_range[2], c("창업","폐업"), cex=0.8,

           col=c("blue","red"), pch=21:22, lty=1:2)

   

   

  )

  })

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

 

 

그래프

1. 기본 막대 그래프

2. 기본 원형 그래프

3. 기본 라인 그래프

4. ggplot2 막대 그래프

5. plotly 원형 그래프

6. plotly 라인 그래프

 

 

 

ggplot2 막대 그래프

install.packages("ggplot2")

library(ggplot2)

xdata<-as.factor(create_cnt[,"X"])

ydata<-as.factor(create_cnt[,"치킨집"])

xdata  #년도

ydata  #치킨집 건수

 

fdata=data.frame(x=xdata, y=ydata)

fdata

x    y
1  2005  530
2  2006  525
3  2007  507
4  2008  543
5  2009  711
6  2010  865
7  2011  837
8  2012  986
9  2013  954
10 2014 1193

 

ggplot(fdata) #여기는 2 안붙

#그러면 화면이 나옴

 

ggplot(fdata) + geom_bar(aes_string(x='x', y='y', fill='x'),

                         stat='identity',

                         show.legend = T)

# x,y fdata에 선언해준 x,y 데이터값

# fill legend

# stat='identity' y축의 높이를 데이터의 값으로 하는

#bar그래프의 형태로 지정한다는 것입니다.

# show.legend=T 해주면 볼 수 있음

 


 

 

 

 

문제136.

csv파일을 불러와서 x축과 y축을 정해서

위의 ggplot 막대 그래프를 그리시오

(lessoin_17.csv파일불러오는 샤이니 기본코드_수정된것.txt)

 

아래코드실행!


설명주석

 

session        

 

session 은 주어진 함수에 전달 된 객체.

보통 이걸 사용해서 2개 이상의 객체를 구분시켜줌

inputId        

입력객체의 ID

label        

입력객체에 설정할 label

choices        

 

선택할 값 목록. 목록의 요소elements 이름이 지정되면 값이 아닌 해당 이름으로         사용자에게 표시됩니다.

가장 바깥쪽 이름이 해당 하위 목록의 요소에 대한 "optgroup" 라벨로 사용됨.

이렇게 하면 유사한 선택 항목을 그룹화하고 라벨을 지정할 수 있음.

 

selected        

처음에 선택한 값(또는 여러값인 경우 multiple=TRUE).

지정하지 않으면 단일 선택 목록의 경우 첫번째 값으로 지정되고

여러 선택 목록의 경우 기본값이 설정되지 않음.

options        

옵션목록. selectize.js의 설명서 참조. 내부의 I() 는 리터럴 javascript코드로 취급되므로 rendeDataTable() 참조

server        

선택값을 저장하는 choices  서버측에서 동적으로 선택 옵션을 불러온다.

data        

데이터프레임. 선택사항을 열 이름으로 검색하여 사용. selectInput

 

############## set this file location to working directory ##########################

packages <- 'rstudioapi'      #setdiff 차이

if (length(setdiff(packages, rownames(installed.packages()))) > 0) {

  install.packages(setdiff(packages, rownames(installed.packages())))

}

library('rstudioapi')

current_dir<-dirname(rstudioapi::getSourceEditorContext()$path)

setwd(current_dir)

 

package_in<-function(p_name,option=1){

  packages <- p_name

  if (length(setdiff(packages, rownames(installed.packages()))) > 0) {

    install.packages(setdiff(packages, rownames(installed.packages())))

  }

  if (option==1){

    library(p_name,character.only = TRUE)

  }

}

 

###########################1. 패키지 설치##########################################

 

package_in('shinydashboard')

package_in('shiny')

package_in('ggplot2')

 

 

######################### 2. 화면 개발 ###########################################

 

sidebar <- dashboardSidebar(

  sidebarMenu(  #왼쪽 블랙이 sidebarMenu

    fileInput("file1", "Choose CSV File",   #Choose CSV File 변경가능

              multiple = TRUE,  # 컨트롤+ 여러파일 선택하는 기능

#하나만 부르고 싶으면 FALSE !

              accept = c("text/csv",".xlsx",".txt",

                         "text/comma-separated-values,text/plain",

                         ".csv")),

   

    menuItem("Barplot",  #원형그래프, 사분위수 그래프, 통계 등등 추가함

#샤이니페이지에서 Barplot 누르면 normal, groupby 나타남.

             menuSubItem('normal',tabName='barplot'),

             #menuSubItem('groupby',tabName='bar_group')

# 'groupby' group 시킬때 켜두면 된다

    )

   

   

  )

)

 

 

body <- dashboardBody(  #우측 그래프 뜨는 연회색 페이지

 

  tabItems(

   

    ##### bar plot

    tabItem(tabName = "barplot",

            sidebarPanel(

              selectInput("in_sel_bar_xVar","x Variable:", choices = NULL),

#컬럼 선택하는 카테고리 !

              selectInput("in_sel_bar_yVar","y Variable:", choices = NULL)

            ),

            mainPanel(

              plotOutput('plot_bar')   #막대그래프가 메인패널.

# plot_bar 아래 서버단에서 불려가 쓰임.

            )

    )

)

)

 

 

 

ui<-dashboardPage(

  dashboardHeader(title='my graph'),

  sidebar,

  body

 

)  # 이제껏 배운 코드와 다르게

#여기 코드는 sidebar, body 2개를 ui 넣는다.

 

 

 

 

######################3. 서버단 개발 ########################################

 # 보면 server단이 function 으로 돌아가게끔 되어있고

# function 입력값은 input, output, session 으로 되어있다.

# input 샤이니앱 돌릴때 갖고오는 csv 파일이고

# output input 받아서 출력시키는 인자다.

# session 2개이상의 파일을 구분시켜주기 위한거다.

 

server <- function(input, output,session) {

#선택 카테고리가 2개라서, 서로다른값임을 알려주기 위해

#session 으로 분리해준다.

  options(warn = -1) #없어도 상관없음

  options(shiny.maxRequestSize = 30*1024^2) # 사이즈

 

 

 

 

  dataload<-reactive({  #데이터를 담아냄

   

    req(input$file1)

#   print(req(input$file1) ) 해보면

#name size     type
#1 창업건수.csv  440 text/csv

 

   

    file1 = input$file1

    data1 = read.csv(file1$datapath)

#  print(data1) 해보면 창업건수가 들어가있는걸 있다.

   

   

    updateSelectInput(session, "in_sel_bar_xVar", choices = colnames(data1))

    updateSelectInput(session, "in_sel_bar_yVar", choices = colnames(data1))

   

    return(data1)

 

  })

 

  ####nomal_bar

  output$plot_bar <- renderPlot({

    table_in<-dataload()

   

    xdata<-as.factor(table_in[,input$in_sel_bar_xVar])

    ydata<-as.factor(table_in[,input$in_sel_bar_yVar])

    fdata=data.frame(x=xdata,y=ydata)

   

   

    ggplot(fdata) +

      geom_bar(aes_string(x='x',y='y',fill='x'),stat = "identity",show.legend=F)    

  })

}

 

######################### 4. 샤이니 실행 ###############################

 

shinyApp(ui = ui, server = server)

 

 

 

샤이니 실행시키고

Browser 클릭하면 원하는 파일을 불러올 있음.

 

 

 

 

plotly 원형그래프

install.packages("plotly")

library(plotly)

plot_ly(create_cnt,

        labels = ~create_cnt[ , "X"],

        values = ~create_cnt[ ,"치킨집"],

        type='pie' )

 

 


 

 

plot_ly(create_cnt,

        labels = ~colnames(create_cnt)[-1],

        values=~as.factor( create_cnt[create_cnt$X == '2013',-1] ),

        type='pie')

# as.factor 안쓰면 컬럼명이 같이 나와서 error 나옴!

#확인값: create_cnt[create_cnt$X='2013', ]

 

 

 

 

 

 

 

문제137(점심시간문제)

문제 136번은 ggplot 으로 막대그래프를 그리는 코드였는데,

이번에는 plotly 원형 그래프 출력되는 샤이니 코드를 작성하시오

(년도 선택하는 select input box 하나만 나오게!)

 

############## set this file location to working directory

##########################

packages <- 'rstudioapi'

if (length(setdiff(packages, rownames(installed.packages()))) > 0) {

  install.packages(setdiff(packages, rownames(installed.packages())))

}

library('rstudioapi')

current_dir<-dirname(rstudioapi::getSourceEditorContext()$path)

setwd(current_dir)

 

package_in<-function(p_name,option=1){

  packages <- p_name

  if (length(setdiff(packages, rownames(installed.packages()))) > 0) {

    install.packages(setdiff(packages, rownames(installed.packages())))

  }

  if (option==1){

    library(p_name,character.only = TRUE)

  }

}

 

###########################1. 패키지

설치##########################################

 

package_in('shinydashboard')

package_in('shiny')

package_in('ggplot2')

package_in('plotly')

 

######################### 2. 화면 개발

###########################################

 

sidebar <- dashboardSidebar(

  sidebarMenu(

    fileInput("file1", "Choose CSV File",

              multiple = FALSE,

              accept = c("text/csv",".xlsx",".txt",

                         "text/comma-separated-values,text/plain",

                         ".csv")),

   

    menuItem("Plot",

             menuSubItem('Barplot',tabName='barplot'),

             menuSubItem('Piechart',tabName='piechart'),

             menuSubItem('Linechart',tabName='linechart')

    )

   

   

  )

)

 

 

body <- dashboardBody(

 

  tabItems(

   

    ##### bar plot

    tabItem(tabName = "barplot",

            sidebarPanel(

              selectInput("in_sel_bar_xVar","x Variable:", choices = NULL),

              selectInput("in_sel_bar_yVar","y Variable:", choices = NULL)

            ),

            mainPanel(

              plotOutput('plot_bar')

            )

    ),

    ##### piechart

    tabItem(tabName = "piechart",

            sidebarPanel(

              selectInput("in_sel_pie_xVar","x Variable:", choices = NULL)

            ),

            mainPanel(

              plotlyOutput('plot_pie')

            )

    ),

    ##### linechart

    tabItem(tabName = "linechart",

            sidebarPanel(

              selectInput("in_sel_line_xVar","x Variable:", choices = NULL),

              selectInput("in_sel_line_yVar","Y Variable:", choices = NULL)

            ),

            mainPanel(

              plotlyOutput('plot_line')

            )

    )

  )

)

 

 

 

ui<-dashboardPage(

  dashboardHeader(title='my graph'),

  sidebar,

  body

 

)

 

 

 

 

######################3. 서버단 개발 ########################################

 

 

server <- function(input, output,session) {

  options(warn = -1)

  options(shiny.maxRequestSize = 30*1024^2)

 

 

 

 

  dataload<-reactive({

    req(input$file1)

   

    file1 = input$file1

    data1 = read.csv(file1$datapath)

   

   

    updateSelectInput(session, "in_sel_bar_xVar", choices = colnames(data1))

    updateSelectInput(session, "in_sel_bar_yVar", choices = colnames(data1))

   

    updateSelectInput(session, "in_sel_pie_xVar", choices = data1[,1])

   

    updateSelectInput(session, "in_sel_line_xVar", choices = colnames(data1))

    updateSelectInput(session, "in_sel_line_yVar", choices = colnames(data1))

    return(data1)

   

  })

 

  ####nomal_bar

  output$plot_bar <- renderPlot({

    table_in<-dataload()

   

    xdata<-as.factor(table_in[,input$in_sel_bar_xVar])

    ydata<-as.factor(table_in[,input$in_sel_bar_yVar])

    fdata=data.frame(x=xdata,y=ydata)

   

   

    ggplot(fdata) +

      geom_bar(aes_string(x='x',y='y',fill='x'),stat =

                 "identity",show.legend=F)

   

   

  })

 

  output$plot_pie <- renderPlotly({

    table_in<-dataload()

   

    plot_ly(table_in, labels = ~colnames(table_in)[-1], values=~as.factor(

      table_in[table_in[,1] == input$in_sel_pie_xVar,-1] ),type='pie')

   

   

  })

 

  output$plot_line <- renderPlotly({

   

    table_in<-dataload()

   

    #라벨 명 지정

    x <- list(title = input$in_sel_line_xVar)

    y <- list(title = input$in_sel_line_yVar)

   

    plot_ly(data = table_in,

            x=~table_in[,input$in_sel_line_xVar],

            y=~table_in[,input$in_sel_line_yVar],

            type='scatter',mode='dot')%>%

      layout(xaxis = x, yaxis = y)

   

   

  })

 

}

 

######################### 4. 샤이니 실행 ###############################

 

shinyApp(ui = ui, server = server)

 

 

 

 

 

 

 

소리를 그래프로 시각화 하는 방법

*소리를 시각화 하기 위한 R코드

 

install.packages("tuneR")

library(tuneR)

audio<-readWave("output.wav")

play(audio)

 

head(audio@left, 1000)

#1000개만 시각화 하라

plot(head(audio@left, 1000))

 

 

 

 

 

 

 

문제138.

원더걸스의 so hot 시각화 하시오!

 

audio<-readWave("sohot.wav")

play(audio)

 

head(audio@left, 1000)

# 오래걸림

plot(head(audio@left, 1000))

 

 

 

 

 

문제139.

정상적인 심장박동 소리를 포함해서 비정상적인 심장박동 소리를

각각 시각화 하시오

 

audio<-readWave("normal.wav")

#정상심장박동소리

 

audio1<-readWave("ps.wav")

audio2<-readWave("mr.wav")

audio3<-readWave("aR.wav")

#audio1,2,3 문제있는 심장박동소리

play(audio3)

 

graphics.off()

par(mfrow=c(2,2))

#가로2, 세로2

 

par(mar=c(1,1,1,1))

#4

 

#그래프 여러개를 한번에 볼 수 있게 해주는 코드

 

plot(audio)

plot(audio1)

plot(audio2)

plot(audio3)

 

 

 

 

 

 

문제140.

치킨집의 년도별 창업 현황을 plotly 라인 그래프로 그리시오

 

library(shiny)

library(datasets)

library(plotly)

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

drop_cnt<-read.csv("d:\\data\\폐업건수.csv", header=T)

 

 

plot_ly(data = create_cnt,

        x = ~create_cnt[ , "X"],   # plot_ly 변수앞에 ~ 표시 해줌

        y = ~create_cnt[ ,"치킨집"],

        type = "scatter",

        mode = "dot")

 

 

 

 

 

문제141.

샤이니의 사이드 메뉴에 linechart 추가하고

linechart 클릭하면 업종을 물어보게해서

해당 업종의 년도별 창업현황이 출력되게 하시오

 

 

library(shiny)

library(datasets)

library(plotly)

create_cnt<-read.csv("d:\\data\\창업건수.csv", header=T)   #기존코드에서 추가한 부분

drop_cnt<-read.csv("d:\\data\\폐업건수.csv", header=T)

 

 

 

############## set this file location to working directory

##########################

packages <- 'rstudioapi'

if (length(setdiff(packages, rownames(installed.packages()))) > 0) {

  install.packages(setdiff(packages, rownames(installed.packages())))

}

library('rstudioapi')

current_dir<-dirname(rstudioapi::getSourceEditorContext()$path)

setwd(current_dir)

 

package_in<-function(p_name,option=1){

  packages <- p_name

  if (length(setdiff(packages, rownames(installed.packages()))) > 0) {

    install.packages(setdiff(packages, rownames(installed.packages())))

  }

  if (option==1){

    library(p_name,character.only = TRUE)

  }

}

 

###########################1. 패키지

설치##########################################

 

package_in('shinydashboard')

package_in('shiny')

package_in('ggplot2')

package_in('plotly')

 

######################### 2. 화면 개발

###########################################

 

sidebar <- dashboardSidebar(

  sidebarMenu(

    fileInput("file1", "Choose CSV File",

              multiple = FALSE,

              accept = c("text/csv",".xlsx",".txt",

                         "text/comma-separated-values,text/plain",

                         ".csv")),

   

    menuItem("Plot",

             menuSubItem('Barplot',tabName='barplot'),

             menuSubItem('Piechart',tabName='piechart'),

             menuSubItem('Linechart',tabName='linechart')

    )

   

   

  )

)

 

 

body <- dashboardBody(

 

  tabItems(

   

    ##### bar plot

    tabItem(tabName = "barplot",

            sidebarPanel(

              selectInput("in_sel_bar_xVar","x Variable:", choices = NULL),

              selectInput("in_sel_bar_yVar","y Variable:", choices = NULL)

            ),

            mainPanel(

              plotOutput('plot_bar')

            )

    ),

    ##### piechart

    tabItem(tabName = "piechart",

            sidebarPanel(

              selectInput("in_sel_pie_xVar","x Variable:", choices = NULL)

            ),

            mainPanel(

              plotlyOutput('plot_pie')

            )

    ),

    ##### linechart

    tabItem(tabName = "linechart",

            sidebarPanel(

              selectInput("in_sel_line_xVar","x Variable:", choices = NULL),

              selectInput("in_sel_line_yVar","Y Variable:", choices = NULL)

            ),

            mainPanel(

              plotlyOutput('plot_line')

            )

    )

  )

)

 

 

 

ui<-dashboardPage(

  dashboardHeader(title='my graph'),

  sidebar,

  body

 

)

 

 

 

 

######################3. 서버단 개발 ########################################

 

 

server <- function(input, output,session) {

  options(warn = -1)

  options(shiny.maxRequestSize = 30*1024^2)

 

 

 

 

  dataload<-reactive({

    req(input$file1)

   

    file1 = input$file1

    data1 = read.csv(file1$datapath)

   

   

    updateSelectInput(session, "in_sel_bar_xVar", choices = colnames(data1))

    updateSelectInput(session, "in_sel_bar_yVar", choices = colnames(data1))

   

    updateSelectInput(session, "in_sel_pie_xVar", choices = data1[,1])

   

    updateSelectInput(session, "in_sel_line_xVar", choices = colnames(data1))

    updateSelectInput(session, "in_sel_line_yVar", choices = colnames(data1))

    return(data1)

   

  })

 

  ####nomal_bar

  output$plot_bar <- renderPlot({

    table_in<-dataload()

   

    xdata<-as.factor(table_in[,input$in_sel_bar_xVar])

    ydata<-as.factor(table_in[,input$in_sel_bar_yVar])

    fdata=data.frame(x=xdata,y=ydata)

   

   

    ggplot(fdata) +

      geom_bar(aes_string(x='x',y='y',fill='x'),stat =

                 "identity",show.legend=F)

   

   

  })

 

  output$plot_pie <- renderPlotly({

    table_in<-dataload()

   

    plot_ly(table_in, labels = ~colnames(table_in)[-1], values=~as.factor(

      table_in[table_in[,1] == input$in_sel_pie_xVar,-1] ),type='pie')

   

   

  })

 

  output$plot_line <- renderPlotly({

   

    table_in<-dataload()

   

    #라벨 명 지정

    x <- list(title = input$in_sel_line_xVar)

    y <- list(title = input$in_sel_line_yVar)

   

    plot_ly(data = table_in,

            x=~table_in[,input$in_sel_line_xVar],

            y=~table_in[,input$in_sel_line_yVar],

            type='scatter',mode='dot')%>%

      layout(xaxis = x, yaxis = y)

   

   

  })

 

}

######################### 4. 샤이니 실행 ###############################

 

shinyApp(ui = ui, server = server)

 

 

 

 

 


728x90
반응형

'R' 카테고리의 다른 글

그래프(사분위수, 지도그래프, 워드클라우드)  (0) 2019.03.09
그래프(산포도, 구글 그래프)  (0) 2019.03.09
SHINY 해체  (0) 2019.03.09
SQL과 R과 비교(서브쿼리)  (0) 2019.03.09
SQL과 R과 비교(조인)  (0) 2019.03.09