美文网首页
我的第一份电影数据分析报告

我的第一份电影数据分析报告

作者: 科研小土豆 | 来源:发表于2018-06-14 15:23 被阅读575次

TMDB 电影数据分析报告

[TOC]

一、背景概述

近年来电影产业迅猛发展,其已成为重要的艺术和娱乐载体。同时,电影也可看成是一种极度依附于资本和工业水准的投资形式,因此分析电影数据有助于抓住电影工业发展的趋势,更好地为投资者提供投资策略。

二、提出问题

  1. 年产电影数量的趋势是什么?电影评分随着时间的趋势是什么?能说明什么问题?
  2. 电影预算和评分数量二者分别与票房的关系?
  3. 电影关键词中有哪些热度很高?
  4. 哪家电影公司制作的电影最多?

三、 理解数据

  1. id: 电影id
  2. imdb_id: imdb id
  3. popularity: 流行度
  4. budget:预算
  5. revenue:收入
  6. original_title:片名
  7. cast: 演职员表
  8. homepage: 电影主页
  9. directior: 导演
  10. tagline: 宣传语
  11. keywords:关键词
  12. overview: 影片概述
  13. runtime:影片时长
  14. genres:影片风格
  15. production_companies:出品公司
  16. release_date:发行日期
  17. vote_count:得票总数
  18. vote_average:平均分
  19. release_year:发行年
  20. budget_adj:调整后预算
  21. revenue_adj:调整后收入

四、导入包

import time
from time import strftime
from datetime import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('darkgrid')
%matplotlib inline
import json
#词云包
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
from PIL import Image

五、 数据清洗

  1. 缺失值处理:为了更准确地分析,检查budget, revenue, vote_count, vote_average, budget_adj, revenue_adj列是否有空值或0. 检查后发现vote_count,vote_average列均无空值或0
  • budget列没有空值,但是有0,将所有budget非零值取平均值取代0值。同理可处理revenue列,budget_adj列, revenue_adj列
while False:
    print(sum(df['budget'].isnull()))
    break
while False:
    print(sum(df['budget']==0))
    break
budget_avg = sum(df['budget'])/sum(df['budget']!=0)
df['budget']=df['budget'].replace(0,budget_avg)

六、回答问题及数据可视化

  1. 年产电影数量的趋势是什么?电影评分随着时间的趋势是什么?能说明什么问题?



由图可见,年产电影的趋势不断上升,而近些年的评分越来越低,从评分均值上看,一直处于下滑状态。推测近年来,电影虽数量大幅上升,而电影质量整体下滑,因而评分普遍低。代码如下:

#解决图片中文乱码    
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#统计每年的电影数量
year_count = df.groupby('release_year')['release_year'].count()
year = df['release_year']
#绘制电影数量&年份折线图
fg = plt.figure(figsize=(10,6))
ax1 = fg.add_subplot(1,1,1)
year_count.plot(x =year.index, y =year_count, label = 'year movie produce trend', ax = ax1)
plt.title('year count &  year', fontsize = 16)
plt.xticks(fontsize = 14)
plt.yticks(fontsize = 14)
plt.xlabel('year', fontsize =16)
plt.ylabel('year count', fontsize =16)
plt.legend(fontsize = 13)
#筛选4分以上的评分
scores = df[df['vote_average']>4].sort_values(by = 'vote_average', ascending = False)
scores_year = scores.groupby('release_year')['vote_average'].mean()
scores_year = scores_year[:100]
#print(scores_year )
#绘制评分&年份均值折线图
fg = plt.figure(figsize=(10,6))
ax1 = fg.add_subplot(1,1,1)
scores_year.plot(x =scores_year.index, y = 'vote_average', label = 'vote trend', ax = ax1)
plt.title('vote average & release year', fontsize = 16)
plt.xticks(fontsize = 14)
plt.yticks(fontsize = 14)
plt.xlabel('release year', fontsize =16)
plt.ylabel('vote average', fontsize =16)
plt.legend(fontsize = 13)

困难点:一开始画图时,图中汉字无法显示,通过网上查找资料完成。

  1. 电影预算和评分数量二者分别与票房的关系?

由上图可知,电影票房与评分个数和预算之间均有相关关系。电影票房与评分个数之间的关系强于其与调整后预算的关系。绘图代码如下:

#票房与预算关系
while False:
    sns.regplot(df['budget'],df['revenue_adj'])
    plt.title('电影票房与调整后预算的关系')
    plt.xlabel('调整后续预算')
    plt.ylabel('票房')
    plt.grid(False)
    break

#票房与评分数量关系
while True:
    sns.regplot(df['vote_count'],df['revenue_adj'],color="g")
    plt.title('电影票房与评分个数的关系')
    plt.xlabel('评分个数')
    plt.ylabel('票房')
    plt.grid(True)
    break
  1. 电影关键词中有哪些热度很高?

从上图即电影关键词词云可见, woman director(女导演),independent film(独立电影), based novel(小说改编)等词语在电影关键字中出现频率很高,由此可以了解大众的关注的热点,了解观众的偏好 。其代码如下:

#绘制图谱
#读入背景图片 
pic_mask = np.array(Image.open("C:\\Users\\lenovo\\Pictures\\udacity-program3\\earth.jpg"))
#读取生成词云的文件或字符串
wordlist = []
for word in df['keywords']:
    wordlist.append(word)
