지금은마라톤중

Miniproject_(3)_boxoffice 본문

멋쟁이사자처럼/Project

Miniproject_(3)_boxoffice

Ojungii 2023. 3. 2. 16:55
2023.02.04

 

이번 미니프로젝트는 KOFIC 영화진흥위원회 홈페이지의 데이터를 사용하여 진행하였다.

KOFIC에서 제공하는 박스오피스 데이터와 영화제 수상정보 데이터를 활용하여 영화제 수상이 해당 제작사와 배급사 주가에 영향을 미치는지는 분석해보려고 했다.

https://www.kofic.or.kr/kofic/business/main/main.do

 

영화진흥위원회 홈페이지입니다.(1)

웹매거진 한국영화 영화산업계 주요 이슈를 취재, 분석하여 영화업, 영화정책 연구 분야 종사자에게 제공하는 월간지입니다. 한국영화연감 영화진흥위원회가 매년 발간하는, 한국영화 산업 현

www.kofic.or.kr

 


 

import pandas as pd
import numpy as np
from glob import glob # 파일경로 확인
import plotly # 시각화
import plotly.express as px
# 엑셀파일은 csv 파일로 저장하여 csv로 불러온다.
# 박스오피스
bx = pd.read_csv("2019_2022_movies.csv")
bx

# 주요 영화제목록
fest = pd.read_csv("주요영화제목록.csv")
fest


# 영화제수상목록
award1 = pd.read_csv("영화제수상목록19.csv")
award2 = pd.read_csv("영화제수상목록20.csv")
award3 = pd.read_csv("영화제수상목록21.csv")
award4 = pd.read_csv("영화제수상목록22.csv")

 

박스오피스 데이터 

# 박스오피스 데이터 전처리
bx = bx[3:]
bx.head(10)
# # 컬럼을 재설정
col = [bx.iloc[0,i] for i in range(len(bx.columns))]
col

bx.columns = col
bx = bx[1:]

bx.shape

# # 전체 열 확인
pd.set_option('display.max_columns', None)
# 컬럼명에 있는 줄바꿈(\n) 제거
bx.columns
bx.columns = ['순번', '영화명', '감독', '제작사', '수입사', '배급사', '개봉일', '영화유형', '영화형태', '국적','전국스크린수', '전국매출액', '전국관객수', '서울매출액', '서울관객수', '장르', '등급','영화구분']

bx

 

 

영화제 데이터 

세계적인 영화제여야 주가에도 영향을 미친다고 생각하여 세계 3대 영화제와 아카데미 시상식을 수상정보만 추려서 확인하였다.

세계 3대 영화제는 칸 영화제, 베를린 영화제, 베니스 영화제이다.

아카데미는 영화제가 아닌 시상식이고 다른 3대 영화제와 다르게 미국에서 열리는 행사이다. 그럼에도 미국의 자본시장은 세계적으로 가장 큰 규모이며 영향력이 크기 때문에 3대 영화제와 함께 비교해보기로 결정했다.

 

영화제 정보 전처리

# 필요없는 2행까지 제거
fest = fest[3:]

# 리스트 컴프리핸션으로 컬럼명들을 리스트로 반환 
col2 = [fest.iloc[0,i] for i in range(len(fest.columns))]
col2

# 컬럼 재설정
fest.columns = col2

# 컬럼이었던 행 제거
fest = fest[1:].reset_index(drop =True)
fest

fest = fest.iloc[:,0].to_frame()
fest.reset_index(drop = True)
fest3 = ["칸 국제영화제", "베를린 국제영화제", "베니스 국제영화제", "아카데미 시상식"]
fest3 = pd.DataFrame(fest3)
fest3.columns = ["영화제명"]
fest3

 

영화제 수상정보 

# 연도별로 나눠져 있는 데이터를 합합쳐 하나의 수상정보로 만듦
# 2019 ~ 2022년까지의 수상정보
award = pd.concat([award1, award2, award3, award4])
award

# 주요 영화제목록과 수상목록을 교집합으로 병합
# 목록에는 수상과 후보 모두 있어 수상내역의 널값을 제거해줌으로써 수상작만 추출

df_award = pd.merge(fest3, award, left_on="영화제명", right_on = "영화제", how = "inner")
df_award = df_award.drop(["영화제명"], axis = 1)
df_award_mv = df_award[["연도", "영화제", "출품작", "수상내역"]]
df_award_mv.columns = ["수상연도", "영화제", "출품작", "수상내역"]
df_award_mv = df_award_mv.dropna(subset=['수상내역']).reset_index(drop = True)
df_award_mv

 

박스오피스 목록과 수상작 교집합 병합

