IMDB电影数据分析


#0 导入库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns#1数据导入
imdb = pd.read_csv('.\\tmdb_5000_movies.csv')
#大概看一下数据是什么样的
imdb.head(3)
#imdb.info()


在将数据导入以后,肯定要对数据进行理解,即知道各个数据所代表的含义。
数据字段含义如下:

  • imdb_id:IMDB 标识号
  • popularity:在 Movie Database 上的相对页面查看次数
  • budget:预算(美元)
  • revenue:收入(美元)
  • original_title:电影名称
  • cast:演员列表,按 | 分隔,最多 5 名演员
  • homepage:电影首页的 URL
  • director:导演列表,按 | 分隔,最多 5 名导演
  • tagline:电影的标语
  • keywords:与电影相关的关键字,按 | 分隔,最多 5 个关键字
  • overview:剧情摘要
  • runtime:电影时长
  • genres:风格列表,按 | 分隔,最多 5 种风格
  • production_companies:制作公司列表,按 | 分隔,最多 5 家公司
  • release_date:首次上映日期
  • vote_count:评分次数
  • vote_average:平均评分
  • release_year:发行年份
  • budget_adj:根据通货膨胀调整的预算(2010 年,美元)
  • revenue_adj:根据通货膨胀调整的收入(2010 年,美元)

当然,这些数据字段也不是每一个都是我们本次分析所需求的,我们只需要用到所分析的字段就好。在接下来的过程中,根据所要解决的问题,首先对这些数据进行一个清洗。

# 3 数据清洗

因为问题1实际上是在探讨电影的类型和时间的关系的,所以要对这两个字段进行分析。电影的类型并不是一个可以量化的标准,所以要对这些数据进行一些处理。而时间这个字段,即存在缺失值,又不是时间类型,所以要进行一些处理。

