1.데이터 로드
# 구분자가 "|"인 텍스트 파일 읽기
df <- read.table("2022_conts_industry.txt", sep = "|", header = TRUE
,stringsAsFactors = FALSE)
# 데이터 확인
str(df)
## 'data.frame': 55 obs. of 5 variables:
## $ 산업 : chr "출판" "출판" "출판" "출판" ...
## $ 연도 : int 2018 2019 2020 2021 2022 2018 2019 2020 2021 2022 ...
## $ 사업체수 : int 24995 25220 25244 34011 34652 6628 6607 6144 4919 5004 ...
## $ 매출액.백만원.: int 20953772 21341176 21648849 24697753 25191702 1178613 1337248 1534444 2132149 2624004 ...
## $ 수출액.천달러.: int 248991 214732 345960 428379 375083 40501 46010 62715 81980 107635 ...
head(df)
2. 데이터 정제
# 데이터 변환
df$산업 <- as.factor(df$산업) # 지역을 factor로 변환
df$연도 <- as.numeric(df$연도) # 연도를 numeric으로 변환
# 산업 카테고리 칼럼 생성
categorize_industry <- function(industry) {
if (industry %in% c("출판", "만화", "음악")) {
return("미디어 및 출판")
} else if (industry %in% c("영화", "애니메이션", "방송")) {
return("영상 콘텐츠")
} else if (industry %in% c("게임", "지식정보", "콘텐츠솔루션")) {
return("디지털 및 IT 기반 콘텐츠")
} else if (industry %in% c("광고", "캐릭터")) {
return("마케팅 및 상업 콘텐츠")
} else {
return("기타")
}
}
df$`산업(대분류)` <- sapply(df$산업, categorize_industry)
3. 데이터 요약
summary(df)
## 산업 연도 사업체수 매출액.백만원.
## 게임 : 5 Min. :2018 Min. : 480 Min. : 553290
## 광고 : 5 1st Qu.:2019 1st Qu.: 1696 1st Qu.: 5227953
## 만화 : 5 Median :2020 Median : 6337 Median :12207043
## 방송 : 5 Mean :2020 Mean : 9680 Mean :12058021
## 애니메이션: 5 3rd Qu.:2021 3rd Qu.:10632 3rd Qu.:19714174
## 영화 : 5 Max. :2022 Max. :35670 Max. :26104717
## (Other) :25
## 수출액.천달러. 산업(대분류)
## Min. : 37877 Length:55
## 1st Qu.: 147959 Class :character
## Median : 345960 Mode :character
## Mean :1045256
## 3rd Qu.: 697095
## Max. :8981751
##
unique(df$`산업(대분류)`)
## [1] "미디어 및 출판" "영상 콘텐츠"
## [3] "디지털 및 IT 기반 콘텐츠" "마케팅 및 상업 콘텐츠"
4. 연도별 콘텐츠 산업의 매출액, 수출액 시각화
# 산업별 alpha 값을 설정한 벡터 생성
alpha_values <- c(
"출판" = 0.7,
"만화" = 0.5,
"음악" = 1,
"영화" = 0.7,
"게임" = 1.0,
"애니메이션" = 0.5,
"방송" = 1,
"광고" = 1.0,
"캐릭터" = 0.7,
"지식정보" = 0.7,
"콘텐츠솔루션" = 0.5
)
# 필요한 라이브러리 불러오기
library(ggplot2)
library(gganimate)
library(dplyr)
##
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# ggplot 기반의 애니메이션 생성
p <- ggplot(df,
aes(x = `매출액.백만원.`,
y = `수출액.천달러.`,
size = `사업체수`,
color = `산업(대분류)`,
alpha = `산업`)) +
geom_point(show.legend = TRUE) +
geom_text(aes(label = `산업`), vjust = -2, size = 5, check_overlap = TRUE, color = "black") + # 텍스트 검정색으로 설정
facet_wrap(~ `산업(대분류)`, scales = "free") + # 산업(대분류)별 서브플롯 생성
scale_size(range = c(5, 12)) + # 점 크기 범위 설정
scale_alpha_manual(values = alpha_values) + # 산업별 alpha 설정
scale_color_manual(
values = c(
"미디어 및 출판" = "#FF9999", # 빨강 계열
"영상 콘텐츠" = "#FFCC66", # 주황 계열
"디지털 및 IT 기반 콘텐츠" = "#9999FF", # 파랑 계열
"마케팅 및 상업 콘텐츠" = "#66CC66" # 초록 계열
)
) +
labs(title = 'Year: {closest_state}', # 타이틀 포맷 수정 (4글자 연도 출력)
x = '매출액(백만원)',
y = '수출액(천달러)',
size = '사업체수',
alpha = '산업') +
theme(
panel.background = element_rect(fill = "gray90", color = NA), # 바탕색 설정
panel.grid.major = element_line(color = "white"), # 주요 그리드 선 색상
panel.grid.minor = element_line(color = "white"), # 부 그리드 선 색상
strip.background = element_rect(fill = "gray80", color = "gray50"), # 서브플롯 제목 배경
strip.text = element_text(color = "black"), # 서브플롯 제목 텍스트 색상
plot.title = element_text(face = "bold", size = 20, hjust = 0.5), # 제목 텍스트 설정
axis.title.x = element_text(face = "bold", size = 16), # x축 제목 텍스트 설정
axis.title.y = element_text(face = "bold", size = 16) # y축 제목 텍스트 설정
) +
transition_states(`연도`, transition_length = 2, state_length = 1) + # 연도별 애니메이션 생성
ease_aes('linear') # 부드러운 전환
# 애니메이션 출력
#animate(
# p,
# width = 1200, # 가로 길이를 1200 픽셀로 설정
# height = 600, # 세로 길이를 600 픽셀로 설정
# renderer = gifski_renderer()
# )
# GIF 생성 및 저장
#gif_file <- "animation.gif"
#animate(
# p,
# width = 1200, # 가로 길이를 1200 픽셀로 설정
# height = 600, # 세로 길이를 600 픽셀로 설정
# renderer = gifski_renderer(gif_file)
# )
5. 결과물
# HTML에 GIF 포함
htmltools::tags$img(src = "animation.gif", alt = "Animated GIF", style = "width:100%;")
6.결과 해석
1) 산업별 특징
- 게임
- 매출액과 수출액이 매년 높음
- 매출액에서 해외 서비스의 영향이 높음
- 음악
- 2022년으로 갈수록 수출액의 증가폭이 높음
- K팝 시장이 해외 팬으로 확산되는 속도가 빠름을 알 수 있다
- 캐릭터
- 2021년부터 매출액 및 수출액 규모가 급격히 줄어듦
2) 코로나 전/후 영향
- 2019년에서 2020년도 변화
- 영화 산업 : 매출액 감소하는 방향으로 이동
- 게임 산업 : 매출액 증가폭이 큼
- 2020년에서 2021년도 변화
- 캐릭터 산업 : 매출액과 수출액 감소량이 큼
- 2021년에서 2022년도 변화
- 영화 산업 : 2020년 이전 수준으로 매출, 수출 회복세를 보임
'Programming language > R' 카테고리의 다른 글
Mac M1(ARM 아키텍처)에서 library(rJava) 오류 해결 과정 (0) | 2024.05.26 |
---|