Python小练习——电影数据集TMDB预处理
加载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预处理相关推荐
- 如何查看python代码中的数据集 按住data鼠标右键_Python小练习——电影数据集TMDB预处理...
加载TMDB数据集,进行数据预处理 TMDb电影数据库,数据集中包含来自1960-2016年上映的近11000部电影的基本信息,主要包括了电影类型.预算.票房.演职人员.时长.评分等信息.用于练习数据 ...
- python数据获取及预处理_Python小练习——电影数据集TMDB预处理
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: IvanFX 复兴计算机社团 转载地址 https://blog. ...
- Python小工具-电影天堂爬取电影下载链接
import requests import bs4# 获取单独的url def movie_info(url):'''内容标签:<div id="Zoom">下载链接 ...
- python数据集的预处理_关于Pytorch的MNIST数据集的预处理详解
关于Pytorch的MNIST数据集的预处理详解 MNIST的准确率达到99.7% 用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,伪随机化等. 操作系统:ubuntu ...
- Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序
Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...
- 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集
各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...
- 开课吧python小课值得么-好消息!今天,审计、会计、税务、财务主管彻底沸腾了……...
原标题:好消息!今天,审计.会计.税务.财务主管彻底沸腾了-- "我们预计到2025年,基础财务都会被机器人替代."有意识地关注行业趋势的财会人应该多多少少听过这句话. 这是「德勤 ...
- 开课吧python小课学了有用吗-好消息!今天,审计、会计、税务、财务主管彻底沸腾了……...
原标题:好消息!今天,审计.会计.税务.财务主管彻底沸腾了-- "我们预计到2025年,基础财务都会被机器人替代."有意识地关注行业趋势的财会人应该多多少少听过这句话. 这是「德勤 ...
- Python数据分析入门笔记5——数据预处理之异常值
系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...
- python pandas 豆瓣电影 top250 数据分析
python pandas 豆瓣电影 top250 数据分析 豆瓣电影top250数据分析 数据来源(豆瓣电影top250) 爬虫代码比较简单 数据较为真实,可以进行初步的数据分析 可以将前面的几篇文 ...
最新文章
- UI设计不够高端?这5个小技巧可以试试
- torch.full()简介
- android intent 源码,Android 基础之 IntentService 源码
- The substring() Method in JDK 6 and JDK 7 (jdk6中的substring()会造成内存泄漏)
- es java_JAVA API操作ES详解
- Haar Adaboost 视频车辆检测代码和样本
- 2018年10月17日普级B组【模拟赛】
- ArcGIS的BLOB字段与Access数据库BLOB字段的交换
- html 关于一行两列 高度不定的实现(不用table)
- 漫画:为什么计算机起始时间是 1970 年 1 月 1 日?
- 变量类型C#面试题详解
- 关于图灵机的三个问题
- WIN7 vc2008【fatal error C1083: 无法打开文件:“Windows.h”: No such file or directory】【cl.exe link.exe手动调用编译】
- iOS 获取汉字【简体中文】笔画数
- 原来CSS可以添加多个阴影
- 我们接了条预算100000000的广告!!!
- OCCT示例学习笔记3--Modeling项目
- ElasticSearch 技术分析与实战 读后感
- 【Data truncation: Data too long for column ‘XXX at row 1 报错】
- 歌尔首次闪耀CES Asia,展示全面创新力量
热门文章
- 3.Python 进阶知识
- linux快捷键列表,全面总结Linux快捷键的使用
- java 中文转首字母_java 中文转成拼音及首字母
- pwnable.tw dubblesort
- grubbs准则 matlab_MATLAB-格拉布斯准则(MATLAB-Grubbs criterion)_0
- 网页视频无法快进播放时(刷网课)
- 基于模糊集的图像增强
- python下载模块的两种方式(模块环境不一致问题解决)
- java junit测试类怎么写_15.junit测试类使用及注解
- 实践教程 | 万字长文,值得收藏/参考的OpenCV C++基础代码