image.png

一.数据集简介

tmdb_5000_movies和tmdb_5000_credits这两个数据集所包含的特征

tmdb_5000_movies:

homepage,id,original_title,overview,popularity,production_companies,production_countries,release_date,spoken_languages,status,tagline,vote_average

tmdb_5000_credits:

movie_id,title,cast,crew

二.对原始数据集进行预处理

import json

import pandas as pd

#load_tmdb_movies用于载入movie数据集

def load_tmdb_movies(path):

df = pd.read_csv(path)

df['release_date'] = pd.to_datetime(df['release_date']).apply(lambda x: x.date())

json_columns = ['genres', 'keywords', 'production_countries',

'production_companies', 'spoken_languages']

for column in json_columns:

df[column] = df[column].apply(json.loads)

return df

#load_tmdb_credits用于载入credits数据集

def load_tmdb_credits(path):

df = pd.read_csv(path)

json_columns = ['cast', 'crew']

for column in json_columns:

df[column] = df[column].apply(json.loads)

return df

#用于更改原始数据中的列名

TMDB_TO_IMDB_SIMPLE_EQUIVALENCIES = {

'budget': 'budget',

'genres': 'genres',

'revenue': 'gross',

'title': 'movie_title',

'runtime': 'duration',

'original_language': 'language',

'keywords': 'plot_keywords',

'vote_count': 'num_voted_users'}

#检索函数

def safe_access(container, index_values):

result = container

try:

for idx in index_values:

result = result[idx]

return result

except IndexError or KeyError:

return pd.np.nan

#关键字处理函数,可以将关键字用"|"隔开

def pipe_flatten_names(keywords):

return '|'.join([x['name'] for x in keywords])

#对原始数据

def convert_to_original_format(movies, credits):

tmdb_movies = movies.copy()

tmdb_movies.rename(columns=TMDB_TO_IMDB_SIMPLE_EQUIVALENCIES, inplace=True)

tmdb_movies['title_year'] = pd.to_datetime(tmdb_movies['release_date']).apply(lambda x: x.year)

tmdb_movies['country'] = tmdb_movies['production_countries'].apply(lambda x: safe_access(x, [0, 'name']))

tmdb_movies['language'] = tmdb_movies['spoken_languages'].apply(lambda x: safe_access(x, [0, 'name']))

tmdb_movies['director_name'] = credits['crew'].apply(get_director)

tmdb_movies['actor_1_name'] = credits['cast'].apply(lambda x: safe_access(x, [1, 'name']))

tmdb_movies['actor_2_name'] = credits['cast'].apply(lambda x: safe_access(x, [2, 'name']))

tmdb_movies['actor_3_name'] = credits['cast'].apply(lambda x: safe_access(x, [3, 'name']))

tmdb_movies['genres'] = tmdb_movies['genres'].apply(pipe_flatten_names)

tmdb_movies['plot_keywords'] = tmdb_movies['plot_keywords'].apply(pipe_flatten_names)

return tmdb_movies

#导入必要的包

import numpy as np

import matplotlib as mpl

import matplotlib.pyplot as plt

import seaborn as sns

import math, nltk, warnings

from nltk.corpus import wordnet

from sklearn import linear_model

from sklearn.neighbors import NearestNeighbors

from fuzzywuzzy import fuzz

from wordcloud import WordCloud, STOPWORDS

plt.rcParams["patch.force_edgecolor"] = True

plt.style.use('fivethirtyeight')

mpl.rc('patch', edgecolor = 'dimgray', linewidth=1)

from IPython.core.interactiveshell import InteractiveShell

InteractiveShell.ast_node_interactivity = "last_expr"

pd.options.display.max_columns = 50

%matplotlib inline

warnings.filterwarnings('ignore')

PS = nltk.stem.PorterStemmer()

#载入原始数据并进行预处理

credits = load_tmdb_credits("tmdb_5000_credits.csv")

movies = load_tmdb_movies("tmdb_5000_movies.csv")

df_initial = convert_to_original_format(movies, credits)

print('Shape:',df_initial.shape)

tab_info = pd.DataFrame(df_initial.dtypes).T.rename(index={0: 'column type'})

tab_info = tab_info.append(pd.DataFrame(df_initial.isnull().sum()).T.rename(index={0:'null values'}))

tab_info=tab_info.append(pd.DataFrame(df_initial.isnull().sum()/df_initial.shape[0]*100).T. rename(index={0:'null values (%)'}))

从输出结果中可以看出df_initial的shape为(4803, 26)。另外,tab_info表示为(因为是截图所以还有好几列被省略了):

image.png

下一篇将会进入正式的推荐系统设计环节~

