본문 바로가기

R

그래프(사분위수, 지도그래프, 워드클라우드)

728x90
반응형

사분위수 그래프

*사분위수 그래프로 분석해야 하는 데이터

 

1. 데이터의 퍼짐정도가 매우 경우

2. 이상치 있는 경우

3. 평균 하나로는 통계를 대표할 없다.

중앙값, 최빈값, 최대값, 최소값, 평균값

4. 사분위수 그래프를 가로로 눕혀놓고 보면 정규분포 모양을

확인할 있다.

 

예제

install.packages("lattice")

library(lattice)
> bwplot(emp$sal)

 

 


 

> summary(emp$sal)
   Min.    1st Qu.  Median    Mean    3rd Qu.    Max.
    800   
 1250    1600        2148     2988      5000

                                       

최소값   1번째   중앙값  평균값  3번째    사분위수

   사분위수  (Q2)            (Q3)      최대값

 

 

그림에서 맨왼쪽 점선이 최소값

       점은 중앙값

     오른쪽 점선이 최대값

 

박스의 위치를 보고 emp테이블의 sal 몰려있는 구간을 파악할 있다.

 

 

 

 

문제144.

우리반 나이 데이터를 가지고 사분위수 그래프를 그리시오

emp8<-read.csv("emp8.csv", header=T)

emp8

library(lattice)

bwplot(emp8$age)

 

 


 

summary(emp8$age)

Min.      1st Qu.  Median    Mean      3rd Qu.    Max.
23.00  
  26.00    27.00      27.74         28.00    40.00

 

 

 

 

 

 

지도그래프

 

문제151.

maps 패키지를 설치하고 중국지도만 확대해서 출력하시오

 

install.packages("maps")

install.packages("mapproj")

library(maps)

library(mapproj)

map("world")

map("world","china")

 

문제152.

우리나라 지도를 출력하시오

map("world","korea")

 

 

 

문제153.

프랑스 지도를 출력하시오

map("world","france")

 

 

 

문제154.

구글 지도 그래프를 이용해서 서울 지역의 지하철 2호선의 그래프를

시각화 하시오

install.packages("ggplot2")

install.packages("ggmap")

library(ggplot2)

library(ggmap)


 

loc2<-read.csv("서울지하철2호선위경도정보.csv", header=T)

head(loc2)

 

loc3<-read.csv("서울지하철3호선역위경도정보.csv", header=T)

head(loc3)

 

center<-c(mean(loc2$LON), mean(loc2$LAT))

center

 

kor<-get_map(center, zoom=11, maptype="roadmap")

kor #API 갖고오라고 에러뜸

 

 

# https://cloud.google.com/maps-platform/?hl=ko -> 시작하기

# -> Google Maps Platform 사용 설정 하기 다 체크 하고 계속해서 회원가입하고

 

#API 얻으면

 

register_google(key="AIzaSyBz8znHEgVjXvEJG83ZOU_SHygSs9w0RsM")

# 얻은 키를 넣고

kor <- get_map(center, zoom=11, maptype="roadmap")

ggmap(kor)

 


 

 

 

kor.map <- ggmap(kor) + geom_point(data=loc,aes(x=LON,y=LAT),size=3, alpha=0.7)

kor.map + geom_text(data=loc, aes(x=LON,y=LAT+0.005,label=역명),size=3)

 




 

 

 

 

 

문제155. 지역별 인구수에 대한 지도 그래프를 그리시오

 

 

library(ggmap)

library(ggplot2)

 

register_google(key="AIzaSyDrHR63mX00v-bRlSlS54PbUYeC7KOcIVM")

 

 

population <- read.csv("지역별인구.csv",header=T)

head(population)

 

cen <- c(mean(population$LON),mean(population$LAT))

 

map <- get_googlemap(center=cen, maptype="roadmap",zoom=7)

ggmap(map)

 

