
TMDB电影商务大数据分析(关联规则深度分析)第二部分
这部分主要讲数据的处理与简单可视化
文章:
代码:
目录
四、数据挖掘与可视化
(1)导入
首先导入本次实验需要的使用的四个Python工具库,分别是numpy、pandas、matplotlib、seaborn。
接下来导入数据集,调用Pandas的read_csv()函数读取.csv类型的文件,以数据文件名’tmdb_5000_movies.csv’作为参数。read_csv函数生成一个DataFrame,而后赋值给movies变量。调用DataFrame的info()方法查看数据集的详细信息,包含数据行数、列数、列索引、每列数据的数据类型,数据存储等。在数据文件中,每一行数据是一条记录,每一列称为一个字段。
输入结果如下:
由结果可以看出,该数据集总共有20个字段,总共包含4803条记录,记录索引为0至4802。另外,统计了各个字段上非空值的数目及各个字段的数据类型,比如tagline字段非空值数目为3959,总数据量为4803,说明该字段含有空值。使用isnull()方法判断是否缺失,sum()方法统计缺失的数目。结果如下图所示。
(2)数据字段展示表
字段名 | 字段解释 | 字段名 | 字段解释 | 字段名 | 字段解释 |
budget | 预算 | overview | 概览 | runtime | 电影时长 |
genres | 类型 | popularity | 受欢迎度 | spoken_languages | 语言 |
homepage | 主页 | production_companies | 制片公司 | status | 电影状态 |
id | 电影标识号 | production_countries | 国家 | tagline | 宣传语 |
keywords | 关键字 | release_date | 发行日期 | title | 标题 |
original_language | 原声语言 | revenue | 电影收入 | vote_average | 评分 |
original_title | 原标题 | vote_count | 评分次数 |
调用DataFrame的describe()查看给定数据样本的基本统计信息,包含budget、id、popularity、revenue、runtime、vote_average、vote_count字段,对每个数值类型的字段统计个数、平均值、标准差、最小值、四分之一分位点(25%)、四分之二分位点(50%)、四分之三分位点(75%)以及最大值。
上述结果表格中,budget、popularity、revenue、runtime、vote_average、vote_count列的最小值为0,对于budget、revenue、runtime中出现0是不符合常规的,认为这些是异常值,尤其revenue列25%处为0,说明revenue列中存在很多为0的值。
(3)数据清洗
经初步浏览数据集基本信息可以看出,数据集中存在缺失值现象,数据集中homepage、tagline字段中含有大量缺失值,考虑到这两个字段对不影响本次分析,可以直接删除这两个字段,同时删除其他与分析无关的字段。
对于release_date、runtime这两个字段缺失值较少,直接删除含有缺失值的记录。
调用movies.query()方法查找出budget、revenue字段中异常值所在记录并获取相应索引,使用drop()方法删除指定索引的记录后,数据集中样本数据还有3229条记录。再次查看数据集各字段基本统计信息,数据相对正常。
(4)数据统计
• 查看收入前十的电影信息
找出电影收入最高的前十部电影的基本信息。
top10=movies.sort_values('revenue',ascending = False).head(10)
top10[['budget','genres','original_title','release_date','revenue','runtime','vote_average','vote_count','popularity']]
结果发现电影收入排名前十的电影预算相对高,genres字段中id为12、name为Adventure的电影和id为28、name为Action的电影占比较大,release_date字段中显示上映年份基本分布在2000年后,vote_count字段表明参与评分次数相对充足,从vote_average字段看出收入高的电影评分不低,而popularity字段显示高收入电影的受欢迎程度。
• 计算收入与其他字段相关系数
movies['release_year']= [i.year for i in pd.to_datetime(movies['release_date'])]
a=movies[['budget','popularity','vote_average','vote_count','runtime','release_year','revenue']].corr()
第一行代码在原数据集中增加一个release_year字段,数据集中提供了电影上映日期,但release_data字段值的数据类型不是日期类型,使用DataFrame的to_datatime()函数将指定格式转为日期格式,使用year属性获取日期中的年份作为新增字段的值。为了验证猜测,第二行代码中调用DataFrame的corr()函数计算budget、release_year、runtime、popularity、vote_average、vote_count等字段与revenue(电影收入)字段的相关性,获取发现revenue字段与budget、popularity及vote_count字段相关系数分别为0.70、0.60及0.76,具有高相关性,revenue字段与runtime、release_year、vote_average字段相关系数分别为0.23、0.14、0.18,具有低相关性。
• 查看电影年份分布
movies['release_year'].value_counts()
movies['release_year'].hist(bins=25)
首先调用DataFrame中的value_counts()方法对release_year字段值进行频数统计,得出各个年度发行的电影数量,数据集中电影发行年份自1916年起,包含89个年份的电影信息。
通过绘制直方图直观看出电影在各年度的分布情况,如下图所示。
从图中可以看出,电影发行年份集中在2000-2016年之间。
• 查看电影时长分布
movies['runtime'].value_counts()
movies['runtime'].hist(bins=30)
统计不同时长电影的数量,通过数据可以看出数据集中记录的电影时长总共有136个以及不同时长电影的数量。
通过直方图可以直观看出电影时长集中分布在80-130之间,其中时长在90-110的电影数量占比较大。
• 查看预算分布
movies['budget'].hist(bins=15)
数据集中低预算电影占比较大,预算集中在0至0.5x108。
• 查看评分分布
movies['vote_average'].hist(bins=20)
• 查看评论次数
movies['vote_count'].hist(bins=20)
数据集中绝大多数电影评论次数低于2000,其中评论次数在500以内评论次数占比最大。
(5)影响收入的因素分析
• 绘制电影收入与影响因子散点图
plt.rcParams['font.sans-serif'] = [u'SimHei']
list1= ['budget','popularity','vote_count','vote_average','runtime','release_year']
fig,axes = plt.subplots(2,3,figsize=(12,8),dpi = 70)
for i in range(2):
for j in range(3):
axes[i,j].scatter(x= list1[3*i+j], y='revenue', data=movies,s = 3)
axes[i,j].set_title(list1[3*i+j])
fig.suptitle('影响电影要房的因素')
fig.show()
用上面的代码绘制budget、release_year、runtime、popularity、vote_average、vote_count等字段与revenue字段的散点图。
效果如下图所示;
上图的第一行标题为budget、popularrity、vote_count的三个子图能更可以直观看出,budget、popularrity、vote_count字段与revenue字段呈线性分布,意味着随影响因子增长,收入整体均呈增长趋势。而第二行标题为vote_average、runtime、release_year的三个子图表明,vote_average、runtime、release_year字段与revenue字段没有明显的线性关系。
• 分组分析电影收入与影响因子的关系
由于电影发行时间集中在2000年以后,为了更好研究影响电影票房的因素,我们针对2001年至2015年发布的电影数据做进一步分析。
首先,提取出发行年份在2001年至2015年的所有电影,保存到movies中,筛选后数据还有2103条记录。
电影中数据记录了2001至2015总共15年的电影数据,时间跨度可能会相对大一些,按照年份进行分组,以每5年作为一组,将电影数据分成三组,针对每一组数据分析影响电影票房的因素。
接下来,使用cut()方法将电影票房按照四分位点划分为四个等级,分别为’Low’, ‘Medium’, ‘Moderately High’, ‘High’,也即“低”、“中下”、“中上”和“高”。
划分等级后,按照revenueclass、 fiveyearclass字段对数据进行分组,取出各组数据的中位数,保存到变量d_summary中。
按年份分组后,得到三组数据,分别为‘2001-2005年’,‘2006-2010年’,‘2011-2015年’,针对每一组数据进行分析,随着收入越高,对应的预算越高,受欢迎程度越高,评论次数越多,电影时长、评分情况表现不明显。下面通过绘制条形图可以更直观的显示影响收入的因素。
下面代码调用matplotlib.pyplot模块中bar()函数绘制电影收入与预算、受欢迎度、评论次数、评分、时长、发行年份之间关系的条形图。
上图中含有6幅图,图中横坐标表示收入等级,纵坐标表示影响因素,针对每一幅图,同一收入等级中有三根柱子,从左向右以此表示为第一个5年数据,即2001至2005年电影数据,第二个5年数据,即2006至2010年电影数据,第三个5年数据,即2011至2015年电影数据。第一行分别绘制收入与预算条形图、收入与受欢迎程度条形图、收入与评论次数条形图。从收入与受欢迎程度图像可以看出,三组5年数据,每一组数据均是当电影票房高时,对应受欢迎程度也高,当收入处于同一个等级时,随着时间的推移,电影受欢迎程度略微增高,可能电影受欢迎层度受时间影响,间接影响着电影票房。
针对收入与预算条形图,对于每一组年份,预算对票房的影响比较明显,收入高的电影,对应预算也高,即随着预算增加,电影票房也增加。说明投资方在制片质量上具有保障性,外加对影片宣传力度大,使票房得以提高。另外,针对收入等级相同时,预算投入与时间没有直接关系,说明不会因为当时时代背景而影响电影预算投入。
针对收入与评论次数条形图,电影票房受评论次数影响比较大,参与评论的次数多的电影,电影票房高。
第二行分别绘制收入与评分条形图、收入与时长条形图、收入与年份条形图。从这三幅条形图可以看出,电影收入与电影评分、电影时长、电影发行年份的关联度不明显。说明评分高低、时长长短及上映年份与电影收入无关。
更多推荐
所有评论(0)