IMDB电影数据分析实践

根据IMDB5000部电影数据集进行下列数据分析:

  • 数据准备:读取数据并查看数据的基本信息
  • 数据清洗:缺失值处理,重复值处理,处理后“干净”数据的基本信息。
  • 数据分析及可视化展示:
  1. 电影出品国及地区和演员票房的情况分析:
    绘制电影出品数量排名前10位的国家及地区的条形图;绘制票房前十的电影中喜爱男 1 号,男 2 号,男 3 号的人数的分组条形图。

  2. 电影数量的分析:
    按年份统计每年电影总数量、彩色影片数量和黑白影片数量并绘制折线图(在同一个坐标系中绘制)。

  3. 电影类型的分析:
    绘制不同类型的电影数量条形图和饼图。

  4. 电影评分统计及电影评分相关因素分析:
    找出评分排名前 20 位电影的片名和评分;绘制所有影片评分与受欢迎程度的关系散点图。

文章目录

  • 一、数据准备:
    • 1. 导入numpy 包和 pandas 包,使用 read_csv 方法读取本地 csv 数据;
    • 2. 查看数据的基本内容、结构
  • 二、数据清洗
    • 1. 缺失数据处理
    • 2. 重复值处理
    • 3. 处理后的数据
  • 三、数据分析及可视化展示
    • 1. 电影出品国及地区和演员票房的情况分析:
      • 1.1 绘制电影出品数量排名前10位的国家及地区的条形图;
      • 1.2 绘制票房前十的电影中喜爱男1号,男2号,男3号的人数的分组条形图。
    • 2. 电影数量的分析:
    • 3. 电影类型的分析:
    • 4. 电影评分统计及电影评分相关因素分析:
      • 4.1 找出评分排名前20位电影的片名和评分;
      • 4.2 绘制所有影片评分与受欢迎程度的关系散点图。

一、数据准备:

读取数据并查看数据的基本信息

1. 导入numpy 包和 pandas 包,使用 read_csv 方法读取本地 csv 数据;

import pandas as pd
import numpy as np
movies = pd.read_csv('D:\\gaojie\\movie_metadata.csv',encoding='utf—8')

2. 查看数据的基本内容、结构

  1. 打印前五行观察

    movies.head (5)
    

    通过前五行,可以看出数据集有28列,以及具体的列名。同时也可以发现,前五行里就有空值较多的行,说明我们需要对数据作处理。

  2. 输入 .shape 看看有多少行多少列

    movies.shape
    

    可以看到,数据集的维度是5043行,28列。

  3. 查看列的数据类型

    movies.dtypes
    

    可以看出,数据集中涉及数据的列默认为 float64 和 int64,无需对数据做类型转换。而其他列均为 object 类型,后面需要考虑是否做类型转换。

二、数据清洗

数据清洗也叫数据预处理,因为大多时候获取的数据并不符合我们的数据分析的标准这时候我们就需要对数据进行预处理,使之数据更加规整有序方便我们下一步的分析。数据清洗通常需要数据分析大部分时间,但是我觉得也是有一定的步骤的,我将它大致分为六部曲: 选择子集→列名重命名→缺失数据处理→数据类型转换→数据排序→异常值处理

1. 缺失数据处理

  1. 先通过isnull函数看一下是否有空值,结果是有空值的地方显示为True,没有的显示为False

    print(movies.isnull())
    

    可以看到有空值的行非常之多,在分析之前我们需要处理对行进行取舍。

  2. 再通 过 isnull().sum() 直接看每一列有多少空值

    print(movies.isnull().sum())
    

    可以看到,只有极少列没有空值,有的列空值异常之多。因此我们处理的时候只能选择让重点的列没有空值,删除行而不要删除列。

  3. 为了方便我们这里选择直接删除有缺失值的行

    print ('删除缺失值前数据集大小 ',movies.shape )# how=‘any’ 在给定的任何一列中有缺失值就删除
    movies = movies.dropna(how ='any' )
    print ('删除缺失值后大小 ',movies.shape )
    

    可以看到一千多行有缺失值的数据被删除掉了,对数据的损耗还是非常大的。最好是只删除重要列有缺失值的行,或者按缺失值的比例删除。规定n行有多少个缺失值时再删除。

  4. 这里我们选择删除电影名重复的行:

    movies.drop_duplicates(subset=["movie_title"],keep='first',inplace=True)
    print(movies.duplicated().value_counts())
    