ggmap(map)+

  geom_point(data=population,aes(x=LON,y=LAT,colour=지역,size=총인구수))+

  xlab("longitude(경도)") +

  ylab("latitude(위도)")

 

ggmap(map)+

  geom_text(data=population,aes(x=LON,y=LAT,color=factor(지역),size=10,label=seq_along(지역)))

 

 

 

 

 

워드 클라우드

 

문제156. 겨울왕국 대본을 워드 클라우드로 그리시오 !

 

#####변수, 그래프 청소!

 

install.packages('KoNLP')

install.packages('wordcloud')

install.packages('plyr')

install.packages('stringi')

 

library(rJava)

library(KoNLP)

library(wordcloud)

library(plyr)

library(stringi)

 

# winter.txt 하단에 엔터한줄넣고, utf-8로 저장.

 

#$useSejongDic()  # 세종사전에 있는 한글을 R 로드하는 명령어

# 4 All 클릭

# 굳이 안해도

 

winter <- readLines('winter.txt')

 

#단어만 추출

nouns <- extractNoun(winter)  

 

nouns <- unlist(nouns)

 

#명사 2철자 이상인 것만 추출

nouns <- nouns[nchar(nouns)>=2]

 

#단어별 건수 출력

cnouns <- count(nouns)

# you 181

# You 53

# YOU 44

 

 

#색깔 추가

pal <- brewer.pal(6,"Dark2")

pal <- pal[-(1)]

 

#글씨체 추가

windowsFonts(malgun=windowsFont("맑은 고딕"))

 

# data.table(words=cnouns$x, freq=cnouns$freq)

 

wordcloud(words=cnouns$x,     # 단어

freq=cnouns$freq,  # 건수

colors=pal,                # 색깔

min.freq=3,              # 빈도수가 3단어 이상인 것만

          random.order=F,     # F 하면 가장 많은 것부터

  # 중앙에서 부터 퍼지게 한다.

family="malgun")  #위에쓴 '맑은글씨체' 시각화

 

 

 

 

 

 

문제157.

영어 성경을 워드 클라우드로 시각화 하시오!

 

##변수, 그래프창 청소하고 !!

 

install.packages('KoNLP')

install.packages('wordcloud')

install.packages('plyr')

install.packages('stringi')

library(rJava)

library(KoNLP)

library(wordcloud)

library(plyr)

library(stringi)

 

# winter.txt 하단에 엔터한줄넣고, utf-8로 저장.

 

useSejongDic()

 

 

winter <- readLines('NIV.txt')

 

nouns <- extractNoun(winter)  

 

nouns <- unlist(nouns)

 

nouns <- nouns[nchar(nouns)>=2]

 

cnouns <- count(nouns)

 

 

pal <- brewer.pal(6,"Dark2")

pal <- pal[-(1)]

 

windowsFonts(malgun=windowsFont("맑은 고딕"))

 

data.table(words=cnouns$x, freq=cnouns$freq)

 

wordcloud(words=cnouns$x, freq=cnouns$freq, colors=pal, min.freq=3,

          random.order=F, family="malgun")

 


 


 

 

 

 

문제158.

안철수 연설문을 워드 클라우드로 시각화 하시오!

 

##변수, 그래프창 청소하고 !!

 

install.packages('KoNLP')

install.packages('wordcloud')

install.packages('plyr')

install.packages('stringi')

library(rJava)

library(KoNLP)

library(wordcloud)

library(plyr)

library(stringi)

 

# winter.txt 하단에 엔터한줄넣고, utf-8로 저장.

 

useSejongDic()

 

ahn <- "안녕하십니까 안철수입니다.

 

저는 지난 7월말에 말씀 드린 대로 국민들의 의견을 듣고자 많은 분들을 만났습니다.

 

동안 저는 재미있는 별명도 얻었고.

최근에는 저를 소재로 한 유머도 유행하더군요.

 

그동안 제 답을 기다려오신 여러 분들의 애정이라고 생각하고

