目录
一、案例背景
在全球电影产业蓬勃发展的当下,电影票房成为衡量影片商业成功的关键指标。一部电影的票房表现受到众多因素影响,如影片类型、演员阵容、上映档期、口碑评价等。深入分析这些因素与票房之间的关系,不仅能为电影制作方、发行方提供决策支持,助力他们在影片策划、制作、宣发等环节做出更明智的选择,还能帮助投资者评估电影项目的潜在收益。本案例将运用 Python 对电影票房数据展开全面分析,并构建预测模型,挖掘票房背后的规律。
二、代码实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
2.1 数据收集与导入
从专业电影数据平台(如 Box Office Mojo、IMDb Pro 等)收集电影票房数据,涵盖电影名称、上映日期、票房收入、影片类型、导演、主演、制作成本等信息。同时,从影评网站(如豆瓣、IMDb)获取电影评分数据,从社交媒体平台(如微博、Twitter)获取电影话题热度数据(通过相关 API 或网络爬虫获取,注意遵循平台规则和法律法规)。假设数据存储在 CSV 文件movie_data.csv
中,进行导入。
data = pd.read_csv('movie_data.csv')
2.2 数据探索性分析
# 查看数据基本信息
print(data.info())
# 查看数据前几行
print(data.head())
# 统计各影片类型的数量
genre_count = data['genre'].value_counts()
print(genre_count)
# 查看票房收入的统计描述
box_office_stats = data['box_office'].describe()
print(box_office_stats)
2.3 数据清洗
# 处理缺失值
# 假设用均值填充制作成本的缺失值
data['production_cost'].fillna(data['production_cost'].mean(), inplace=True)
# 删除票房收入缺失的记录
data.dropna(subset=['box_office'], inplace=True)
# 处理异常值
# 基于票房收入的四分位数识别异常值并处理
q1 = data['box_office'].quantile(0.25)
q3 = data['box_office'].quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
data = data[(data['box_office'] >= lower_bound) & (data['box_office'] <= upper_bound)]
# 数据类型转换
# 将上映日期转换为日期时间类型
data['release_date'] = pd.to_datetime(data['release_date'])
2.4 数据分析
2.4.1 影片类型与票房关系
# 计算各影片类型的平均票房
avg_box_office_by_genre = data.groupby('genre')['box_office'].mean().reset_index()
# 绘制柱状图
plt.figure(figsize=(10, 6))
sns.barplot(x='genre', y='box_office', data=avg_box_office_by_genre)
plt.title('Average Box Office by Movie Genre')
plt.xlabel('Genre')
plt.ylabel('Average Box Office')
plt.xticks(rotation=45)
plt.show()
2.4.2 演员影响力分析
# 统计主演出演电影的总票房
star_total_box_office = data.groupby('star')['box_office'].sum().reset_index()
star_total_box_office = star_total_box_office.sort_values(by='box_office', ascending=False)
# 绘制前10名主演的总票房柱状图
top_stars = star_total_box_office.head(10)
plt.figure(figsize=(12, 6))
sns.barplot(x='star', y='box_office', data=top_stars)
plt.title('Total Box Office of Top 10 Stars')
plt.xlabel('Star')
plt.ylabel('Total Box Office')
plt.xticks(rotation=45)
plt.show()
2.4.3 上映档期对票房的影响
# 提取上映月份
data['release_month'] = data['release_date'].dt.month
# 计算各月份的平均票房
avg