#0 导入库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns#1数据导入
imdb = pd.read_csv('.\\tmdb_5000_movies.csv')
#大概看一下数据是什么样的
imdb.head(3)
imdb.info()# 3 数据清洗
#首先我们查询缺失了【上映日期】的是哪一部电影
imdb[imdb.release_date.isnull().values == True]
#然后查询这个电影的上映日期
#填充缺失值
imdb.release_date = imdb.release_date.fillna('2014-06-01')
#把这一个字段的数据转化为时间格式
imdb.release_date = pd.to_datetime(imdb.release_date)
#把上映的年份提取出来,新建一个列
imdb.loc[:, 'year'] = [i.year for i in imdb.release_date]
imdb.head(2)#导入正则包
import re
#建立函数
def fenge(str):pattern = re.compile(r'\b[A-Z]\w+')   # 查找首字母大写strr = pattern.findall(str)return strr
#将函数应用到整列
#再将其添加到原来的数据中
imdb['generss'] = list(map(fenge, imdb.genres))
#由于目前解决的是问题1,所以先把这两列单独拿出来计算
q1 = pd.DataFrame({'generss': imdb.generss, 'year':imdb.year})
q1.info()
q1.head(5)#可以发现,电影类型的数据是以列表形式存储的,这不利于我们接下来的运算
#首先把电影类型和年份做成一个新的列表,再重新组合
lis1 = []
lis2 = []
for i in range(len(q1.year)):for j in q1.generss[i]:lis1.append(j)lis2.append(q1.year[i])
q11 = pd.DataFrame({'genress':lis1, 'years':lis2, 'counts':1})        #先简单的看一下数据情况
#可以发现我们成功的分离了电影类型
q11.head(8)#对数据进行处理,得出每年份电影总数
q12 = q11.groupby('years').agg(np.sum)
#把年份重新变成列
q12['years'] = q12.index.get_level_values('years')#绘图
plt.plot(q12.years, q12.counts,'c')
#设置坐标轴范围和标签
plt.axis([1916, 2016, 0, 700])
#坐标轴使用中文
plt.xlabel('时间', fontproperties = 'SimHei', fontsize = 15, color = 'black')
plt.ylabel('电影类型数', fontproperties = 'SimHei', fontsize = 15, color = 'black')
#设置图例和网格
plt.grid()
plt.legend()
plt.show()#在接下来绘图中,为了方便,先统一设置一下中文字体
import matplotlib
matplotlib.rcParams['font.family'] = 'STsong'
matplotlib.rcParams['font.size'] = 15
matplotlib.rcParams['font.style'] = 'normal'#将所要电影按类型统计
q13 = q11.groupby('genress').agg(np.sum)
#设置一下饼图的风格
plt.style.use('ggplot')
#绘图
plt.pie(q13.counts/q13.counts.sum(),#绘制的是百分比的图labels = q13.index,         #标签为电影类型autopct='%.1f%%',           #百分比的格式 radius = 3,                 #饼图的半径textprops = {'fontsize': 20, 'color' : 'black'}#标签字体的颜色和大小)
plt.title('总体IMDB电影类型分布') #标题
plt.show()#那么如何观察这么多年来电影类型的变化呢
#首先还是对数据进行一个透视
q14 = pd.pivot_table(q11, index = ['genress', 'years'], values = ['counts'], aggfunc = np.sum)
#把年份和类型重新变成列
q14['years'] = q14.index.get_level_values('years')
q14['genress'] = q14.index.get_level_values('genress')#把画布设置大一些
plt.figure(figsize = (20, 10))
#循环画出每一个电影类型随着时间变化的折线图
#list1是之前对电影类型的统计
for i in set(lis1):plt.plot(q14[q14.genress == i].years, q14[q14.genress == i].counts, label = i)#label用来设置图例plt.legend()
#设置标题和坐标轴的字体大小和颜色
plt.title('电影类型随时间的变化', fontsize = 20, color = 'blue')
plt.xlabel('时间', fontsize = 20, color = 'blue')
plt.ylabel('数量', fontsize = 20, color = 'blue')
plt.show()#但是这样因为种类太多,其实不方便观察的
#这里我们选取几个类型的片子作为代表去观察
a = ['Action','Drama','Thriller','Comedy','Romance']
plt.figure(figsize = (15, 8))
for i in set(a):plt.plot(q14[q14.genress == i].years, q14[q14.genress == i].counts, label = i)#label用来设置图例plt.legend()
#设置标题和坐标轴的字体大小和颜色
plt.title('电影类型随时间的变化', fontsize = 20, color = 'blue')
plt.xlabel('时间', fontsize = 20, color = 'blue')
plt.ylabel('数量', fontsize = 20, color = 'blue')
plt.show()


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. 大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...

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

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

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

  6. Rotten Tomatoes 电影数据分析

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

  7. Tableau制作全球电影数据分析/全球超市利润混合地图

    数据集,课程,作业文件打包放在github上 https://github.com/JCATHoney/tableau 作业5: 1.创建产地电影数量与评分(以此命名)的符号地图,处理未知位置信息,以 ...

  8. 豆瓣电影数据分析--Tableau

    数据说明:原始数据为1888年-2016年上映电影数据,由于年份跨度较大且部分年份数据缺失,故抽取1990年-2015年电影数据分析. 第一部分:整体上映电影数分析 仪表盘: 感觉这个排版有点挤,显示 ...

  9. python基于爬虫技术的海量电影数据分析源码,数据处理分析可视化,GUI界面展示

    基于爬虫技术的海量电影数据分析 介绍 一个基于爬虫技术的海量电影数据分析系统 系统架构 本系统主要分为四个部分,分别为后端爬虫抓取.数据处理分析可视化.GUI界面展示.启动运行,分别对应getData ...

  10. python猫眼电影分析_用Python 爬取猫眼电影数据分析《无名之辈》

    前言 作者: 罗昭成 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=3054cce4add8a909e7 ...

最新文章

  1. 《I'm a Mac:雄狮训练手册》——第1章 开机 1.1 “咚”声的作用
  2. nmap 添加自定义指纹
  3. nanodet onnx踩坑记录
  4. linux bash Shell脚本经典之Fork炸弹解析:() { :|: };:
  5. python中全局变量和局部变量详解_Python全局变量与局部变量详解
  6. 日志Loki基妹出,便胜却ELK无数
  7. 成交量与股价关系的深度剖析 (一)
  8. 多个模块使用python logging
  9. 如何从asio::udp::socket()中取出底层sockfd整数
  10. java 图形化编程_JavaSE——Java图形化编程
  11. sql注入检测工具之sqlmap
  12. 【离散数学】陪集精讲
  13. C#操作excel的打印分页符问题
  14. 图像的指纹——从自然图片到GAN
  15. 书单 | 做数字化转型,离不开这10本书!
  16. SQLite 对时间的支持
  17. keil写代码时遇到的问题——warning:implicit declaration of function XXXX is invalid in C99
  18. 北邮智能车仿真培训(五)—— 数据可视化工具的使用
  19. word文档画笔添加后灰色无法启用!
  20. 数据仓库:分层设计详解

热门文章

  1. com.jcraft.jsch.JSchException: Algorithm negotiation fail 异常解决
  2. WINDOW -- 重装系统报错“找不到适用的引导分区”
  3. 宝马推出电动自行车,最大续航300公里
  4. 数组按照字母顺序排序
  5. 评测|抢鲜体验飞凌Linux版LS1028A系列嵌入式开发板
  6. SQL 分组排序group by
  7. 泰晤士计算机专业排行,泰晤士2021世界大学学科排名:世界大学计算机学科排名...
  8. 国外著名英文搜索引擎大全及分类
  9. 惋惜!杭州互联网公司22岁女孩猝死!某大厂家属怒喷996的工作方式...
  10. 姑娘留步,容我劫个色