# 3대 영화제 수상작들을 박스오피스에서 분류
# 공통 컬럼 제거하고 컬럼 재배치
bx_award = pd.merge(bx, df_award_mv, left_on="영화명", right_on = "출품작", how = "inner")
bx_award = bx_award[["개봉일", "영화명", "감독", "제작사","수입사","배급사", "전국스크린수","전국매출액","전국관객수","장르","등급","영화구분","영화제","수상연도"]]
# bx_award = bx_award.loc[~bx_award["영화구분"].str.contains("독립/예술영화")]
bx_award = bx_award.drop_duplicates()

bx_award = bx_award.sort_values("개봉일").reset_index(drop=True)

# 데이터 타입 확인
bx_award.dtypes

# 전국관객수, 전국매출액, 전국스크린수 -> 숫자형 데이터로 변환
bx_award['전국관객수'] = bx_award['전국관객수'].apply(lambda x: x.replace(',', ''))
bx_award = bx_award.astype({'전국관객수' : 'int64'})

bx_award['전국매출액'] = bx_award['전국매출액'].apply(lambda x: x.replace(',', ''))
bx_award = bx_award.astype({'전국매출액' : 'int64'})

bx_award['전국스크린수'] = bx_award['전국스크린수'].apply(lambda x: x.replace(',', ''))
bx_award = bx_award.astype({'전국스크린수' : 'int64'})

bx_award["개봉일"] = pd.to_datetime(bx_award["개봉일"])

bx_award.sort_values(by= "전국매출액", ascending = False)

 

영화구분에는 일반영화와 예술영화로 나뉘어있다. 예술영화는 영향력이 있는 영화제에서는 수상을 했지만 주가에 영향을 미칠정도로 상업성이 없다고 생각되어 일반영화만 추출하여 보기 쉽게 하였다.

# 일반영화만 보기
award_nr = bx_award.loc[bx_award["영화구분"] == "일반영화"]
award_nr

아이러니하게도 배급사가 모두 (주)씨제이이엔엠이다. 

 

# 일반영화 제작사만 골라보기
award_nr[["영화명", "감독", "제작사", "영화제", "수상연도"]]

-> 이렇게 기생충 2회((주)바른손이앤에이), 브로커 1회(영화사 집), 헤어질 결심 1회((주) 모호필름)의 제작사 주가를 확인해보려고 한다. 

 

주가 변동 확인

FinanceDataReader를 활용하여 주가를 가져와 분석을 진행하였다.

import pandas as pd
import numpy as np
import FinanceDataReader as fdr
import plotly
import plotly.express as px
import matplotlib.pyplot as plt
df_krx = fdr.StockListing("KRX")
df_krx.head()

 

1) CJ_ENM

# CJ E&M :  "035760"
cj = fdr.DataReader("035760", start="2019", end="2023")

cj

 

 

# 전일대비 등락률 구하기
#- 종가를 활용하여 전일 종가로 나누고 -1로 빼주어 등락률을 확인
#- 2019-01-12일 데이터는 전일 데이터 포함이 안되어있어 등락률 0으로 표시

cj_norm_list = [ round((cj["Close"][i] / cj["Close"][i-1] - 1)*100, 1) for i in range(1, 988) ]
cj_norm_list.insert(0,0)
cj["day_change"] = cj_norm_list
cj_norm = cj[["day_change"]]
cj_norm_desc = cj_norm.sort_values("day_change", ascending = False).head(15)
cj_norm_desc
# 시가와 종가 차이로 당일 등락폭 확인

cj_norm_list2 = [ cj["Close"][i] - cj["Open"][i] for i in range(988) ]

cj["day_term"] = cj_norm_list2
cj_norm2 = cj[["day_term"]]

cj_norm_desc2 = cj_norm2.sort_values("day_term", ascending = False).head(15)
cj_norm_desc2
등락률 내림차순으로 표현
등락폭 내림차순으로 표현



- CJ ENM 칸 영화제 기간 조회

# 2022-05-03 ~ 2022-06-11 기간동안의 CJ ENM 전일대비 등락률 조회
# 등락률 높은 순으로 정렬
cj_can = cj.loc["2022-05-03":"2022-06-11"]
cj_can[["day_change"]].sort_values(by = "day_change", ascending = False)

px.line(cj_can["day_change"] , title = "CJ ENM : 칸영화제 당시 등락률 조회")

=> 배급사인 CJ_ENM은 칸 영화제 수상일시 전후로 큰 등락률 변화에 영향을 받지 못했다.

 

 

 

2) (주)바른손이앤에이 칸 영화제 기간 조회

-  칸 영화제 : 2019-04-30 ~2019-06-09

# (주)바른손이앤에이 :  "035620"
hand = fdr.DataReader("035620", start="2019", end="2023")
hand
# 전일대비 등량률 구하기

