python推荐系统实战_Python项目实战!分析9000部电影,打造一个简单的电影推荐系统...

不知道大家平时喜不喜欢看电影来消遣时光,我是比较喜欢看电影的。对我而言,当我看完一部电影,觉得很好看的时候,我就会寻找类似这部电影的其他电影。刚好有这么一个数据集,包含了很多部的电影,于是打算对其进行一波简单的分析并尝试建一个简单的“推荐系统”,一起来看一下吧~~

库:

Pandas,Numpy,Re

工具:

Ipython Notebook

这边插一句,小密圈曾经有一篇文章大家一起讨论了常用的5种Python开发工具,Notebook做数据分析并且记录笔记非常不错!

1.数据集

本文使用的数据集来自于https://grouplens.org/datasets/movielens/,上面有多种版本,主要区别在于数据集的大小(即收录的电影和用户信息的多少),这里使用的是最小的一个数据集:

image

2.数据初探

数据集里包含了4个文件,本文只用到了其中的两个:电影信息movies.csv,用户对电影的评分ratings.csv,先来看看这两个文件长什么样:

import pandas as pd

movies_data=pd.read_csv('movies.csv')

ratings_data=pd.read_csv('ratings.csv')

print (movies_data)

1).看一下movies_data里的数据

image

2).看一下用户评分的数据:

image

显然,如果单纯从单个文件里来分析的话似乎得不到什么有用或者是直观的信息,但是我们可以把这两个数据帧(DataFrame)结合起来,合成新的,把用户评分和电影信息结合起来,方便我们后续的分析处理

3).合并两个数据集

"#合并

data=pd.merge(movies_data,ratings_data)

"#删除列,可写可不写,不会产生影响

data.drop('times

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# -*- coding: utf-8 -*- import pandas as pd import numpy as np from math import sqrt critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0}, 'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5}, 'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 4.0}, 'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 2.5}, 'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0}, 'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5}, 'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}} df_critics=pd.DataFrame(critics) ##欧氏距离 def sim_distance(prefs,person1,person2): si={} for item in prefs[person1]: if item in prefs[person2]: si[item]=1 if len(si)==0: return 0 sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2) for item in prefs[person1] if item in prefs[person2]]) return 1/(1+sqrt(sum_of_squares)) ##numpy pandas 方法 def sim_distance2(prefs,person1,person2): return 1/(1+np.linalg.norm(prefs[person1]-prefs[person2])) ##皮尔逊相关系数 def sim_pearson(prefs,p1,p2): si={} for item in prefs[p1]: if item in prefs[p2]: si[item]=1 n=len(si) if n==0: return 1 ##对所有偏好求和 sum1=sum([prefs[p1][it] for it in si]) sum2=sum([prefs[p2][it] for it in si]) ##求平方和 sum1Sq=sum([pow(prefs[p1][it]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值