2. 重复值处理

  1. 先用 duplicated() 方法进行逻辑判断,确定是否有重复值,统计重复值的数量

    print(movies.duplicated().value_counts())
    

    可以看到,虽然有众多重复值,但我们应该考虑哪些列的重复值是不允许出现应该删除的。因为很多重复值可能只是数据相同,或者演员、国家这样的重复值是允许出现的。

  2. 再用 duplicates(subset,keep,inplace) 方法对某几列下面的重复行删除

    • subset: 以哪几列作为基准列,判断是否重复,如果不写则默认所有列都要重复才算
    • keep: 保留哪一个,fist-保留首次出现的,last-保留最后出现的,False-重复的一个都不保留,默认为first
    • inplace: 是否进行替换,最好选择 False,保留原始数据,默认也是 False

    这里我们选择删除所有电影名重复的行

    movies.drop_duplicates(subset=[‘director_name’],keep='first',inplace=True)
    print(movies.duplicated().value_counts())
    

    可以看到重复值并没有变化,因为重复值均为 int64 类型,也就是说没有电影名重复的行。因此没有数据被删除掉 。

3. 处理后的数据

使用 info 查看处理后“干净”数据的基本信息:

movies.info

可以看到,处理后数据为3655行,保留了所有的列。我们将在此数据集上做数据分析及可视化展示。

三、数据分析及可视化展示

1. 电影出品国及地区和演员票房的情况分析:

1.1 绘制电影出品数量排名前10位的国家及地区的条形图;

  1. 按country分组,统计所有国家的电影数量

    country_group = movies.groupby('country').size()
    country_group
    

  2. 电影出品数量排名前10位的国家

    group_head_10=country_group.sort_values(ascending=False).head(10)
    group_head_10
    

    得到了电影数量前十的国家及对应的电影数量,因为电影数量为 int64,因此可以直接作为纵轴数值绘图。

  3. 绘制电影出品数量排名前 10 位的柱形图的国家及地区的条形图

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib
    matplotlib.rcParams['font.family']='SimHei'
    
    plt.ylabel('电影数量')
    plt.title('电影出品数量排名前10位的国家及地区的条形图')
    group_head_10.plot(kind = 'bar')
    

1.2 绘制票房前十的电影中喜爱男1号,男2号,男3号的人数的分组条形图。

  1. 将电影按票房数降序排序,切取前10的电影信息

    movies_max=movies.sort_values(['gross'],ascending=False).head(10)
    movies_max1=movies_max[['actor_1_facebook_likes','actor_2_facebook_likes','actor_3_facebook_likes']]
    movies_max1
    

  2. 创建 DataFrame,作为分组条形图的数据集

    df = pd.DataFrame({'喜爱男1号':movies_max1['actor_1_facebook_likes'].values,'喜爱男2号':movies_max1['actor_2_facebook_likes'].values,'喜爱男3号':movies_max1['actor_3_facebook_likes'].values},index=movies_max['movie_title'].str.strip())
    df
    

    这里我们对电影标题做了一个字符串去空格操作,是因为我们发现在创建分组条形图时横坐标总有异常方块,最后发现是因为 csv 中的原始数据电影标题前面有空格导致的。

  3. 绘制分组条形图

    plt.figure()
    df.plot.bar()
    plt.title("票房前十电影喜爱男1号,男2号,男3号的人数的分组条形图")
    plt.legend(ncol=3,loc=(0,1.1))
    plt.xlabel('电影标题')
    plt.ylabel('喜欢人数')
    plt.show()
    