또한 무겁게 받아들이겠습니다.

 

기업인과 교수의 삶을 살아온 저로서는,

국가경영의 막중한 책임을 지는 결심에 이르기까지

정말 많은 생각을 하지 않을 수 없었습니다.

 

저는 그동안 춘천에서 만난 어르신, 명예퇴직을 앞둔 중년의 가장,

30대의 쌍둥이 엄마와 같은 많은 이웃들을 만나 뵈었고,

분야에서 경륜과 전문성을 가진 분들도 만났습니다.

 

가능하면 조용하게 경청하고 귀를 기울였습니다.

 

어느 한분 힘들지 않은 분들이 없었습니다.

 

중산층이 무너지고 저소득층이 너무 고통 받고 있었습니다.

 

하지만 그렇게 힘들고 고단한 삶의 과정에서도

그분들은 끊임없이 희망을 만들고 계셨습니다.

 

자신보다는 우리 아이들의 미래를 위해

참고 견디고 희생하고 헌신할 준비가 되어 있습니다.

 

제가 희망을 드린 것이 아니라 제가 오히려 그분들께 힘과 용기를 얻었습니다.

모두 고맙습니다.

여러분이 제게는 스승입니다.

 

분들이 저를 한걸음 더 나아가게 했습니다.

 

분들이 제게 한결 같이 하신 말씀이 있습니다.

 

'정치가 이래서는 안 된다'는 겁니다.

'문제를 풀어야 할 정치가 문제를 만들고 있다'고 하셨습니다.

'국민들의 삶을 외면하고 국민을 분열시키고, 국민을 무시하고,

서로 싸우기만 하는 정치에 실망하고 절망했다' 하셨습니다.

 

한 번도 정치에 발 딛지 않은 제가 '잘 할 수 있을까' 고민할 때

많은 분들이 왜 제게 지지를 보내는지 설명해 주셨습니다.

 

'이제 좀 정치를 다르게 해보자, 새롭게 출발해보자'는 뜻이라는 겁니다.

 

하지만 저는 제 역량에 대해 고민했습니다.

국가의 리더라는 자리는 절대 한 개인이 영광으로 탐할 자리가 될 수도 없고,

되어서도 안 된다고 생각합니다.

 

저에게는 당선 여부보다는 잘 해낼 수 있느냐가 중요했습니다.

 

그래서 스스로에게 거듭 질문을 던지고 대화를 통해 답을 찾고자 노력했습니다.

저는 이제 제 자신 스스로에게 질문했던 답을 내어놓으려 합니다.

 

지금까지 국민들은 저를 통해 정치쇄신에 대한 열망을 표현해주셨습니다.

 

저는 이제

이번 18대 대통령 선거에 출마함으로써

열망을 실천해내는 사람이 되려 합니다.

 

저에게 주어진 시대의 숙제를 감당하려고 합니다.

 

저는 먼저 정치개혁은 선거과정에서부터 시작해야한다고 생각합니다.

국민의 반을 적으로 돌리면서 통합을 외치는 것은 위선입니다.

선거과정에서 부당하고 저급한 흑색선전과 이전투구를 계속하면,

서로를 증오하고 지지자들을 분열시키며, 나아가서는 국민을 분열시킵니다.

그렇게 선거가 끝나고 나면 선거에서 이겨도 국민의 절반 밖에 마음을 얻지 못합니다.

 

앞으로도 이런 일이 계속 된다면 다음 5년도

분열과 증오의 시간을 보낼 수밖에 없을 겁니다.

누가 대통령이 되더라도 통합과 사회문제 해결은 요원한 일일 것입니다.

 

그래서 저는 저부터 선거과정에서의 쇄신을 약속드리겠습니다.

 

저는 선거과정에서 어떤 어려움과 유혹이 있더라도

흑색선전과 같은 낡은 정치는 하지 않겠습니다.

 

