■ 그래프
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)
'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 |