电影推荐系统 python简书_电影推荐系统:TMDB 5000 Movie Dataset(一)相关推荐

  1. 电影推荐系统 python简书_分析9000部电影|一个简单的电影推荐系统

    不知道大家平时喜不喜欢看电影来消遣时光,我是比较喜欢看电影的.对我而言,当我看完一部电影,觉得很好看的时候,我就会寻找类似这部电影的其他电影.刚好有这么一个数据集,包含了很多部的电影,于是打算对其进行 ...

  2. 电影推荐系统 python简书_【记录|Spark】简单的电影推荐系统

    为了学习spark,在实验楼上找到的一个spark入门课程,在此记录一下学习过程. 我使用的Spark版本为Spark 2.2.0, 实验楼教程使用的是Spark 1.6.1 流程和算法介绍 这个简单 ...

  3. 电影推荐系统 python简书_基于Spark的电影推荐系统(实战简介)

    ## 写在前面 一直不知道这个专栏该如何开始写,思来想去,还是暂时把自己对这个项目的一些想法 和大家分享 的形式来展现.有什么问题,欢迎大家一起留言讨论. 这个项目的源代码是在https://gith ...

  4. 电影推荐系统 python简书_基于django和协同过滤/cnn的电影推荐系统

    技术前端: bootstrap3 + vue + jquery 后端: django 2.2.1 +djangorestframework (MVC框架) 数据库: mysql 数据集: 1. 豆瓣数 ...

  5. 希尔排序python 简书_数据结构_排序_直接插入+希尔排序

    数据结构_排序_直接插入排序+希尔排序 其实主要是为了讲述希尔排序,不过插入排序是希尔排序的基础,因此先来讲直接插入排序. 一.直接插入排序 1.原理 下标 0 1 2 3 4 5 6 7 8 -- ...

  6. 遗传算法 python 简书_遗传算法入门

    遗传算法简介: 遗传算法(Genetic algorithm)属于演化计算( evolutionary computing),是随着人工智能领域发展而来的一种智能算法.正如它的名字所示,遗传算法是受达 ...

  7. 文科生学python简书_文科生Python教程(一)

    往期传送门:文均:文科生Python教程(零)​zhuanlan.zhihu.com (一)变量是什么?变量是个礼物盒! 在讲礼物盒之前,先帮张三解决他的问题. 在教程(零)中,张三想要统计<兰 ...

  8. 遗传算法 python 简书_基于DEAP库的Python进化算法从入门到入土—(二)简单遗传算法实现...

    前言 在上一篇中,我们已经介绍了如何在DEAP中实现进化算法的基本操作,在这一篇中我们试图将各个操作组装起来,用进化算法解决一个简单的一元函数寻优问题. 进化算法实例 - 一元函数寻优 问题描述与分析 ...

  9. selenium python 简书_通过python+selenium3实现浏览器刷简书文章阅读量

    准备工作 下载python,本文以python3.6为例.python3.6下载地址:python3下载地址,选择合适的版本安装.安装成功后,打开命令提示符,在其中输入python,显示如下信息,则说 ...

  10. 遗传算法 python 简书_遗传算法(Genetic Algorithm ,GA)学习笔记

    1 遗传算法的概念 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA) 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程 ...

最新文章

  1. 条件随机场(CRF) - 1 - 简介
  2. 8 基于管道的持久化存储 scrapy
  3. JavaScript常用技巧之数组操作
  4. cocos2dx-CCScrollView的制作
  5. python基础教程:名称空间与作用域
  6. JavaScript基础11-day13【正则表达式(量词、语法、转义字符、元字符)、DOM(节点、事件)、图片切换】
  7. fastdfs 吗 支持windows_从零搭建分布式文件系统MinIO比FastDFS要更合适
  8. 校验用户画像的准确性
  9. 神奇的[Caller*]属性
  10. 学习笔记 | 传统企业互联网改革之道
  11. mysql主从同步表结构_mysql主从同步的结构模式
  12. 公安计算机技能测试题库,2018公安文职考试题库:行政职业能力测验
  13. vue+iview后台管理模板
  14. 搜狗输入法电脑版_年终福利 | 安卓可用的输入法皮肤 搜狗篇 / 近期日程 | iOS智能深色版。...
  15. 身份管理提供商:Gigya和PingIdentity
  16. 自动驾驶中的三维目标检测综述
  17. Android Modem修改点以及修改方法
  18. xxl-job集成钉钉群告警
  19. 简历准备(一)—— TPLink
  20. python16——时间记录器

热门文章

  1. MySQL所有常用语法大全
  2. “kuangbin带你飞”专题计划——专题十五 数位DP
  3. Unity内置管线Projector原理分析
  4. c#如何实现叫号操作_C#开发银行叫号系统方案
  5. windows环境搭建hadoop
  6. 使用TortoiseSVN将文件回退到某个版本
  7. 利用js实现文件上传
  8. Unity3D渲染系列之SkyBox天空盒
  9. win10系统怎么改奇摩输入法_windows10如何更改输入法
  10. AfterEffect滤镜插件总目录