数据分析项目实战:电影数据分析

本文基于kaggle的TMDB 5000 Movie Dataset,探讨了电影类型随时间的变化、类型与利润的关系、Universal与Paramount的发行对比、改编与原创电影对比以及电影时长与票房评分的关系。通过数据清洗、分析和可视化,揭示了电影行业的关键洞察。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、项目背景

电影公司制作一部新电影推向市场时,要想获得成功,通常要了解电影市场趋势,观众 喜好的电影类型,电影的发行情况,改编电影和原创电影的收益情况,以及观众喜欢什么样的内容

本案例来源于 kaggle 上的 TMDB 5000 Movie Dataset 数据集,为了探讨电影数据可视化, 为电影的制作提供数据支持,主要研究以下几个问题:

(1)电影类型如何随着时间的推移发生变化的?

(2)电影类型与利润的关系?

(3)Universal 和 Paramount 两家影视公司的对比情况如何?

(4)改编电影和原创电影的对比情况如何?

(5)电影时长与电影票房及评分的关系?

(6)分析电影关键字

二、理解数据

**1、采集数据 **

下载数据集:https://www.kaggle.com/tmdb/tmdb-movie-metadata

2、导入数据,并进行查看

代码实现:

import pandas as pd
import json

# =============================================加载数据===================================

# 加载数据 --credits
credits = pd.read_csv('./tmdb_5000_credits.csv')
print('credits:\n', credits)
print('*' * 100)
print('credits:\n', credits.columns)
print('*' * 100)
print('credits:\n', credits.info())
print('*' * 100)

# 加载数据
movies = pd.read_csv('./tmdb_5000_movies.csv')
print('movies:\n', movies)
print('#' * 100)
print('movies:\n', movies.columns)
print('#' * 100)
print('movies:\n', movies.info())
print('#' * 100)

3、数据说明

电影数据说明表

列名 说明
id 标识号
imdb_id IMDB 标识号
popularity 在 Movie Database 上的相对页面查看次数
budget 预算(美元)
revenue 收入(美元)
original_title 电影名称
cast 演员列表,按
homepage 电影首页的 URL
director 导演列表,按
tagline 电影的标语
keywords 与电影相关的关键字,按
overview 剧情摘要
runtime 电影时长
genres 风格列表,按
production_companies 制作公司列表,按
release_date 首次上映日期
vote_count 评论次数
vote_average 平均评分
release_year 发行年份
三、数据清洗

1、合并数据集

先将 credits 数据集和 movie 数据集中的数据合并在一起,再查看合并后的数据集信息

代码实现:

# (1)合并数据
# print(credits['crew'])
# credits 中存在 movie_id  和 title
# movies 中存在 id 和 title
# 将 credits 中的 movie_id 修改为 id
credits.rename(columns={
   'movie_id': 'id'}, inplace=True)
# print('credits的列索引:\n', credits.columns)
# 主键合并 ---on id 和 title
all_data = pd.merge(left=credits, right=movies, on=['id', 'title'], how='outer')
print('all_data:\n', all_data)
print('all_data:\n', all_data.columns)
print('all_data:\n', all_data.dtypes)

2、选取子集

由于数据集中包含的信息过多,其中部分数据并不是我们研究的重点,所以从中选取我 们需要的数据:

代码实现:

# 筛选特征
all_data = all_data['original_title', 'crew', 'release_date', 'genres', 'keywords',
                    'production_companies', 'production_countries', 'revenue',
                    'budget', 'runtime', 'vote_average']
print('all_data的列索引:\n', all_data.columns)
print('all_data的形状:\n', all_data.shape)

由于后面的数据分析涉及到电影类型的利润计算,先求出每部电影的利润,并在数据集 data 中增加 profit 数据列

代码实现:

# 增加利润
all_data['profit'] = all_data['revenue'] - all_data['budget']
print('all_data的列索引:\n', all_data)
print('all_data的形状:\n', all_data)

3、缺失值处理

代码实现:

# 检测缺失值
# pd.isnull + sum
res_null = pd.isnull(all_data).sum()
print('缺失值检测结果:\n', res_null)

# 检测到 release_date 存在一个缺失值 ---针对方式:填充,查找具体的电影名称,根据电影名称查找上映时间
# a、确定bool数组
mask = all_data.loc[:, 'release_date'].isnull()
# b、根据bool数组来获取缺失值位置的电影名称
movie_name = all_data.loc[mask, 'title']
print('缺失上映日期的电影名称为:\n', movie_name)
# 缺失上映日期的电影名称为:
#  4553    America Is Still the Place
# Name: title, dtype: object

# 通过上网查询该电影的上映日期为:2014-06-01
# c 、 填充
all_data.loc[mask, 'release_date'] = '2014-06-01'

# 将 release_date 转化为 pandas支持的时间序列
all_data.loc[:, 'release_date'] = pd.to_datetime(all_data.loc[:, 'release_date'])

# 获取 发行年份
all_data.loc[:, 'release_year'] = all_data.loc[:, 'release_date'].dt.year

通过上面的结果信息可以知道:整个数据集缺失的数据比较少。 其中 release_date(首次上映日期)缺失 1 个数据,可以通过网上查询补齐这个数据,填补 release_date(首次上映日期)数据

4、数据格式转换

genres 列数据处理:

代码实现:

# 查看电影风格数据
print('电影风格:\n', all_data.loc[:, 'genres'])  # json数据类型

# json.loads # 可以将json转化为python类型
# 将 all_data.loc[:, 'genres'] 由 json类型转化为 python类型
all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(json.loads)

# 构建所有的电影的类型
all_movie_type = set()


# 定义一个函数,来提取电影类型
def get_movie_type(val):
    """
    获取电影类型
    :param val: 数据
    :return: 提取之后的电影类型数据
    """
    # 构建一个空列表,用来存储每一个电影的电影类型
    type_list = []
    # 
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值