加载TMDB数据集,进行数据预处理

TMDb电影数据库,数据集中包含来自1960-2016年上映的近11000部电影的基本信息,主要包括了电影类型、预算、票房、演职人员、时长、评分等信息。用于练习数据分析。

参考文章https://blog.csdn.net/moyue1002/article/details/80332186
python 3.7
pandas 0.23
numpy 1.18
metplotlib 2.2

import pandas as pdcredits = pd.read_csv('./tmdb_5000_credits.csv')
movies = pd.read_csv('./tmdb_5000_movies.csv')

查看各个dataframe的一般信息

# 这是movies表的信息
movies.head(1)Out[3]: budget                                             genres                     homepage     id    ...                          tagline   title vote_average vote_count
0  237000000  [{"id": 28, "name": "Action"}, {"id": 12, "nam...  http://www.avatarmovie.com/  19995    ...      Enter the World of Pandora.  Avatar          7.2      11800

这是credits表的信息

print(credits.info())
credits.head(1)Out[4]: <class 'pandas.core.frame.DataFrame'>RangeIndex: 4803 entries, 0 to 4802Data columns (total 4 columns):movie_id    4803 non-null int64title       4803 non-null objectcast        4803 non-null objectcrew        4803 non-null objectdtypes: int64(1), object(3)memory usage: 150.2+ KBNonemovie_id                        ...                                                                       crew
0     19995                        ...                          [{"credit_id": "52fe48009251416c750aca23", "de...

credits表的cast列很奇怪,数据很多
进行具体查看

# 查看credists表的cast列索引0的值,发现是一长串东西
print('cast格式:', type(credits['cast'][0])) # 查看其类型,为`str`类型,无法处理
Out[5]:cast格式: <class 'str'>

json格式化数据处理 从表中看出,cast列其实是json格式化数据,应该用json包进行处理
json格式是[{},{}]
将json格式的字符串转换成Python对象用json.loads()
json.load()针对的是文件,从文件中读取json

import json
type(json.loads(credits['cast'][0]))
Out[6]:list

从上面可以看出json.loads()将json字符串转成了list,可以知道list里面又包裹多个dict
接下来批量处理

import json
json_col = ['cast','crew']
for i in json_col:credits[i] = credits[i].apply(json.loads)>> credits['cast'][0][:3]Out[7]:[{'cast_id': 242,'character': 'Jake Sully','credit_id': '5602a8a7c3a3685532001c9a','gender': 2,'id': 65731,'name': 'Sam Worthington','order': 0},{'cast_id': 3,'character': 'Neytiri','credit_id': '52fe48009251416c750ac9cb','gender': 1,'id': 8691,'name': 'Zoe Saldana','order': 1},{'cast_id': 25,'character': 'Dr. Grace Augustine','credit_id': '52fe48009251416c750aca39','gender': 1,'id': 10205,'name': 'Sigourney Weaver','order': 2}]
print('再次查看cast类型是:',type(credits['cast'][0]))
# 数据类型变成了list,可以用于循环处理Out[8]:再次查看cast类型是: <class 'list'>

提取其中的名字

credits['cast'][0][:3]
# credits第一行的cast,是个列表Out[9]:[{'cast_id': 242,'character': 'Jake Sully','credit_id': '5602a8a7c3a3685532001c9a','gender': 2,'id': 65731,'name': 'Sam Worthington','order': 0},{'cast_id': 3,'character': 'Neytiri','credit_id': '52fe48009251416c750ac9cb','gender': 1,'id': 8691,'name': 'Zoe Saldana','order': 1},{'cast_id': 25,'character': 'Dr. Grace Augustine','credit_id': '52fe48009251416c750aca39','gender': 1,'id': 10205,'name': 'Sigourney Weaver','order': 2}]
credits['cast'][0][0]['name'] # 获取第一行第一个字典的人名Out[10]:'Sam Worthington'

dict字典常用的函数 dict.get() 返回指定键的值,如果值不在字典中返回default值
dict.items() 以列表返回可遍历的(键, 值) 元组数组

# 代码测试如下:
i = credits['cast'][0][0]
for x in i.items():print(x)Out[11]:('cast_id', 242)('character', 'Jake Sully')('credit_id', '5602a8a7c3a3685532001c9a')('gender', 2)('id', 65731)('name', 'Sam Worthington')('order', 0)

创建get_names()函数,进一步分割cast

def get_names(x):return ','.join(i['name'] for i in x)
credits['cast'] = credits['cast'].apply(get_names)
credits['cast'][:3]Out[12]:0    Sam Worthington,Zoe Saldana,Sigourney Weaver,S...1    Johnny Depp,Orlando Bloom,Keira Knightley,Stel...2    Daniel Craig,Christoph Waltz,Léa Seydoux,Ralph...Name: cast, dtype: object

crew提取导演

credits['crew'][0][0]
Out[13]:{'credit_id': '52fe48009251416c750aca23','department': 'Editing','gender': 0,'id': 1721,'job': 'Editor','name': 'Stephen E. Rivkin'}
# 需要创建循环,找到job是director的,然后读取名字并返回
def director(x):for i in x:if i['job'] == 'Director':return i['name']credits['crew'] = credits['crew'].apply(director)
print(credits[['crew']][:3])
credits.rename(columns = {'crew':'director'},inplace=True) #修改列名
credits[['director']][:3]Out[[14]:crew0   James Cameron1  Gore Verbinski2      Sam Mendes

movies表进行json解析

>>> movies.head(1)
Out[15]:budget                                             genres                     homepage     id    ...                          tagline   title vote_average vote_count
0  237000000  [{"id": 28, "name": "Action"}, {"id": 12, "nam...  http://www.avatarmovie.com/  19995    ...      Enter the World of Pandora.  Avatar          7.2      11800

可以看出genres, keywords, spoken_languages, production_countries, producion_companies需要json解析的

# 方法同crew表
json_col = ['genres','keywords','spoken_languages','production_countries','production_companies']
for i in json_col:movies[i] = movies[i].apply(json.loads)movies[i] = movies[i].apply(get_names)
>>> movies.head(1)
Out[16]:budget                                    genres                     homepage     id    ...                          tagline   title vote_average vote_count
0  237000000  Action,Adventure,Fantasy,Science Fiction  http://www.avatarmovie.com/  19995    ...      Enter the World of Pandora.  Avatar          7.2      11800

这样,就把数据预处理做完了。

Python小练习——电影数据集TMDB预处理相关推荐

  1. 如何查看python代码中的数据集 按住data鼠标右键_Python小练习——电影数据集TMDB预处理...

    加载TMDB数据集,进行数据预处理 TMDb电影数据库,数据集中包含来自1960-2016年上映的近11000部电影的基本信息,主要包括了电影类型.预算.票房.演职人员.时长.评分等信息.用于练习数据 ...

  2. python数据获取及预处理_Python小练习——电影数据集TMDB预处理

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: IvanFX 复兴计算机社团 转载地址 https://blog. ...

  3. Python小工具-电影天堂爬取电影下载链接

    import requests import bs4# 获取单独的url def movie_info(url):'''内容标签:<div id="Zoom">下载链接 ...

  4. python数据集的预处理_关于Pytorch的MNIST数据集的预处理详解

    关于Pytorch的MNIST数据集的预处理详解 MNIST的准确率达到99.7% 用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,伪随机化等. 操作系统:ubuntu ...

  5. Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

    Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...

  6. 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集

    各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...

  7. 开课吧python小课值得么-好消息!今天,审计、会计、税务、财务主管彻底沸腾了……...

    原标题:好消息!今天,审计.会计.税务.财务主管彻底沸腾了-- "我们预计到2025年,基础财务都会被机器人替代."有意识地关注行业趋势的财会人应该多多少少听过这句话. 这是「德勤 ...

  8. 开课吧python小课学了有用吗-好消息!今天,审计、会计、税务、财务主管彻底沸腾了……...

    原标题:好消息!今天,审计.会计.税务.财务主管彻底沸腾了-- "我们预计到2025年,基础财务都会被机器人替代."有意识地关注行业趋势的财会人应该多多少少听过这句话. 这是「德勤 ...

  9. Python数据分析入门笔记5——数据预处理之异常值

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  10. python pandas 豆瓣电影 top250 数据分析

    python pandas 豆瓣电影 top250 数据分析 豆瓣电影top250数据分析 数据来源(豆瓣电影top250) 爬虫代码比较简单 数据较为真实,可以进行初步的数据分析 可以将前面的几篇文 ...

最新文章

  1. UI设计不够高端?这5个小技巧可以试试
  2. torch.full()简介
  3. android intent 源码,Android 基础之 IntentService 源码
  4. The substring() Method in JDK 6 and JDK 7 (jdk6中的substring()会造成内存泄漏)
  5. es java_JAVA API操作ES详解
  6. Haar Adaboost 视频车辆检测代码和样本
  7. 2018年10月17日普级B组【模拟赛】
  8. ArcGIS的BLOB字段与Access数据库BLOB字段的交换
  9. html 关于一行两列 高度不定的实现(不用table)
  10. 漫画:为什么计算机起始时间是 1970 年 1 月 1 日?
  11. 变量类型C#面试题详解
  12. 关于图灵机的三个问题
  13. WIN7 vc2008【fatal error C1083: 无法打开文件:“Windows.h”: No such file or directory】【cl.exe link.exe手动调用编译】
  14. iOS 获取汉字【简体中文】笔画数
  15. 原来CSS可以添加多个阴影
  16. 我们接了条预算100000000的广告!!!
  17. OCCT示例学习笔记3--Modeling项目
  18. ElasticSearch 技术分析与实战 读后感
  19. 【Data truncation: Data too long for column ‘XXX at row 1 报错】
  20. 歌尔首次闪耀CES Asia,展示全面创新力量

热门文章

  1. 3.Python 进阶知识
  2. linux快捷键列表,全面总结Linux快捷键的使用
  3. java 中文转首字母_java 中文转成拼音及首字母
  4. pwnable.tw dubblesort
  5. grubbs准则 matlab_MATLAB-格拉布斯准则(MATLAB-Grubbs criterion)_0
  6. 网页视频无法快进播放时(刷网课)
  7. 基于模糊集的图像增强
  8. python下载模块的两种方式(模块环境不一致问题解决)
  9. java junit测试类怎么写_15.junit测试类使用及注解
  10. 实践教程 | 万字长文,值得收藏/参考的OpenCV C++基础代码