wordstr = "".join(str(wordlist))
plt.figure(figsize= (10,8))
# 设置停用词
stopwords = set(STOPWORDS)
stopwords.add('film')
my_wordcloud =WordCloud(
            background_color = 'black',# 设置背景颜色 
            mask = pic_mask, # 设置背景图片
            stopwords = stopwords, # 设置停用词
            max_words = 500,# 设置最大现实的字数
            max_font_size = 360 ,# 设置字体最大值
            scale =1,
            random_state = 80 # 设置有多少种随机生成状态,即有多少种配色方案
                       )
my_wordcloud.generate(wordstr)
image_colors = ImageColorGenerator(pic_mask)
plt.imshow(my_wordcloud)
plt.axis('off')
plt.show()

困难点:

  1. 安装wordcloud包时, 通过prompt直接输入pip install wordcloud 无法安装,注意要安装python版本对应的wordcloud版本,最后在CSDN网站上找到网友上传的资料,点这里获取
  2. 背景图片路径报错,通过网上查找资料,将“/”替换为"//",解决问题。
  1. 哪家电影公司制作的电影最多?

由图可知,Hamer Film productions出品的电影最多, 其次是Eon Productions, 第三名是International Production Company. 其代码如下:

#哪家电影公司制作的电影最多
df = pd.read_csv('tmdb-movies.csv')


#一部电影有多个电影公司,需要分出来,转化为列表,汇总
df['production_companies'] = df['production_companies'].str.split('|')
#类型汇总为列表
list1=[]
for i in df['production_companies'].str:
    list1.extend(i)
#统计同类型的频率
companies=pd.Series(list1).value_counts().sort_values(ascending=True)
#companies=companies.drop('')

#类型汇总为set(去掉重复)
min_year = df['release_year'].min()
max_year = df['release_year'].max()
liste_companies = set()
for s in df['production_companies'].str:
    liste_companies = set().union(s, liste_companies)
liste_companies = list(liste_companies )
liste_companies[1:]

#建立时间与电影公司映射关系

company_df = pd.DataFrame(  index = liste_companies[1:],columns= range(min_year, max_year + 1))
company_df = company_df.fillna(value = 0)
year = np.array(df['release_year'])
z = 0
for i in df['production_companies'].str:
    split_company = list(i)
    for j in split_company:
        if type(j)!=float: 
            company_df.loc[j, year[z]] = company_df.loc[j, year[z]] + 1
    z+=1
company_df.head(10)
company_df = company_df.T
new = company_df.sum()
new[70:100]

#绘制电影数量与电影公司关系图表
plt.rcParams['font.sans-serif']=['SimHei']#中文显示
plt.rcParams['axes.unicode_minus']=False
plt.subplots(figsize=(18,8))
ax = new[70:100].plot.bar(width=0.7)
plt.xticks(fontsize=13)
plt.yticks(range(0,100,100), fontsize=20)
plt.title('电影公司&电影数量', fontsize = 16)
plt.show()

困难点:大多数影片包含多个电影公司,电影公司之间采用"|"分割,切割数据,转换数据类型和统计数据有难度,查询资料后,类比资料信息完成。

七、分析总结

这次数据分析的过程还是比较困难的,虽然分析出了一些结果,但还有很多想做的地方仍然没有实现,希望继续努力学习数据分析的课程,不断进步。

相关文章

  • 我的第一份电影数据分析报告

    TMDB 电影数据分析报告 [TOC] 一、背景概述 近年来电影产业迅猛发展,其已成为重要的艺术和娱乐载体。同时,...

  • 如何撰写你的第一份数据分析报告

    主讲:陈丹奕 撰写第一份数据分析报告 展示数据收集、处理的能力,逻辑思维框架,数据可视化,行业业务理解的能力 数据...

  • 谁说菜鸟不会数据分析(八)

    8.1初识数据分析报告 8.1.1数据分析报告是什么 数据分析报告是根据数据分析原理和方法,运用数据来反映,研究和...

  • 7. 数据分析报告

    数据分析报告概述 数据分析报告是根据数据分析方法,运用数据来反映、研究和分析某项事物的现状、问题、原因、本质和规律...

  • 电商客户特征识别数据分析 : 实战

    电商客户特征识别数据分析 - 数据分析报告 数据分析报告的通用流程 背景介绍 数据分析算指标(分组、聚合、透视表、...

  • 2017年第4季度汽车销售同比分析

    数据来源: 制作工具: Smartbi分析报告功能——直接用Word刷出来的数据分析报告! Smartbi透视分析...

  • 数据分析报告撰写 2019-11-02

    简单的讨论学习才是优秀数据分析报告 数据分析报告的作用就是展示分析结果及提供业务决策依据。综合而言,优秀的分析报告...

  • 【干货】怎样写出专业数据分析报告

    在数据分析工作中,分析报告是数据分析成果的重要体现,也是很多企业考核数据分析师的硬指标。 1 数据分析报告的类型 ...

  • 数据分析——实战|IMDB-Movie分析案例

    一、项目背景 本数据报告以IMDB-Movie为数据集,通过相关的指标对电影进行分析,具体指标包括:电影时长和评分...

  • 专业的数据分析报告

    一、认识数据分析报告 1.定义: 数据分析报告是根据数据分析原理和方法,运用数据来反映、研究和分析某项事物的现状、...

网友评论

      本文标题:我的第一份电影数据分析报告

      本文链接:https://www.haomeiwen.com/subject/jgneeftx.html