hand_norm_list = [ round((hand["Close"][i] / hand["Close"][i-1] - 1)*100, 1) for i in range(1, 988) ]
hand_norm_list.insert(0,0)
hand["day_change"] = hand_norm_list
hand_norm = hand[["day_change"]]
hand_norm

# 2019-04-30 ~2019-06-09 기간동안의 바른손이앤에이 전일대비 등락률 조회
# 등락률 높은 순으로 정렬
hand_can = hand.loc["2019-04-30":"2019-06-09"]
hand_can[["day_change"]].sort_values(by = "day_change", ascending = False)

 

 

px.line(hand_can["day_change"] , title = "바른손이앤에이 : 칸영화제 당시 등락률 조회")

 

 

3)(주)바른손이앤에이 아카데미 시상식 기간 조회

- 아카데미 시상식 : 2020-01-25 ~ 2020-02-24

# 2020-01-25 ~ 2020-02-24 기간동안의 바른손이앤에이 전일대비 등락률 조회
# 등락률 높은 순으로 정렬
hand_aca = hand.loc["2020-01-25":"2020-02-24"]
hand_aca[["day_change"]].sort_values(by = "day_change", ascending = False)

 

px.line(hand_aca["day_change"] , title = "바른손이앤에이 : 아카데미 시상식 당시 등락률 조회")

 

4) 영화사 집 - 칸 영화제 수상 기간 조회

 

영화사 집 - 비상장

⬇️

모회사 카카오 엔터테인먼트(영화사 집 지분율 100%) - 비상장

⬇️

카카오(카카오 엔터테인먼트 지분 66%)

  • 카카오 주식 확인
  • → 그러나 2번에 걸친 모회사인 점과 카카오 자체는 IT 기업으로 주가에 영향이 없을 것으로 판단

 

5) (주) 모호필름 - 칸 영화제 수상 기간 조회

  • (주) 모호필름 : 박찬욱 감독이 운영하는 영화제작사
  • 2021.08.31에 CJ ENM이 (주) 모호필름을 인수

→ CJ ENM 주가로 확인

  • 조회기간 : 2022년 칸 영화제 (2022-05-17 ~ 2022-05-28)
    • 2022-05-03 ~ 2022-06-11
      - (주) 모호필름 : 박찬욱 감독이 운영하는 영화제작사
      - 2021.08.31에 CJ ENM이 (주) 모호필름을 인수

      → CJ ENM 주가로 확인

      - 조회기간 : 2022년 칸 영화제 (2022-05-17 ~ 2022-05-28)
          - 2022-05-03 ~ 2022-06-11
# 2022-05-03 ~ 2022-06-11 기간동안의 CJ ENM 전일대비 등락률 조회
# 등락률 높은 순으로 정렬
cj_can = cj.loc["2022-05-03":"2022-06-11"]
cj_can[["day_change"]].sort_values(by = "day_change", ascending = False)

px.line(cj_can["day_change"] , title = "CJ ENM : 칸영화제 당시 등락률 조회")

결과 :
- (주) 바른손이앤에이 : 기생충의 칸 영화제와 아카데미 수상시기에 전일대비 등략률을 보니 둘 다 30% 상승하는 모습을 보였다.

- (주) 모호필름 : 헤어질 결심이 칸 영화제에서 수상하였을 때 주가가 상승한 것을 확인할 수 있다. 그러나 모호필름의 직접적인 주가가 없어 지분을 가지고 있는 CJ ENM을 보니 주가에 영향을 주긴 하지만 바른손이앤에이가 기생충 수상에 영향을 받은 것만큼의 큰 영향을 받지는 못하는 것 같다.

 


 

 

회고

박스오피스 데이터를 활용하여 수상정보가 주가에 미치는 영향에 대해서 분석해보았다.

여러모로 아쉬운 점이 많은 미니 프로젝트였다.

주제를 잡기까지 여러 과정이 있어 분석에 쓸 시간이 부족했다. 그리고 스킬적으로도 많이 부족하다는 것을 느꼈다.

 plotly를 이용하여 시각화를 하는데 익숙하지 않아 그래프 이외에 선과 구간 표시 등으로 수상 시점과 관련이 있는 유의마한 구간을 표시해서 그래프를 좀 더 직관적으로 표현하고 싶었다. 하지만 시간적으로도 지식적으로 부족하여 그래프까지만 표현하고 점선과 구간은 따로 그려넣었다.

그리고 데이터를 수집할 때 영화제와 수상정보가 연도까지밖에 나와있지 않아 수상일시를 폐막일로 하여 직접 조사하여 사용했다는 점이 아쉬웠다. 

다음번에는 좀 더 괜찮은 방법을 찾아 정확한 분석을 해보고 싶다.

 

 

Comments