数据挖掘入门与实战 公众号: datadw
目录
过程
电影评价多重分类
用户信息录入
计算皮尔逊相关系数找出兴趣相投的用户插入自己的数据
向某用户推荐电影加权平均所有人的评价
结果与分析
过程:
用爬虫抓取豆瓣电影用户信息
用多重分类法,定义电影评价等级
计算自己与用户的皮尔逊相关度
以人为主体分析相似度:找出志同道合的人,可以发现潜在喜欢的商品
以商品为主体分析相似度:找出相似的商品,可以发现潜在的客户(如亚马逊的‘买了商品A的用户还买了商品B’)
电影评价多重分类:
很差
较差
还行
推荐
力荐
import json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
user_info = {}
user_dict = {
'ns2250225':[4,3,4,5,4],
'justin':[3,4,3,4,2],
'totox':[2,3,5,1,4],
'fabrice':[4,1,3,4,5],
'doreen':[3,4,2,5,3]
}
def user_data(user_dict):
for name in user_dict:
user_info[name] = {u'消失的爱人' : user_dict[name][0]}
user_info[name][u'霍比特人3'] = user_dict[name][1]
user_info[name][u'神去村'] = user_dict[name][2]
user_info[name][u'泰坦尼克号'] = user_dict[name][3]
user_info[name][u'这个杀手不太冷'] = user_dict[name][4]
user_data(user_dict)
try:
with open('user_data.txt', 'w') as data:
for key in user_info:
data.write(key)
for key2 in user_info[key]:
data.write('\t')
data.write(key2)
data.write('\t')
data.write('\t')
data.write(str(user_info[key][key2]))
data.write('\n')
data.write('\n')
except IOError as err:
print('File error: ' + str(err))
计算皮尔逊相关系数,找出兴趣相投的用户:(插入自己的数据)
from math import sqrt
def sim_pearson(prefs, p1, p2):
si = {}
for item in prefs[p1]:
if item in prefs[p2]:
si[item] = 1
if len(si) == 0:
return 0
n = len(si)
sum1 = sum([prefs[p1][it] for it in si])
sum2 = sum([prefs[p2][it] for it in si])
sum1Sq = sum([pow(prefs[p1][it], 2) for it in si])
sum2Sq = sum([pow(prefs[p2][it], 2) for it in si])
pSum = sum([prefs[p1][it] * prefs[p2][it] for it in si])
num = pSum - (sum1 * sum2 / n)
den = sqrt((sum1Sq - pow(sum1, 2) / n) * (sum2Sq - pow(sum2, 2) / n))
if den == 0:
return 0
r = num / den
return r
user_info['me'] = {u'消失的爱人' : 5,
u'神去村' : 3,
u'炸裂鼓手' : 5}
for user in user_info:
res = sim_pearson(user_info, 'me', user)
if res > 0:
print('the user like %s is : %s' % ('me', user))
print('result :%f\n' % res)
向某用户推荐电影(加权平均所有人的评价)
def getRecommendations(prefs,person,similarity=sim_pearson):
totals={}
simSums={}
for other in prefs:
if other==person: continue
sim=similarity(prefs,person,other)
if sim<=0: continue
for item in prefs[other]:
if item not in prefs[person] or prefs[person][item]==0:
totals.setdefault(item,0)
totals[item]+=prefs[other][item]*sim
simSums.setdefault(item,0)
simSums[item]+=sim
rankings=[(total/simSums[item],item) for item,total in totals.items()]
rankings.sort()
rankings.reverse()
return rankings
res = getRecommendations(user_info, "me")
print('Recommand watching the movie:')
print json.dumps(res, encoding='UTF-8', ensure_ascii=False)
结果与分析:
与我电影口味相近的用户有:doreen, fabrice
推荐我看的电影有:泰坦尼克号,这个杀手不太冷
以人为主体分析, 找出有相似爱好的人, 并向这些人推荐商品,可以发现潜在喜欢的商品
而若以商品为主体分析, 找出相似的商品, 找出喜欢这个产品的人, 可以发现商品潜在的客户
数据挖掘入门与实战
搜索添加微信公众号:datadw
教你机器学习,教你数据挖掘
长按图片,识别二维码,点关注
公众号: weic2c
据分析入门与实战
长按图片,识别二维码,点关注