2. 电影数量的分析:

  1. 按年份统计每年电影总数量、彩色影片数量和黑白影片数量并绘制折线图(在同一个坐标系中绘制)。

    # 每年电影总数量折线图
    movies['title_year'].value_counts().sort_index().plot(kind='line',label='total number')# 彩色影片数量折线图
    movies[movies['color']=='Color']['title_year'].value_counts().sort_index().plot(kind='line',c='red',label='color number')# 黑白影片数量折线图
    movies[movies['color']!='Color']['title_year'].value_counts().sort_index().plot(kind='line',c='black',label='Black White number')plt.legend(loc='upper left')
    plt.xlabel('电影色彩')
    plt.ylabel('电影数量')
    plt.title('不同色彩电影数量折线图')
    plt.legend(loc='upper left')
    

3. 电影类型的分析:

绘制不同类型的电影数量条形图和饼图。

  1. 提取 genres 列所有的电影类型,放入一个数组中;

    # 创建字典用于存储电影类型
    types = []
    for tp in movies['genres']:sp = tp.split('|')for x in sp:types.append(x)# 格式化
    types_df = pd.DataFrame({'genres':types})
    

    可以看到,字典中共有14504个电影类型(包含重复值)。

  2. 统计字典中各种类型的数量

    types_df_counts = types_df['genres'].value_counts()
    types_df_counts
    

  3. 绘制不同类型的电影数量条形图

    types_df_counts.plot(kind='bar')
    plt.xlabel('电影类型')
    plt.ylabel('电影数量')
    plt.title('不同类型的电影数量条形图')
    

  4. 绘制不同类型的电影数量饼图

    b1 = types_df_counts/types_df_counts.sum()
    explode = (b1>=0.06)/20+0.02
    types_df_counts.plot.pie(autopct='%1.1f%%',figsize=(8,8),\label='',explode=explode)
    plt.title('不同类型的电影数量饼图')
    

4. 电影评分统计及电影评分相关因素分析:

4.1 找出评分排名前20位电影的片名和评分;

movie_score_20 = movies.sort_values(['imdb_score'],ascending=False).head(20)
movie_score_20[['movie_title','imdb_score']]

4.2 绘制所有影片评分与受欢迎程度的关系散点图。

plt.scatter(x= movies.imdb_score,y=movies.movie_facebook_likes)
plt.xlabel('电影评分')
plt.ylabel('脸书喜欢人数')
plt.title('影片评分与受欢迎程度的关系散点图')


Over