그리고 어떤 결과가 나오더라도

저를 지지하는 분들이 그 결과를 존중하고 같이 축하할수 있도록 노력하겠습니다.

 

박근혜 후보와 문재인 후보께 제안합니다.

 

모두 한자리에 모여,

국민들을 증인으로 선의의 정책 경쟁을 할 것을 약속하면 어떻겠습니까?

 

그리고 선거후에도 승리한 사람은 다른 후보들의 이야기에 귀를 기울이며,

패배한 사람은 깨끗이 결과에 승복하여

나은 우리의 미래를 만들기 위해 협력할 것도 같이 약속하면 어떨까요?

 

그래야 분열과 증오의 정치를 넘어서

우리의 미래를 위한 에너지로 바꿔 놓을 수 있을 겁니다.

 

누가 당선 되더라도 국민을 위해서라면

서로 도울 수 있고 또 함께 할 수 있는

통합의 시작점이 될 수 있습니다.

 

그러한 정책 대결 속에서 제가 만약 당선된다면

다른 후보들의 더 나은 정책이 있다면 받아들이고 또 경청할 겁니다.

 

이것이 바로 국민들이 원하는 덧셈의 정치, 통합의 정치라고 저는 생각합니다.

 

많은 분들이 정치 경험도 없는데

막상 대통령이 되면 어떻게 할 것이냐고 걱정을 하셨습니다.

정치라는 험한 곳에 들어가 괜히 만신창이가 되지 말라고도 하셨습니다.

지금 이 자리에도 그런 생각을 가진 분들이 계실 겁니다.

 

저는 정치경험뿐 아니라 조직도 없고, 세력도 없지만, 그만큼 빚진 것도 없습니다.

정치경험 대신 국민들께 들은 이야기를 소중하게 가지고 가겠습니다.

조직과 세력 대신 나라를 위해 애쓰시는 모든 분들과 함께 나아가겠습니다.

빚진 게 없는 대신, 공직을 전리품으로 배분하는 일만큼은 결코 하지 않을 것입니다.

 

사실 대통령 한 사람의 힘으로 5년 만에 모든 문제를 해결 할 수는 없습니다.

그렇지만 대한민국은 이미 현명한 국민들과 많은 전문가들이

요소요소에서 각자가 역할을 하는 커다란 시스템을 이루고 있습니다.

 

속에 이미 답이 있습니다.

 

지금 대한민국은 낡은 체제와 미래가치가 충돌하고 있습니다.

이제 낡은 물줄기를 새로운 미래를 향해 바꿔야 합니다.

국민들의 민의를 반영하지 못하는 정치 시스템,

빈부격차가 심해지고 일자리를 창출하지 못하는 경제 시스템,

계층 간의 이동이 차단된 사회시스템,

공정한 기회가 부여되지 않는 기득권 과보호구조,

지식산업시대에 역행하는 옛날 방식의 의사결정구조,

 

이와 같은 것들로는 미래를 열어갈 수 없습니다.

이상 이대로는 안 됩니다.

 

국민들은 이제 정치부터 바꿔야 한다고 이야기하십니다.

앞으로 5년은 누가 대통령이 되더라도 매우 힘든 상황이 전개될 것입니다.

 

국내의 가계부채와 부동산 문제가 정말 심각합니다. 세계적인 장기불황까지 겹쳐 한꺼번에

위기적 상황이 닥쳐올 가능성이 많습니다.

 

이러한 상황 하에서 제가 혼자서 모든 문제를 해결하고

세상을 바꿀 수 있다고 생각하지 않습니다.

 

저도 열심히 살려고 노력했지만 부족하고 실수도 하고 결점이 많은 사람이기 때문입니다.

 

하지만, 현명한 국민들과 전문가들 속에서 답을 구하고, 지혜를 모으면

그래도 최소한 물줄기는 돌려놓을 수 있을 거라고 생각합니다.

 

