一、项目背景与介绍
数据来源:kaggle数据科学社区上TMDB 5000 Movie Dataset数据集:TMDB 5000 Movie Dataset
数据介绍:TMDB是一个电影资料库,本项目数据主要为欧美地区2017年之前的5000部电影
分析目的:对电影数据进行分析研究,了解电影市场趋势,为电影制作提供决策。
二、定义问题
1、各类型电影数量会随时间如何变化吗?是如何变化的?
2、不同类型的电影的盈利情况有何差异?
3、原创电影与改编电影的有何差异?
4、电影主要产自哪些地区?
5、观众喜好与哪些因素有关?
6、Universal Pictures与Paramount Pictures两家巨头公司的业绩如何?
三、理解数据
导入相关安装包,读取数据
查看数据信息观察数据,发现 genres、keywords、production_companies、production_countries、spoken_languages、cast、crew列为JSON编码的字符串。
删去credits的列title,因为该列和movies的列重复了,再把两个数据集合并,删去不在研究范围内的值。
credits中movie_id列 和 movies中id列是对应关系,故以此为连接合并两个数据集。
各字段含义:
● id:标识号
● movie_id:标识号
● popularity:在 Movie Database 上的相对页面查看次数
● budget:预算(美元)
● revenue:收入(美元)
● original_language:原始语言
● spoken_languages:输出语言
● original_title:原始电影名称
● cast:演员列表,按 | 分隔,最多 5 名演员
● crew:剧组
● title:电影名称
● status:电影状态
● homepage:电影首页的 URL
● tagline:电影的标语
● keywords:与电影相关的关键字,按 | 分隔,最多 5 个关键字
● overview:剧情摘要
● runtime:电影时长
● genres:风格列表,按 | 分隔,最多 5 种风格
● 制作公司列表:production_companies按 | 分隔,最多 5 家公司
● production_countries:制作国家
● release_date:首次上映日期
● vote_count:评分次数
● vote_average:平均评分
三、数据清洗
1、选择子集
通过 info()和describe ()方法查看要研究的数据是否存在异常情况
可以看到release_date、runtime存在缺失值。
可以看到budget,revenue,vote_average,vote_count最小值为0,这些列中可能存在异常值。
2、缺失值处理
查找资料,填充缺失值
查看runtime的缺失值
查找资料,填充缺失值
3、异常值处理
budget,revenue,vote_average,vote_count最小值为0,可能存在异常,用平均值填充。
4、数据格式转换
查看release_date列的数据
需要转换为日期类型并提取年份
5、特殊格式数据处理
本项目要进行研究的数据中的genres,keywords,production_companies,production_countries列均为json格式,不便对其进行分析。需通过json.loads先将json字符串转换为字典列表形式,再使用循环,选取需要的数据,本次分析取出name键所对应的值,并用“|”分隔。
四、数据分析及可视化
1、各类型电影数量变化和分布
(1)各类型电影逐年的数量变化
genre_set集合存放所有电影类型
genre_year_df存放各个年份的不同电影类型的电影总数
绘图:
由图可见,约从1992开始,电影市场开始爆发式增长,其中戏剧类(Drama)和喜剧类(Comedy)这两个类型是随时间增长幅度最大,其次是惊悚片(Thriller)和动作片(Action)。
(2)各类型电影数量分布
各类型电影总数
各类型电影数量分布图:
从图中可看出,排名前5的类型为Drama、Comedy、Thriller、Action和Romance。其中即使是排名前5的类型中,每一类型之间的差距也不算小。Drama类稳稳的在榜首。
2、各类型电影的盈利情况
profit_df存放电影类型和利润数据
profit_by_genre存放计算后的各类型电影的利润平均值,利润=收入-支出成本
各电影类型平均收益分布图:
3、原创电影与改编电影的差异
keywords中的包含"based on novel"的是改编电影,其余是原创电影。
创建一个DataFrame存放原创电影与改编电影original_recompose,包含type、 profit 、 budget 等字段,计算出利润率 profit_rate=profit/budget 。
(1)电影数量对比
原创电影占据了几乎所有的市场,只有少部分为改编电影
(2)利润及利润率对比
改编电影的支出要高于原创电影,且对应的收入和利润也要高于原创电影
4、电影产地分布
统计出各个地区的电影数量,country_df存储电影产地的数据
绘制饼图:
由图可见,美国电影数量一骑绝尘,占比达到了61.4%,名副其实的产出大国(应该也与该网站收录的数据有关)。其次是英国,德国,法国,加拿大。
5、观众喜好与哪些因素有关
(1)电影类型与受欢迎度的关系
popularity字段是在 Movie Database 上的相对页面查看次数,根据这个数据来判断电影的受欢迎度。
绘图
可见,最受观众欢迎的电影类型的前五名是
Adventure、Animation、Science Fiction、Fantasy 、Action
(2)电影时长与受欢迎度的关系
受欢迎度较高的电影的时长基本在90-150分钟之间。 电影时长太长或太短的电影受欢迎程度较低。
(3)电影评分与受欢迎度的关系
评分高的电影不一定受欢迎度高,可能存在冷门好片。 但受众欢迎度高的,电影评分基本也不低,群众的眼睛是雪亮的,制作公司产出好片,获得受众喜爱的概率也更高。经过更多受众的检验,该电影为好片的可靠性也更高。
6、Universal Pictures与Paramount Pictures两家巨头公司的业绩如何?
company_df存放两家公司、电影类型、盈利的数据
(1)利润对比
绘图
由图可见,两家公司利润总额并无明显差异,Universal Pictures公司略高于Paramount Pictures公司。
(2)出品的电影类型对比
company_df存放两家公司、各类型电影,数值为1的代表属于该类型。
绘图Universal Pictures:
绘图Paramount Pictures:
7、电影关键词
keywords_list存放从keywords中提取出的关键词,去掉一些没有实际含义的字符串和短语
通过WordCloud包生成词云图