IMDB电影数据分析实践相关推荐

  1. 豆瓣已玩烂,来爬点有逼格的——IMDB电影提升你的品位

    作者 | 翻滚吧羊宝宝 来源 | 数据森麟(ID:shujusenlin) 前沿 转战Python半年,接触爬虫2个月,期间读了10本相关书籍,完成此作,算是对过去学习.实践的一次回顾.也希望与更多的 ...

  2. Python来爬点有逼格的 ——IMDB 电影提升你的品位

    前言 转战Python半年,接触爬虫2个月,期间读了10本相关书籍,完成此作,算是对过去学习.实践的一次回顾.也希望与更多的python,爬虫爱好者小伙伴们一起交流.成长. 选此题目,一来豆瓣作为爬虫 ...

  3. python电影数据分析的代码_python-small-examples

    Kaggle电影数据分析实战 本项目基于Kaggle电影影评数据集,通过这个系列,你将学到如何进行数据探索性分析(EDA),学会使用数据分析利器pandas,会用绘图包pyecharts,以及EDA时 ...

  4. 七牛大数据平台的演进与大数据分析实践--转

    原文地址:http://www.infoq.com/cn/articles/qiniu-big-data-platform-evolution-and-analysis?utm_source=info ...

  5. base环境卸载python_20小时快速学习python数据分析实践1——相关软件一系列安装和基本操作熟悉(第0-1h)...

    TED演讲"First 20 Hours-How to Learn Anything"中演讲者将快速学习一项新技能分成四个步骤--解析技能.掌握足够多的知识并且自我矫正.清楚学习中 ...

  6. 大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...

    壹 猫眼Top100电影数据分析概述 从这一节开始,我们就综合利用已学到的一些分析技术来尝试做一些比较复杂的实际数据分析项目.在这些实际的项目案例中,我们将会看到一个完整的数据分析流程:数据清理--数 ...

  7. NGS数据分析实践:06. 数据预处理 - 序列比对+PCR重复标记+Indel区域重比对+碱基质量重校正

    NGS数据分析实践:06. 数据预处理 - 序列比对+PCR重复标记+Indel区域重比对+碱基质量重校正 1. 序列比对 1.1 参考基因组建索引 1.2 序列比对 2. 排序 3. PCR重复标记 ...

  8. 自然语言处理--Keras 实现LSTM循环神经网络分类 IMDB 电影评论数据集

    LSTM 对于循环网络的每一层都引入了状态(state)的概念,状态作为网络的记忆(memory).但什么是记忆呢?记忆将由一个向量来表示,这个向量与元胞中神经元的元素数量相同.记忆单元将是一个由 n ...

  9. NGS数据分析实践:03. 涉及的常用数据格式[4] - bed和Wiggle/Bigwig/bedgraph格式

    NGS数据分析实践:03. 涉及的常用数据格式[4] - bed和Wiggle/Bigwig/bedgraph格式 4. bed格式 5. Wiggle/Bigwig/bedgraph格式 5.1 W ...

  10. Rotten Tomatoes 电影数据分析

    "烂番茄"电影数据分析 "烂番茄"电影数据分析 背景 数据采集及处理 数据可视化 得出结论 背景 一千个读者眼中有一千个哈姆雷特, 看电影也是一种艺术鉴赏活动, ...

最新文章

  1. 通过COS上传文件至腾讯云
  2. 作用域链(scope chain)和原型链(prototype chain)
  3. idea测试连接mysql报错08001_IDEA连接MySQL错误
  4. [react] react中什么是受控组件?
  5. VSCode如何关闭右侧预览功能 - 截图示下
  6. 非空验证方法(多值)和BindingResult提示验证信息
  7. 芯片AD库导入(贸泽)
  8. 解决MyEclipse中导入项目的javascript文件中文乱码
  9. 最简单的方法来压缩图片,改变图片大小
  10. android studio 制作.9 图片
  11. windows10 20H2版本微软账户登录不上解决方法
  12. android view.isshown,android View.isShown() 和 getVisibility() 的区别
  13. CrystalDiskInfo硬盘检测工具 标准版及萌妹版
  14. 【安全攻防系列 Windows实战】教你如何 FTP暴力破解、四大病毒勒索病毒、蠕虫病毒、ARP病毒、挖矿病毒,怎么处理应急场景
  15. @Value读取配置文件报Could not resolve placeholder 'rabbitmq.host' in value'${rabbitmq.host}'或null的问题
  16. Alexa网站排名爬取
  17. Ouster激光雷达获取点云线数ring(通道)信息
  18. 【标准全文】GB 38031-2020 电动汽车用动力蓄电池安全要求
  19. mysql 数据库分表三种方法
  20. 秒懂频分多址FDMA、时分多址TDMA、码分多址CDMA、空分多址SDMA

热门文章

  1. 手把手教你使用Python写贪吃蛇游戏(pygame)
  2. 简单工具类HttpUtils
  3. python把多个人声分离_python音轨分离神器
  4. 免费漫画系统,漫城cms内容管理系统,免费原生app
  5. 【线性模型引论】王松桂 课后习题2.1参考答案
  6. 网络爬虫学习(十二)
  7. 信息论与编码曹雪虹第三版学习第二章总结
  8. python正交表运用
  9. 单片机原理及应用C语言实验,《单片机原理及应用》实验指导书.doc
  10. 信息安全密码学期末复习重点总结