위기의 시대에 힘을 합쳐 함께 어려움을 헤쳐나갈 수 있다고 생각합니다.

 

정치가 바뀌어야 우리 삶이 바뀔 수 있습니다.

새로운 정치가 들어서야 민생경제 중심 경제가 들어섭니다.

 

대한민국은 새로운 경제모델이 필요합니다.

지금 논의되고 있는 경제민주화와 복지는 성장동력과 결합하는 경제혁신을 만들어야 합니다.

 

평화체제는 역시 안보와 균형을 맞출 때 실현가능합니다.

 

정책비전과 구상의 구체적 내용은 앞으로 선거과정에서 말씀드리겠습니다.

 

저는 이번 선거 과정부터

국민의 생각이 하나로 모아지는 첫걸음을 시작했으면 좋겠습니다.

 

이번 선거를 통해 새로운 변화를 원하는 국민의 마음이 하나로 모아지면 좋겠습니다.

 

저는 세상을 움직이는 것은 진심이라고 생각합니다.

진심의 정치를 하겠습니다.

 

과정에서 저를 향한 공격이나 비난은 두렵지 않습니다. 극복하겠습니다.

나은 미래를 만들기 위해 싸워야 한다면 정정당당하게 싸울 것입니다.

사람의 선의가 가장 강력한 힘이 될 수 있다는 것을

국민여러분과 함께 증명하려고 합니다.

 

저에게 많은 이야기를 들려주신

그리고 많은 지지를 보내주신 국민여러분

저와 함께 해주십시오.

 

그래야 정치가 바뀌고 정치가 바뀌어야 우리의 삶이 바뀝니다.

변화의 열쇠는 바로 국민 여러분께 있습니다.

국민이 선택하는 새로운 변화가 시작됩니다.

 

마지막으로

제가 좋아하는 작가, 윌리엄 깁슨의 말을 하나 소개하고 싶습니다.

 

'미래는 이미 와 있다. 단지 널리 퍼져있지 않을 뿐이다'

그렇습니다. 미래는 지금 우리 앞에 있습니다.

 

고맙습니다."

 

mergeUserDic(data.frame(c('안철수', '박근혜', '문제인'), c('nqpc')))  #  추가 시키고 싶은

 

nouns <- extractNoun(ahn)  

 

nouns <- nouns[nchar(nouns)>=2]

 

cnouns <- count(nouns)

 

 

pal <- brewer.pal(6,"Dark2")

pal <- pal[-(1)]

 

windowsFonts(malgun=windowsFont("맑은 고딕"))

 

data.table(words=cnouns$x, freq=cnouns$freq)

 

wordcloud(words=cnouns$x, freq=cnouns$freq, colors=pal, min.freq=3,

          random.order=F, family="malgun")

 

 


 

 

 

 

 

문제159.

샤이니에서 wordcloud 보는 코드를 구현하시오

(확장자 gz으로 압축파일)

 

#install.packages("tm")

 

library(shiny)

 

library(tm)

library(wordcloud)

library(memoise)

 

# The list of valid books

books <<- list("A Mid Summer Night's Dream" = "summer",

               "The Merchant of Venice" = "merchant",

               "Romeo and Juliet" = "romeo")

 

# Using "memoise" to automatically cache the results

getTermMatrix <- memoise(function(book) {

  # Careful not to let just any name slip in here; a

  # malicious user could manipulate this value.

  if (!(book %in% books))

    stop("Unknown book")

 

  text <- readLines(sprintf("d://data//./%s.txt.gz", book),

 

# 압축파일이 있는 위치쓰고

# 뒤로 ./%s.txt.gz

 

                    encoding="UTF-8")

 

  myCorpus = Corpus(VectorSource(text))

  myCorpus = tm_map(myCorpus, content_transformer(tolower))

  myCorpus = tm_map(myCorpus, removePunctuation)

  myCorpus = tm_map(myCorpus, removeNumbers)

  myCorpus = tm_map(myCorpus, removeWords,

                    c(stopwords("SMART"), "thy", "thou", "thee", "the", "and", "but"))

 

  myDTM = TermDocumentMatrix(myCorpus,

                             control = list(minWordLength = 1))

 

  m = as.matrix(myDTM)

 

  sort(rowSums(m), decreasing = TRUE)

})

 

