1 서론

1-1 23년도 상반기 순위권 한국 영화들 성적

  • 유령(설경구,박해수) : 손익분기점 350만, 관객수 66만
  • 교섭(황정민,현빈) : 손익분기점 350만, 관객수 170만
  • 카운트(진선규,성유빈) : 손익분기점 100만, 관객수 38만
  • 멍뭉이(차태현,유연석) : 손익분기점 100만, 관객수 19만
  • 대외비(조진웅,이성민) : 손익분기점 200만, 관객수 75만

1-2 기사, 영화 평론가들의 기피 요인들

  • 비싼 티켓값
  • 코로나 때문에 실내 생활에 익숙
  • ott 산업
  • 한국 영화는 극장에서 상영하고 풀리기까지의 시점이 굉장히 빠름 끽해봐야 3주, 불법은 당일
  • 영화 보면서 먹을 간식 + 외식 + 카페 : 모든 부분에서 물가가 올라서 부담스러운 상황
  • 영화의 질이 떨어짐 : 어디선가 한 번쯤 본 양산형 스토리, 근본적으로 재미가 없음
  • 관객의 수준이 올라감. 단순 재미뿐만 아니라 영화 속에서 의미를 찾으려고 함

1-3 연도별 영화 관객 수 / 국내외 파이 비교

  • target <- “https://movie.daum.net/ranking/boxoffice/yearly?date=2022다음영화랭킹 KOBIS

  • htm <- read_html(target)

  • 제목2022 <- htm %>% html_elements(“#mainContent .link_txt”) %>% html_text()

  • 관객2022 <- htm %>% html_elements(“.info_txt+ .info_txt”) %>% html_text() %>% str_extract(“[\d,]+”) %>% parse_number(locale = locale(grouping_mark = “,”))

  • apply(관객2022,2,sum)

  • <2019~2022년도의 영화, 관객, 관객합>

knitr::include_graphics("스크린샷_영화 201922.png")

1-4 연도별 관객

  • 연도별관객 <- tibble(year=c(2019,2020,2021,2022),년도별관객합=c(관객합2019,관객합2020,관객합2021,관객합2022))
  • 연도별관객_total<-rbind(년도별관객,tibble(year=“2023(6월이전)”, 년도별관객합=38799066))
  • s1.연도별관객_total %>% ggplot(aes(year,년도별관객합)) + geom_col() + labs(x=“년도”,y=“관객 수”,title=“년도별 관람객 비교”)
knitr::include_graphics("스크린샷_년도별 관객수 .png")

1-5 연도별 국내외 영화의 관객 파이

  • 국내외파이 <- tibble(class,year)

  • s1.국내외파이 %>% ggplot(aes(year,fill=factor(국내외))) + geom_bar() + labs(x=“년도”,y=“관객 수”,title=“국내외 관람객 비교”,fill=“국내외”)

  • s2.국내외파이 %>% ggplot(aes(year,fill=factor(국내외))) + geom_bar() +coord_polar() + labs(x=“년도”,y=“관객 수”,title=“국내외 관람객 비교”,fill=“국내외”)

knitr::include_graphics("스크린샷_국내외파이 .png")

knitr::include_graphics("스크린샷_국내외파이원.png")

2코로나 이전 / 코로나 이후 / 코로나 이후 + ott 3개 군으로 나눠 비교

2-2데이터 가공

  • 불용어가공 데이터 <- 추출데이터 %>% anti_join(kstopwords) %>% anti_join(number) %>% anti_join(pa1)
  • number <- tibble(word=c(“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”))
  • s1.ott1 <- tibble(document = rep(paste0(“ott”, 1), each =), ott1)
knitr::include_graphics("스크린샷_ott.png")

2-3군집화

  • ult <- rbind(과거1,과거2,과거3,과거4,ott1,ott2,현재1,현재2,현재3)
  • tidy_ex <- ult %>% bind_tf_idf(term=word, document=document, n=n)
  • tidy_ex %>% count(document)
  • tidy_ex %>% arrange(desc(tf))
  • dtm_ex <- tidy_ex %>% cast_dtm(document=document, term=word, value=tf)
  • tm::inspect(dtm_ex)
  • tidy(dtm_ex)
  • d <- dist(dtm_ex, method = “manhattan”); d
  • hcls_ex <- hclust(d, method = “ward.D”)
  • plot(hcls_ex, hang=-1)
  • rect.hclust(hcls_ex, k=2)
  • cls <- cutree(hcls_ex, k=2); cls
knitr::include_graphics("스크린샷_군집화1.png")

knitr::include_graphics("스크린샷_군집화2.png")

knitr::include_graphics("스크린샷_군집화3.png")

knitr::include_graphics("스크린샷_군집화4.png")

3감성분석

3-1 한국어 감성사전

knitr::include_graphics("스크린샷_한국어감성사전.png")

3-2시각화

  • 과거1_socre %>% filter(score<0) %>% arrange(score)
  • 과1_감성 <- 과1 %>% inner_join(knu_dic_df) %>% mutate(score=sScore*n) %>% ggplot() + geom_col(ae(word, score, fill=ifelse(score > 0, “pos”, “neg”)))
  • 과1_감성
knitr::include_graphics("스크린샷_ 과거score.png")

knitr::include_graphics("스크린샷_과거score시각화.png")

  • ult_과거 <- rbind(과거1,과거2,과거3,과거4) %>% mutate(name=“과거”)
  • ult_현재 <- rbind(현재1,현재2,현재3) %>% mutate(name=“현재”)
  • ult_ott <- rbind(ott1,ott2) %>% mutate(name=“ott”)
  • ult_sum <- rbind(ult_과거,ult_현재,ult_ott)
  • ult_sum
  • 새로운 행 이름을 추가해서 3개의 군집별 각각 묶어줌
knitr::include_graphics("스크린샷_시각화1.png")

knitr::include_graphics("스크린샷_시각화2.png")

knitr::include_graphics("스크린샷_시각화3.png")

knitr::include_graphics("스크린샷_시각화군집.png")

4 핵심단어 추출

4-1 사용한 추출 단어들

  • “수준, 비싼, ott, 코로나,넷플릭스, 가격, 재미, 유튜브,15000”

4-2 단어 추출

  • aq1 <- sum_현재 %>% mutate(percent = n / sum(n) *100) %>% filter(grepl(‘수준’, word)) %>% mutate(name=“수준”)
  • aq1 %>% head()
knitr::include_graphics("스크린샷 _ aq1 head.png")

sum_현재 %>% filter(n>10) %>% count() # n>10인 단어의 수는 628개

4-3 비중 비교

  • sum_현재 %>% filter(n>10) %>% mutate(word=reorder(word,n)) %>% ggplot() + geom_col(map=aes(word,n),fill=“yellow”) + geom_col(aq1, map=aes(word,n),fill=“black”) + geom_col(aq2, map=aes(word,n),fill=“black”) + …
knitr::include_graphics("스크린샷_aq.png")

  • sum_현재 %>% filter(n>10) %>% mutate(word=reorder(word,n)) %>% ggplot() + geom_col(map=aes(word,n),fill=“yellow”) + geom_col(aw1, map=aes(word,n),fill=“black”) + …
knitr::include_graphics("스크린샷_추출단어aw.png")

4-4 핵심단어들만 추출

test1 <- rbind(aq1,aq2,aq22,aq3,aq4,aq5,aq6,aq7,aq8) %>% count(name) # 퍼센트 합 test2 <- rbind(aw1,aw2,aw22,aw3,aw4,aw5,aw6,aw7,aw8) # 추출단어 순위

4-5 추출 단어 순위

  • test2 %>% mutate(word=reorder(word,n))%>%
    ggplot() + geom_col(map=aes(word,n))
knitr::include_graphics("스크린샷_추출단어순위.png")

4-6 추출 단어들의 퍼센트합

  • test_sum <- test1 %>% transmute(percent)
  • apply(test_sum ,2,sum) #유튜브 , 수준, 넷플릭스, 비싼, 코로나, ott, 가격
knitr::include_graphics("스크린샷_추출단어합 .png")