Python

데이터 분석 1 - 영화 흥행 요인 분석 2

retill28 2024. 7. 12. 06:10

.


지난 포스팅에서는 영화 데이터를 불러와 전처리하는 과정을 순서대로 썼다. 

이번 포스팅에서는 그렇게 만든 데이터를 가지고 실제로 분석하는 과정을 써보려고 한다. 

우선 분석하려고 하는 내용을 다시 살펴보면 아래와 같다. 

질문의 예시
  • 연도별 흥행 수익은?
  • 가장 흥행한 영화 TOP 10은?
  • 흥행에 가장 성공한 감독과 배우는?
  • 장르와 흥행 수익
    • 흥행 수익이 좋은 장르는?
    • 시간의 흐름에 따라 유행하는 장르가 바뀌는가?
    • 월별로 흥행하는 장르가 있는가?
  • 수익과 예산, 투표수, 평점과의 상관관계는?
  • ROI(예산 대비 수익)가 높으면서 흥행에 성공한 영화의 특징은?

 

 

 

 

1. 연도별 흥행 수익은? 

data.groupby('year')[['revenue']].sum() 를 통해 연도별로 수익의 합을 구한다. 

이때 만들어지는 데이터 프레임이 year가 인덱스가 되어버리므로 리셋시켰다. 

year와 revenue를 각각의 축으로 삼아 선 그래프를 그리면 아래와 같다.

import plotly.express as px
revenue_by_year = data.groupby('year')[['revenue']].sum().reset_index()

fig = px.line(data_frame=revenue_by_year, x="year", y="revenue")
fig.show()

즉, 2000년대에 들어 급격히 흥행 수익이 높아졌다

 

 

 

 

2. 가장 흥행한 영화 TOP 10은?

top = data.groupby('title')['revenue'].sum().reset_index().sort_values('revenue', ascending=False).head(10)
fig = px.bar(data_frame=top, x='title', y='revenue', title=f"흥행 수익 TOP 10 영화")
fig.show()

 

groupby함수를 통해 title별 revenue의 합을 구했고,

그 중 revenue가 높은 순으로 10개를 뽑아 top이라는 데이터 프레임으로 만들었다.

이것을 막대 그래프로 나타내면 아래와 같다. 

대체적으로 예산과 투표수가 높으면 흥행수익도 높아보이므로 
예산과 투표수로 TOP10인 영화들도 함께 구해보자. 

title_dic = {'budget':'예산', 'vote_count':'투표수'}
for y in ['budget','vote_count']:
    top = data.groupby('title')[[y]].sum().reset_index().sort_values(y, ascending=False).head(10)
    fig = px.bar(data_frame=top, x='title', y=y, title=f"{title_dic[y]} TOP 10 영화")
    fig.show()

하지만 구해본 결과 정비례하듯 그래프가 나오지 않는다.
이것은 상관관계 분석을 해봐야 한다. 

 

 

 

 

3 흥행에 가장 성공한 감독과 배우는?

# 가장 수익이 많은 감독은?
top_director = data.groupby(['director'])['revenue'].sum().reset_index().sort_values('revenue', ascending=False).head(10)
fig = px.bar(data_frame=top_director, x='director', y='revenue', title=f"흥행 수익 TOP 10 감독")
fig.show()

 

 

# 가장 수익이 많은 배우는?
revenue_cast = data[['revenue', 'cast_name']].explode('cast_name')
top_cast = revenue_cast.groupby('cast_name')[['revenue']].sum().reset_index().sort_values('revenue', ascending=False).head(10)
fig = px.bar(data_frame=top_cast, x='cast_name', y='revenue', title=f"흥행 수익 TOP 10 배우")
fig.show()

 

감독중엔 Steven Splelberg, 배우중엔 Stan Lee가 최고수익을 나타낸다. 
또 세로 축을 보면 유명 감독과 배우 일부가 많은 흥행 수익을 차지하고 있다. 

 

 

 

 

 

4. 장르와 흥행 수익

  • 흥행 수익이 좋은 장르는?
# 장르별 흥행 수익 분포
fig = px.box(data_frame = data, y = 'main_genre', x = 'revenue', hover_name = 'title')
fig.show()

# 장르별 흥행 수익 평균
genre_avg_revenue = data.groupby('main_genre')[['revenue']].mean().reset_index()
fig = px.bar(data_frame = genre_avg_revenue, x = 'main_genre', y = 'revenue', title = '장르별 흥행 수익 평균')
fig.show()

# 장르별 흥행 수익 합계
genre_sum_revenue = data.groupby('main_genre')[['revenue']].sum().reset_index()
fig = px.bar(data_frame = genre_sum_revenue, x = 'main_genre', y = 'revenue', title = '장르별 흥행 수익 합계')
fig.show()

 

첫번째 그래프를 보면, 액션과 드라마 장르에 흥행 수익이 아주 높은 영화들이 많이 있다.
하지만 박스 플롯의 중앙값을 비교하면 다른 장르에 비해 높은 편은 아니다.
두번째 그래프를 통해 장르별 영화 수익 평균은 애니메이션 > 어드벤쳐 > 가족 > SF > 판타지 > 액션 순이라는 것을 알 수 있다.
세번째 그래프에서는 흥행 수익 합계가 액션 > 어드벤쳐 > 드라마 > 코미디 > 애니메이션 순이라는 것을 알 수 있다. 

 

 

 

  • 시간의 흐름에 따라 유행하는 장르가 바뀌는가?
    연도별, 월별로 장르별 수익을 구해서 그래프로 그려본다. 