# Define UI ----

ui <- fluidPage(

  # Application title

  titlePanel("Word Cloud"),

 

  sidebarLayout(

    # Sidebar with a slider and selection inputs

    sidebarPanel(

      selectInput("selection", "Choose a book:",

                  choices = books),

      actionButton("update", "Change"),

      hr(),

      sliderInput("freq",

                  "Minimum Frequency:",

                  min = 1,  max = 50, value = 15),

      sliderInput("max",

                  "Maximum Number of Words:",

                  min = 1,  max = 300,  value = 100)

    ),

   

    # Show Word Cloud

    mainPanel(

      plotOutput("plot")

    )

  )

)

 

# Define server logic ----

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

  # Define a reactive expression for the document term matrix

  terms <- reactive({

    # Change when the "update" button is pressed...

    input$update

    # ...but not for anything else

    isolate({

      withProgress({

        setProgress(message = "Processing corpus...")

        getTermMatrix(input$selection)

      })

    })

  })

 

  # Make the wordcloud drawing predictable during a session

  wordcloud_rep <- repeatable(wordcloud)

 

  output$plot <- renderPlot({

    v <- terms()

    wordcloud_rep(names(v), v, scale=c(4,0.5),

                  min.freq = input$freq, max.words=input$max,

                  colors=brewer.pal(8, "Dark2"))

  })

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 




 

 

 

 

사분위수 그래프를 샤이니 코드에 추가

library(lattice)

bwplot(emp$sal)

**사분위수 그래프 불러오는 명령어

 

문제160.사원 테이블에 대하여 박스 그래프와 산포도 그래프를

겹쳐서 보이게 출력하시오

 

graphics.off()

plot(emp$sal, col='blue')

par(new=T)

# par 쓰면 점이랑 사분위수 그래프를 겹쳐쓸 있다.

boxplot(emp$sal)

 

 

 

 

 

 

문제161사분위수그래프를 샤이니에 추가하시오

 

############## 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')

package_in('lattice')

 

######################### 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("테이블",

             menuSubItem('Tableformat',tabName='tableformat') ),

   

    menuItem("그래프",

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

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

             menuSubItem('Lineplot',tabName='lineplot'),

             menuSubItem('Scatterplot',tabName='scatterplot'),

             menuSubItem('boxplot',tabName='boxplot')

    )

   

   

  )

)

 

 

body <- dashboardBody(

 

 

 

  tabItems(

   

    ##### table_format

    tabItem(tabName = "tableformat",

           

            mainPanel(

              DT::dataTableOutput("table")

            )

    ),

   

    ##### bar plot

    tabItem(tabName = "barplot",

            sidebarPanel(

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

              selectInput("in_sel_bar_xVar","x 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')

            )

    ),

    ##### line plot

    tabItem(tabName = "lineplot",

            sidebarPanel(

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

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

             

            ),

            mainPanel(

              plotlyOutput('plot_line')

            )

    ),

    ##### scatter plot

    tabItem(tabName = "scatterplot",

            sidebarPanel(

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

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

             

            ),

            mainPanel(

              plotOutput('plot_scatter'),

              textOutput('text_scatter')

            )

    ),

    ##### scatter plot

    tabItem(tabName = "boxplot",

            sidebarPanel(

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

             

            ),

            mainPanel(

              plotOutput('plot_box')

            )

    )

  )

)

 

 

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))

   

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

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

   

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

   

    return(data1)

   

  })

 

  ####table_format

  output$table <- DT::renderDataTable(DT::datatable({

    req(input$file1)

   

    file1 = input$file1

    data1 = read.csv(file1$datapath)

   

   

  }))

 

 

  ####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)

   

   

  })

 

  output$plot_scatter <- renderPlot({

    table_in<-dataload()

   

    xyplot(table_in[,input$in_sel_scatter_yVar]~table_in[,input$in_sel_scatter_xVar], grid=T,type=c('p','smooth'),col.line='darkorange',lwd=2, xlab=input$in_sel_scatter_xVar,ylab=input$in_sel_scatter_yVar)

   

  })

 

  output$text_scatter <- renderText({

    table_in<-dataload()

    paste("The correlation between the two is: ", cor(table_in[,input$in_sel_scatter_yVar],table_in[,input$in_sel_scatter_xVar]))

  })

 

  output$plot_box <- renderPlot({

    table_in<-dataload()

   

    bwplot(~table_in[,input$in_sel_box_xVar], data=table_in,xlab=input$in_sel_box_xVar)

   

  })

 

 

}

 

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

 

