易学智能

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2260|回复: 3

[转]IMDB数据集

[复制链接]

22

主题

107

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2018-8-24 17:50:56 | 显示全部楼层 |阅读模式
本帖最后由 马猴烧酒 于 2018-8-27 08:47 编辑

本文转载于https://blog.csdn.net/m0_37744293/article/details/77426851
1 简介
    我们如何评价一部电影上映之前就判断处着是不是一部伟大的电影?
    这位数据集的作者
长期这个问题所困扰,很多人依赖影视评论家来评分电影,也有一些人只凭自己的直觉,但电影上映之后需要过很长时间才会获得合理的影评,同时,人们的直觉有时候是靠不住的。
    所以我们提出以下两个问题
    1、人类每年拍摄出数以千计的电影,除了依赖影视评论家的直觉,我们有更好的方式来判断出伟大的电影么?
    2、电影中海报中的人物和电影评级有关系么?  
    为了回答这个问题,作者在IMDB爬取了5000多条电影数据,整个爬取过程花费2个小时完成,最后,作者获取了需要的28个特征变量,和来自5043部电影和4906张电影的数据,涵盖66个国家,横跨100年的时间,这里有2399位独特的电影导演,数以千计的男女演员。
28个特征变量如下:

1.png
图1-1

  1. facenumber_in_poster:海报中的人脸数量
  2. director_name:导演姓名
  3. movie_title:电影片名。
  4. director_facebook_likes:脸书上喜欢该导演的人数
  5. title_year:电影年份
  6. duration:电影时长
  7. actor_1_name:男一号姓名
  8. country:国家
  9. actor_1_facebook_likes:脸书上喜爱男一号的人数
  10. genres:电影题材
  11. color:画面颜色。
  12. actor_2_name:男二号姓名
  13. aspect_ratio:画布的比例
  14. actor_2_facebook_likes:脸书上喜爱男二号的人数
  15. content_rating:电影分级
  16. plot_keywords:剧情关键字
  17. actor_3_name:三号男演员姓名
  18. language:语言
  19. actor_3_facebook_likes:脸书上喜爱3号男演员的人数
  20. budget:制作成本
  21. cast_total_facebook_likes:脸书上喜爱演员的总人数
  22. gross:总票房
  23. movie_facebook_likes:脸书上被点赞的数量
  24. movie_imdb_link:imdb地址
  25. imdb_score:imdb上的评分
  26. num_voted_users:参与投票的用户数量
  27. num_critic_for_reviews:评论家评论的数量
  28. num_user_for_reiews: 用户的评论数量
复制代码
2 数据分析
    数据分析部分主要以 Python 编程语言为基础,使用 pandas 作为数据整理和统计分析的工具,matplotlib 用于制作图形,再加上Tableau的数据可视化分析。
数据加载
  1. import pandas as pd
  2. movies_df = pd.read_csv('movie_metadata.csv')
  3. print(movies_df.head())#默认头5行
  4. print(movies_df.info())#DataFrame的简明总结
  5. print(movies_df.describe())#返回count mean std min max等值
复制代码
数据清洗——去重
  1. movies_df= movies_df .drop_duplicates()
  2. print(movies_df.head())#默认头5行
  3. print(movies_df.info ())
  4. print(movies_df.describe ())
复制代码
    在pandas中有两个函数是专门用来处理重复值的,分别是duplicated函数、drop_duplicates函数。Duplicated函数用来查找并显示数据表中的重复值。返回一个布尔值的Series.drop_duplicates()表示将过滤重复行,即“去重”,默认是判断全部列。当然也可以指定判断某一列是否有重复,该列中重复的数据就删除该数据整行。duplicated函数、drop_duplicates函数默认保留的是第一个出现的值的组合。传入take_last=True则保留最后一个。
数据清洗——处理缺失值
  1. movies_df = movies_df .dropna()
复制代码
地域性分析:
  1. grouped = movies_df.groupby('country').size()
  2. print(grouped.sort_values( ascending=False ).head(10))#按照值排序
  3. print(grouped.sort_index())#按照索引排序
复制代码
  1. import matplotlib.pyplot as plt
  2. grouped = movies_df.groupby('country').size()
  3. grouped_head_10=grouped.sort_values( ascending=False ).head(10)
  4. print(grouped_head_10)#按照值排序
  5. print(grouped.sort_index())#按照索引排序
  6. grouped.plot(kind = 'bar')
  7. plt.show()
  8. grouped_head_10.plot(kind = 'bar')
  9. plt.show()
复制代码
1.png
图2-1
    综上可见,美国以3773的优势取得第一,英国443位居第二,法国154位居第三,中国位居第九。
高质量电影分布
    前10名高质量电影的国家和具体数量
  1. movie_max=movies_df['imdb_score'].sort_values(ascending=False).head(10)
  2. print(pd.Index(movie_max ))
  3. movie_max1=movies_df.sort_values(['imdb_score'],ascending=False).head(10)
  4. #print(pd.Index(movie_max1 ))
  5. print(movie_max1)
  6. print(movie_max1[['movie_title','imdb_score']])
复制代码
    运行结果
  1.                                           movie_title  imdb_score
  2. 1937                        The Shawshank Redemption          9.3
  3. 3466                                   The Godfather          9.2
  4. 66                                   The Dark Knight          9.0
  5. 2837                          The Godfather: Part II          9.0
  6. 4498                  The Good, the Bad and the Ugly          8.9
  7. 339    The Lord of the Rings: The Return of the King          8.9
  8. 3355                                    Pulp Fiction          8.9
  9. 1874                                Schindler's List          8.9
  10. 2051  Star Wars: Episode V - The Empire Strikes Back          8.8
  11. 683                                       Fight Club          8.8
复制代码

  1. movie_max_series=pd.Series(movie_max['imdb_score'].values,index = movie_max['movie_title'])
  2. print(movie_max_series)
  3. movie_max_series.plot(kind='bar')
  4. plt.show()
复制代码
1.png


图2-2

根据历史数据预测下一年的电影数量
  1. grouped_year= movies_df.groupby('title_year').size()
  2. print(grouped_year)
  3. grouped_year.plot()
  4. plt.show()
复制代码
1.png
图2-3

回复

使用道具 举报

10

主题

82

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2018-9-15 09:11:49 | 显示全部楼层
这么多电影的数据集啊,好贴,收藏了
回复

使用道具 举报

15

主题

97

帖子

310

积分

论坛管理

Rank: 4

积分
310
发表于 2018-9-17 11:58:00 | 显示全部楼层
好资源,收藏了
回复

使用道具 举报

4

主题

33

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2018-10-8 08:40:26 | 显示全部楼层
非常不错的资源
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易学智能

GMT+8, 2024-11-21 21:09 , Processed in 0.018846 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表