withwork 에서는 다양한 데이터들을 시각화하여 보여주기에 각 데이터별로 이해하기 쉬운 그래프 형태로 나타냅니다.
업종/ 지역 선택
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 검색 이벤트
observeEvent(input$search,{
dong_code <- input$select1
print(dong_code)
category <- input$select_category
dong_location <- dong_ip %>% filter(행정동코드==dong_code)
#leaflet 지도 현재 위치 표시하기
output$map <- renderLeaflet({
m%>%setView(lng=dong_location[4], lat=dong_location[3], zoom=14)%>%
addPolygons(data = emd_nn%>%filter(adm_dr_nm==dong_location[[2]]),
fillColor = "red",
fillOpacity = 0.5,
color = "black",
stroke = T,
weight = 1,
group = "regions")%>%
addCircles(data=seoul2%>%filter(상권업종소분류명==category), lng=~경도, lat=~위도, label=~(상호명))
}
)
|
cs |
업종과 지역을 선택한 뒤 검색 버튼을 누르면 dong_ip 데이터에서 해당 동의 위치정보를 읽어들여 지도에서 이동하고 해당하는 데이터로 그래프들을 변경하여 출력한다.
상권 정보
1
2
3
4
5
6
7
8
9
10
11
|
#상가 정보 출력
output$store_info <- renderDataTable({
seoul2 %>% filter(상권업종소분류명==category,행정동코드==dong_code) %>%
dplyr::select(상호명,지점명)%>%
as.data.frame(matrix(rnorm(100),5,5))
},
options = list(
scrollY = 200,
pageLength=5)
)
|
cs |
상권 정보를 출력해 주는 부분이다. 선택한 업종이 선택한 지역에 몇개나 있는지 상호명등 정보를 출력하여 보여준다.
서울시 비교
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#rader 차트와 같이 나올 테이블
radertable<-function(code,category){
rader_data <- seoul2 %>% filter(상권업종소분류명==category,행정동코드==code)
if(nrow(rader_data)==0){
rader_data <- data.frame(행정동코드=c(code),
점포수=c(0))
rader_people <- total_people %>% filter(행정동코드==code)
rader_total <- cbind(rader_people,rader_data[2])
rader_total[7] = 0
}
else{
rader_data <- data.frame(table(rader_data$행정동코드))
names(rader_data)[1] <- c("행정동코드")
names(rader_data)[2] <- c("점포수")
rader_people <- total_people %>% filter(행정동코드==code)
rader_total <- cbind(rader_people,rader_data[2])
rader_total[7] = (rader_total[3]/rader_total[6])
}
names(rader_total)[7] <- c("인구수ㅣ점포수")
seoul_count<-count(seoul2%>% filter(상권업종소분류명==category),"상권업종소분류명")
min_max <- data.frame(행정동명=c("서울평균"),
평균인구수=c(25000),
최대인구수=c(31375),
평임대료=c(120854),
점포수=c(seoul_count[[2]]/424))
min_max[6] = (min_max[2]/min_max[5])
names(min_max)[6] <- c("인구수ㅣ점포수")
rader<-rbind(rader_total[2:7],min_max)
return(rader)
}
#rader 차트 -- 평임대료 점포수 평균인구 최대인구 인구수/점포수
raderchart <- function(code,category){
rader_data <- seoul2 %>% filter(상권업종소분류명==category,행정동코드==code)
if(nrow(rader_data)==0){
rader_data <- data.frame(행정동코드=c(code),
점포수=c(0))
rader_people <- total_people %>% filter(행정동코드==code)
rader_total <- cbind(rader_people,rader_data[2])
rader_total[7] = 0
}
else{
rader_data <- data.frame(table(rader_data$행정동코드))
names(rader_data)[1] <- c("행정동코드")
names(rader_data)[2] <- c("점포수")
rader_people <- total_people %>% filter(행정동코드==code)
rader_total <- cbind(rader_people,rader_data[2])
rader_total[7] = (rader_total[3]/rader_total[6])
}
names(rader_total)[7] <- c("인구수ㅣ점포수")
seoul_count<-count(seoul2%>% filter(상권업종소분류명==category),"상권업종소분류명")
min_max <- data.frame(행정동명=c("서울평균","max","min"),
평균인구수=c(25000,200000,0),
최대인구수=c(31375,200000,0),
평임대료=c(120854,383781,0),
점포수=c(seoul_count[[2]]/424,100,0))
min_max[6] = (min_max[2]/min_max[5])
min_max[2,6]<-8000
min_max[3,6]<-0
names(min_max)[6] <- c("인구수ㅣ점포수")
rader<-rbind(rader_total[2:7],min_max)
#rescale
rescale_df=function(data1,groupvar=NULL){
if(is.null(groupvar)) df=data1
else df=data1[,-which(names(data1) %in% groupvar)]
select=sapply(df,is.numeric)
df[select]=lapply(df[select], scales::rescale)
if(!is.null(groupvar)) {
df=cbind(df,data1[[groupvar]])
colnames(df)[length(df)]=groupvar
}
df
}
rescaled=rescale_df(rader)
rescaled <- rescaled %>% filter(행정동명!="max",행정동명!="min")
return(rescaled)
}
|
cs |
1
2
3
4
|
#rader 테이블 출력
output$rader_t <- renderTable({
p<-radertable(dong_code,category)
})
|
cs |
서울시 평균과 비교하여 선택한 업종의 지역정보를 알려줍니다.
rader 그래프로 평당 임대료, 해당 업종의 점포수, 유동인구 수, 인구당 점포 비율을 보여주면서 값을 테이블로 출력합니다.
개업률 폐업률
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#개업/폐업률
open_close_chart <- function(category,code){
per_data1 <- data.frame(t(oriData %>%
filter(CD==11&종목==category) %>%
dplyr::select("2018개업률", "2018폐업률", "2019개업률", "2019폐업률", "2020개업률", "2020폐업률")))
names(per_data1)[1] <- c("수치")
per_data2 <- data.frame(t(oriData %>%
filter(CD==code&종목==category) %>%
dplyr::select("2018개업률", "2018폐업률", "2019개업률", "2019폐업률", "2020개업률", "2020폐업률")))
names(per_data2)[1] <- c("수치")
per_data <- data.frame("년도"=c("2018","2019","2020"),
"개폐업률"=c("평균개업률", "평균폐업률", "지역개업률", "지역폐업률", "평균개업률", "평균폐업률", "지역개업률", "지역폐업률", "평균개업률", "평균폐업률", "지역개업률", "지역폐업률"),
"수치"=c(per_data1[1:2,1], per_data2[1:2,1],per_data1[3:4,1], per_data2[3:4,1],per_data1[5:6,1], per_data2[5:6,1]))
return(per_data)
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
|
#개업 폐업
output$open_close <- renderPlotly({
#code <- get_code(dong_code)
md <- open_close_chart(category,dong_code)
md_convi_plot <- ggplot(data=md, aes(x=년도, y= 수치, fill = 개폐업률)) +
geom_bar(stat="identity", position=position_dodge()) + ggtitle("년도별 개업률 및 폐업률") +
geom_text(aes(label=수치),position = position_dodge(0.9))+
theme_bw()
fig <- ggplotly(md_convi_plot)
fig
})
|
cs |
선택한 지역의 선택 업종과 다른업종들의 평균 개업률 패업률을 보여주는 부분입니다.
최근 3년간의 개업률 과 폐업률을 보여줍니다.
시간대별 생활인구
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#시간대별 유동인구
time_popul <- function(code_num){
#동 데이터 추출
code = code_num
population <- LOCAL_PEOPLE_DONG %>% filter(행정동코드==code)
#변수이름 영어로 변경
colnames(population) <- c("DateID", "시","code", "Total")
#날짜,시간대,행정동코드, 생활인구수만 추출
population <- population[1:4]
#요일추출
population$newDate <- ymd(population$DateID)
population$day <- wday(population$newDate)
#요일중 화,금,토만 추출
population <- population %>% filter(day %in% c(3, 6, 7))
population$day <- as.character(population$day)
population$day[population$day==3] <- as.character("화")
population$day[population$day==6] <- as.character("금")
population$day[population$day==7] <- as.character("토")
population
#일별, 시간대별 유동인구수
data <- data.table(population)
date_time_grouping <- data.frame(data[,.(생활인구 = mean(Total)), .(day,시)])
return(date_time_grouping)
}
|
cs |
1
2
3
4
5
6
7
8
9
10
|
#시간대별 생활인구 출력
output$time <- renderPlotly({
#code <- get_code(dong_code)
date_time<-time_popul(dong_code)
popul_plot <- ggplot(data=date_time, aes(x =시, y = 생활인구, colour=day)) +
geom_line() +
geom_point(size=2, shape=1) +
coord_cartesian(xlim=c(1,24), expand = FALSE)+theme_bw()
ggplotly(popul_plot) %>% layout(legend = list(orientation = "h", x = 0., y = -0.2))
})
|
cs |
선택한 지역의 시간대별 생활 인구수를 보여줍니다.
평일(화), 금요일, 주말(토) 별 시간대별 생활 인구수를 비교하여 그래프로 보여준다.
연령별 인구분포
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#연령대별 인구
pie_chart <- function(code){
#행정동 선택
md_age <- LOCAL_PEOPLE_DONG%>% filter(행정동코드 == code)
#연령대 묶어주기
md_age$md_underteen <- md_age$underteen + md_age$fe_underteen
md_age$md_teen <- md_age$teen_1 + md_age$teen_2 + md_age$teen_3 + md_age$teen_4
md_age$md_twenty <- md_age$twenty_1 + md_age$twenty_2 + md_age$twenty_3 + md_age$twenty_4
md_age$md_thirty <- md_age$thirty_1 + md_age$thirty_2 + md_age$thirty_3 + md_age$thirty_4
md_age$md_fourty <- md_age$fourty_1 + md_age$fourty_2 + md_age$fourty_3 + md_age$fourty_4
md_age$md_fifty <- md_age$fifty_1 + md_age$fifty_2 + md_age$fifty_3 + md_age$fifty_4
md_age$md_sixty <- md_age$sixty_1 + md_age$sixty_2 + md_age$seventies +md_age$sixty_3 + md_age$sixty_4 + md_age$fe_seventies
#e데이터 연령별 추출
md_age1 <- md_age[1:4]
md_age2 <- md_age[34:40]
md_age <- cbind(md_age1, md_age2)
df_md_age <- data.frame(
underteen = mean(md_age$md_underteen),
teens= mean(md_age$md_teen),
twenties = mean(md_age$md_twenty),
thirties = mean(md_age$md_thirty),
fourties = mean(md_age$md_fourty),
fifties = mean(md_age$md_fifty),
sixties = mean(md_age$md_sixty))
df_md_age
return(df_md_age)
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#연령대별 인구 출력
output$age <- renderPlotly({
#code <- get_code(dong_code)
df<-pie_chart(dong_code)
df <- t(df)
df <- data.frame(df)
name_df <- c("10대 이하", "10대", "20대", "30대", "40대", "50대", "60대 이상")
name_df<-data.frame(name_df)
df <- cbind(name_df,df)
df<-df[order(df$df),]
title2 <-as.character(df[7,1])
title1=paste(title2,c("가 가장 많습니다."))
plot_ly(df,labels=~name_df,values=~df) %>%
add_pie(hole = 0.5)%>%
layout(title=title1,
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
})
|
cs |
선택한 지역의 연령별 인구분포를 보여줍니다.
연령별 인구분포를 파이 그래프로 보여주고 가장 많은 연령대를 알려줍니다.
이외 로그인, 랭킹 부분도 있지만 생략 하겠습니다.
전체 코드는 아래 git 에서 받아주세요
'프로젝트 > 상권분석' 카테고리의 다른 글
[상권분석] - withwork 2. 웹 페이지 구현 (0) | 2021.02.23 |
---|---|
[상권분석] - withwork 1. 프로그램 개요 (0) | 2021.02.23 |
댓글