shinyApp(ui = ui, server = server)

 

 

 

 

 

**오라클 연동 코드는 너무 무거워서 연동안된 코드로 change!

 

 

############## 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')

package_in('lattice')

 

######################### 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("테이블",

             menuSubItem('Tableformat',tabName='tableformat'),

             menuSubItem('db connection',tabName='dbconnect') ),

   

    menuItem("그래프",

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

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

             menuSubItem('Lineplot',tabName='lineplot'),

             menuSubItem('Scatterplot',tabName='scatterplot')

    )

   

   

  )

)

 

 

body <- dashboardBody(

 

 

 

  tabItems(

   

    ##### table_format

    tabItem(tabName = "tableformat",

           

            mainPanel(

              DT::dataTableOutput("table")

            )

    ),

   

    ##### bar plot

    tabItem(tabName = "barplot",

            sidebarPanel(

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

              selectInput("in_sel_bar_xVar","x 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')

            )

    ),

    ##### line plot

    tabItem(tabName = "lineplot",

            sidebarPanel(

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

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

             

            ),

            mainPanel(

              plotlyOutput('plot_line')

            )

    ),

    ##### scatter plot

    tabItem(tabName = "scatterplot",

            sidebarPanel(

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

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

             

            ),

            mainPanel(

              plotOutput('plot_scatter'),

              textOutput('text_scatter')

            )

    )

  )

)

 

 

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))

   

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

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

   

    return(data1)

   

  })

 

  ####table_format

  output$table <- DT::renderDataTable(DT::datatable({

    req(input$file1)

   

    file1 = input$file1

    data1 = read.csv(file1$datapath)

   

   

  }))

 

 

  ####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)

   

   

  })

 

  output$plot_scatter <- renderPlot({

    table_in<-dataload()

   

    xyplot(table_in[,input$in_sel_scatter_yVar]~table_in[,input$in_sel_scatter_xVar], grid=T,type=c('p','smooth'),col.line='darkorange',lwd=2, xlab=input$in_sel_scatter_xVar,ylab=input$in_sel_scatter_yVar)

   

  })

 

  output$text_scatter <- renderText({

    table_in<-dataload()

    paste("The correlation between the two is: ", cor(table_in[,input$in_sel_scatter_yVar],table_in[,input$in_sel_scatter_xVar]))

  })

 

 

 

 

}

 

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

 

shinyApp(ui = ui, server = server)

 

 

 

 

 

 

 

 

 

 

 

 

 


728x90
반응형

'R' 카테고리의 다른 글

R을 활용한 머신러닝 이란?  (0) 2019.03.09
샤이니에 데이터 테이블 표시하는 방법  (0) 2019.03.09
그래프(산포도, 구글 그래프)  (0) 2019.03.09
그래프(원형,막대)  (0) 2019.03.09
SHINY 해체  (0) 2019.03.09