# 연도별 장르별 수익 
revenue_by_year_genre = data.query('year >= 1990').groupby(['year','main_genre'])[['revenue']].sum().reset_index()
fig = px.bar(data_frame=revenue_by_year_genre, x="year", y="revenue", color='main_genre', color_discrete_sequence=px.colors.qualitative.Light24_r)
fig.show()

이번에는 각 연도에서 각 장르가 몇퍼센트를 차지했는지에 대해서도 그래프를 그려본다. 

#연도별 장르 퍼센트 
revenue_by_year_genre_pct = pd.pivot_table(data=data.query('year >= 1990'), index='year', columns='main_genre', values='revenue', aggfunc=sum, fill_value=0, margins=True)
revenue_by_year_genre_pct = 100 * revenue_by_year_genre_pct.div(revenue_by_year_genre_pct.iloc[:,-1], axis=0).drop('All').drop('All', axis=1)
revenue_by_year_genre_pct = pd.melt(revenue_by_year_genre_pct.reset_index(), id_vars='year', value_name='pct')
revenue_by_year_genre_pct

fig = px.bar(data_frame=revenue_by_year_genre_pct, x="year", y="pct", color='main_genre', color_discrete_sequence=px.colors.qualitative.Light24_r)
fig.show()

첫번째 그래프에서는 액션 영화의 흥행 수익이 점점 커지고 있다는 점,
그 중에서도 약 2010년도부터 흥행 수익이 높아지기 시작했다는 걸 알 수 있다.
조금 더 정확하게, 두번째 그래프를 통해서 2010년도부터,
단순히 수익만 증가한 것이 아니라 흥행 수익의 비중도 높아지기 시작했다는 것을 알 수 있다.

 

 

 

같은 방법으로 월별 흥행 수익, 월별 흥행 수익 비중을 구하면 다음 그래프와 같다. 

 

액션, 어드벤처 장르는 비교적 봄, 여름에 개봉 수익이 높았다.
드라마 장르는 비교적 가을, 겨울에 개봉 수익이 높았다.
코미디 장르는 비교적 겨울에 개봉 수익이 높았다.

 

 

5. 수익과 예산, 투표수, 평점과의 상관관계는?

상관관계를 구하면 아래의 표와 같고, 이것을 히트맵으로 만들어 시각화를 해본다.

# 히트맵 제작
fig = px.imshow(data[['budget','revenue','vote_average','vote_count']].corr(), text_auto='.2f', color_continuous_scale='Purp')
fig.show()

 

모든 영화가 아니라, 흥행 수익 TOP100의 영화들만 필터링해서 상관관계를 다시 보면 아래와 같다. 

top100 = data.sort_values('revenue', ascending=False).head(100)

fig = px.imshow(top100[['budget','revenue','vote_average','vote_count']].corr(), text_auto='.2f', color_continuous_scale='Mint')
fig.show()

예산과 흥행수익(0.71), 투표수와 흥행 수익(0.77)은 높은 양의 상관관계를 보인다.
평점 평균과 흥행수익(0.20) 비교적 낮은 양의 상관관계를 보인다.
흥행에 성공한 영화 상위 100개로 추려보면, 그 상관관계가 더 낮아진다.

 

 

 

6. ROI(예산 대비 수익)가 높으면서 흥행에 성공한 영화의 특징

수익이 높은 top300을 뽑아 거품형 그래프를 그려본다. 

조금 더 알아보기 쉽게, box plot으로도 그려본다.

top300 = data.sort_values('revenue', ascending=False).head(300)

# 거품형
fig = px.scatter(data_frame = top300, x = 'roi', y = 'revenue', hover_name = 'title', size = 'revenue', color = 'main_genre',
color_discrete_sequence=px.colors.qualitative.Light24, width = 700, height = 600)
fig.show()

# 상자 
fig = px.box(data_frame = top300, y = 'main_genre', x = 'roi', hover_name = 'title')
fig.show()

액션의 경우 예산이 큰 영화가 많아 ROI가 높은 편이 아니다.
드라마/코미디/로맨스 영화가 ROI가 큰 영화들이 많다.

 

 

 

 

7. 정리

분석한 결과를 다시 요약하면 다음과 같다. 

즉, 2000년대에 들어 급격히 흥행 수익이 높아졌다

감독중엔 Steven Splelberg, 배우중엔 Stan Lee가 최고수익을 나타낸다. 
또 세로 축을 보면 유명 감독과 배우 일부가 많은 흥행 수익을 차지하고 있다. 

액션 영화의 흥행 수익이 점점 커지고 있다는 점,
그 중에서도 약 2010년도부터 흥행 수익이 높아지기 시작했다는 걸 알 수 있다.
조금 더 정확하게는 2010년도부터, 단순히 수익만 증가한 것이 아니라
흥행 수익의 비중도 높아지기 시작했다는 것을 알 수 있다.

액션, 어드벤처 장르는 비교적 봄, 여름에 개봉 수익이 높았다.
드라마 장르는 비교적 가을, 겨울에 개봉 수익이 높았다.
코미디 장르는 비교적 겨울에 개봉 수익이 높았다.


예산과 투표수는 흥행 수익과 높은 양의 상관관계를 보이지만
평점 평균은 비교적 낮은 양의 상관관계를 보인다.
흥행에 성공한 영화 상위 100개로 추려보면, 그 상관관계가 더 낮아진다.

액션의 경우 예산이 큰 영화가 많아 ROI가 높은 편이 아니다.
드라마/코미디/로맨스 영화가 ROI가 큰 영화들이 많다.