推荐算法实战-基于用户的推荐(use_base)

代码实现是基于:推荐系统实战-----项亮;

import pandas as pd
items_data = pd.read_csv("items_action_2.csv")
items_data.head()
Unnamed: 0attentions
00苹果发布会
11网红
22维生素
33人文
44保肝护肝的食物
user_items = pd.read_csv("user_items_action_type_2.csv")
user_items.head()
Unnamed: 0cuidsattentions
00899016{ipad, 旅行, 苹果发布会, 三亚, 林允, 奢侈品, 求婚钻戒, 丙火, 健康, i...
11995321{人工智能技术, 小米推送, 小米手机, 华为手机, 小米max, 数码, 华为mate10...
22879569{西兰花, 气血不足, 牛肉, 美容养颜, 菜谱, 青菜, 维生素, 养生, 虾仁, 痔疮的...
33818525{摩登兄弟, 网红, 内地综艺, 歌手}
441001481{网游, 芋头, 孙红雷, 植物油, 排骨, 卫视, 碱性食物, 菜谱, 收视率, 芋艿, ...
import codecs
items_data = codecs.open("items_action_2.csv",mode='r', encoding="utf-8")
attentions = []
for line in items_data.readlines():
    list_line= line.strip().split(',')
    print(list_line[-1])
    attentions.append(list_line[-1])
attentions
苹果发布会
网红
维生素
人文
保肝护肝的食物
旅行
三亚
鱼豆腐
林允
德罗赞
数码
iPhone
健康
焖排骨
创业时代
圣城
意大利面的做法
波波维奇
赵丽颖
新车
黑豆
马刺
网游
多瑙
排骨
碱性食物
人工智能技术
菜谱
发动机
詹姆斯
杨颖
歌手
张艺兴
洁齿
面条
奢侈品
小米手机
小米推送
影视
小米6
肛门
雅阁
西兰花
红米
气血不足
美容养颜
收视率
金庸作品
华为mate10
iphone
虾仁
湖人
帕萨特
碱性体质
卫视
香菇
摩登兄弟
NBA
痔疮便血
ipad
痔疮最佳治疗方法
丙火
柿子
襄阳城
苹果新品
粘米粉
金牌
山药
莲藕
麦基
孙红雷
植物油
求婚钻戒
蒲公英
小米max
芋艿
养生
本田
痔疮的症状
杨丞琳
华为手机
奥迪全新a4l
芋头
牛肉
料酒
青菜
泥胡菜
美食
荷兰豆
腊肠
内地综艺
def cut_wrong(token):
    token.replace("\"{","").replace("}\"", "")
user_items_data = codecs.open("user_items_action_type_2.csv", encoding="utf-8")
user_items_data.readline()
dict_user= {}
for line in user_items_data.readlines():
    list_line_ = line.strip().split(',')
    print(list_line_)
    dict_user[list_line_[1]]= set([i.strip().replace("\"{","").replace("}\"", "")  for i in list_line_[2:]])
['0', '899016', '"{ipad', ' 旅行', ' 苹果发布会', ' 三亚', ' 林允', ' 奢侈品', ' 求婚钻戒', ' 丙火', ' 健康', ' iPhone', ' 苹果新品', ' 肛门', ' 金牌', ' 多瑙}"']
['1', '995321', '"{人工智能技术', ' 小米推送', ' 小米手机', ' 华为手机', ' 小米max', ' 数码', ' 华为mate10', ' iphone', ' 红米', ' 小米6}"']
['2', '879569', '"{西兰花', ' 气血不足', ' 牛肉', ' 美容养颜', ' 菜谱', ' 青菜', ' 维生素', ' 养生', ' 虾仁', ' 痔疮的症状', ' 莲藕', ' 面条', ' 黑豆', ' 香菇', ' 健康', ' 料酒', ' 痔疮便血', ' 痔疮最佳治疗方法', ' 意大利面的做法', ' 柿子', ' 泥胡菜', ' 美食', ' 荷兰豆', ' 肛门', ' 山药}"']
['3', '818525', '"{摩登兄弟', ' 网红', ' 内地综艺', ' 歌手}"']
['4', '1001481', '"{网游', ' 芋头', ' 孙红雷', ' 植物油', ' 排骨', ' 卫视', ' 碱性食物', ' 菜谱', ' 收视率', ' 芋艿', ' 人文', ' 养生', ' 金庸作品', ' 保肝护肝的食物', ' 张艺兴', ' 蒲公英', ' 洁齿', ' 碱性体质', ' 杨丞琳', ' 鱼豆腐', ' 杨颖', ' 影视', ' 焖排骨', ' 创业时代', ' 襄阳城', ' 赵丽颖', ' 粘米粉', ' 腊肠}"']
['5', '783396', '"{詹姆斯', ' 圣城', ' 发动机', ' 麦基', ' 波波维奇', ' 雅阁', ' 奥迪全新a4l', ' 德罗赞', ' 新车', ' 本田', ' 湖人', ' 马刺', ' NBA', ' 帕萨特}"']
print(dict_user)
{'899016': {'健康', '林允', 'iPhone', '旅行', 'ipad', '金牌', '多瑙', '奢侈品', '求婚钻戒', '丙火', '苹果新品', '三亚', '肛门', '苹果发布会'}, '995321': {'数码', '华为手机', '小米推送', '红米', '华为mate10', '小米6', '小米max', 'iphone', '人工智能技术', '小米手机'}, '879569': {'牛肉', '黑豆', '肛门', '料酒', '痔疮最佳治疗方法', '痔疮的症状', '面条', '莲藕', '柿子', '美容养颜', '荷兰豆', '泥胡菜', '香菇', '养生', '健康', '虾仁', '菜谱', '青菜', '痔疮便血', '山药', '维生素', '美食', '西兰花', '意大利面的做法', '气血不足'}, '818525': {'摩登兄弟', '网红', '内地综艺', '歌手'}, '1001481': {'洁齿', '焖排骨', '腊肠', '张艺兴', '植物油', '碱性食物', '碱性体质', '人文', '鱼豆腐', '排骨', '襄阳城', '养生', '芋头', '杨颖', '蒲公英', '菜谱', '网游', '赵丽颖', '金庸作品', '收视率', '影视', '保肝护肝的食物', '杨丞琳', '卫视', '粘米粉', '创业时代', '芋艿', '孙红雷'}, '783396': {'圣城', '波波维奇', '奥迪全新a4l', 'NBA', '湖人', '德罗赞', '新车', '本田', '雅阁', '詹姆斯', '帕萨特', '麦基', '发动机', '马刺'}}
users_items_dict = {}
for u,v in dict_user.items():
    users_items_dict[u]={}
    for item in attentions[1:]:
        if item in v:
            users_items_dict[u][item] = 1
        else:
            users_items_dict[u][item] = 0
print(users_items_dict)
{'899016': {'苹果发布会': 1, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 1, '三亚': 1, '鱼豆腐': 0, '林允': 1, '德罗赞': 0, '数码': 0, 'iPhone': 1, '健康': 1, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 1, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 1, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 1, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 1, '痔疮最佳治疗方法': 0, '丙火': 1, '柿子': 0, '襄阳城': 0, '苹果新品': 1, '粘米粉': 0, '金牌': 1, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 1, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}, '995321': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 1, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 1, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 1, '小米推送': 1, '影视': 0, '小米6': 1, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 1, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 1, 'iphone': 1, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 1, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 1, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}, '879569': {'苹果发布会': 0, '网红': 0, '维生素': 1, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 1, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 1, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 1, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 1, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 1, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 1, '雅阁': 0, '西兰花': 1, '红米': 0, '气血不足': 1, '美容养颜': 1, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 1, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 1, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 1, 'ipad': 0, '痔疮最佳治疗方法': 1, '丙火': 0, '柿子': 1, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 1, '莲藕': 1, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 1, '本田': 0, '痔疮的症状': 1, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 1, '料酒': 1, '青菜': 1, '泥胡菜': 1, '美食': 1, '荷兰豆': 1, '腊肠': 0, '内地综艺': 0}, '818525': {'苹果发布会': 0, '网红': 1, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 1, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 1, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 1}, '1001481': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 1, '保肝护肝的食物': 1, '旅行': 0, '三亚': 0, '鱼豆腐': 1, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 1, '创业时代': 1, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 1, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 1, '多瑙': 0, '排骨': 1, '碱性食物': 1, '人工智能技术': 0, '菜谱': 1, '发动机': 0, '詹姆斯': 0, '杨颖': 1, '歌手': 0, '张艺兴': 1, '洁齿': 1, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 1, '小米6': 0, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 1, '金庸作品': 1, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 1, '卫视': 1, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 1, '苹果新品': 0, '粘米粉': 1, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 1, '植物油': 1, '求婚钻戒': 0, '蒲公英': 1, '小米max': 0, '芋艿': 1, '养生': 1, '本田': 0, '痔疮的症状': 0, '杨丞琳': 1, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 1, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 1, '内地综艺': 0}, '783396': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 1, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 1, '意大利面的做法': 0, '波波维奇': 1, '赵丽颖': 0, '新车': 1, '黑豆': 0, '马刺': 1, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 1, '詹姆斯': 1, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 0, '雅阁': 1, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 1, '帕萨特': 1, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 1, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 1, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 1, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 1, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}}
users_items_df = pd.DataFrame(users_items_dict)
print(users_items_dict)
{'899016': {'苹果发布会': 1, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 1, '三亚': 1, '鱼豆腐': 0, '林允': 1, '德罗赞': 0, '数码': 0, 'iPhone': 1, '健康': 1, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 1, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 1, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 1, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 1, '痔疮最佳治疗方法': 0, '丙火': 1, '柿子': 0, '襄阳城': 0, '苹果新品': 1, '粘米粉': 0, '金牌': 1, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 1, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}, '995321': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 1, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 1, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 1, '小米推送': 1, '影视': 0, '小米6': 1, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 1, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 1, 'iphone': 1, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 1, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 1, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}, '879569': {'苹果发布会': 0, '网红': 0, '维生素': 1, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 1, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 1, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 1, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 1, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 1, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 1, '雅阁': 0, '西兰花': 1, '红米': 0, '气血不足': 1, '美容养颜': 1, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 1, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 1, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 1, 'ipad': 0, '痔疮最佳治疗方法': 1, '丙火': 0, '柿子': 1, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 1, '莲藕': 1, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 1, '本田': 0, '痔疮的症状': 1, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 1, '料酒': 1, '青菜': 1, '泥胡菜': 1, '美食': 1, '荷兰豆': 1, '腊肠': 0, '内地综艺': 0}, '818525': {'苹果发布会': 0, '网红': 1, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 1, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 1, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 1}, '1001481': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 1, '保肝护肝的食物': 1, '旅行': 0, '三亚': 0, '鱼豆腐': 1, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 1, '创业时代': 1, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 1, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 1, '多瑙': 0, '排骨': 1, '碱性食物': 1, '人工智能技术': 0, '菜谱': 1, '发动机': 0, '詹姆斯': 0, '杨颖': 1, '歌手': 0, '张艺兴': 1, '洁齿': 1, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 1, '小米6': 0, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 1, '金庸作品': 1, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 1, '卫视': 1, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 1, '苹果新品': 0, '粘米粉': 1, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 1, '植物油': 1, '求婚钻戒': 0, '蒲公英': 1, '小米max': 0, '芋艿': 1, '养生': 1, '本田': 0, '痔疮的症状': 0, '杨丞琳': 1, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 1, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 1, '内地综艺': 0}, '783396': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 1, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 1, '意大利面的做法': 0, '波波维奇': 1, '赵丽颖': 0, '新车': 1, '黑豆': 0, '马刺': 1, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 1, '詹姆斯': 1, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 0, '雅阁': 1, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 1, '帕萨特': 1, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 1, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 1, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 1, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 1, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}}
import math
def user_similarity(train):
    W = {}
    for u in train.keys():
        W[u] = {}
        for v in train.keys():
            if u == v:
                continue
            W[u][v] = len(train[u]&train[v])
            W[u][v] = W[u][v] / math.sqrt(len(train[u]) * len(train[v]) * 1.0)
    return W
user_similarity = user_similarity(dict_user)
print(user_similarity)
{'899016': {'995321': 0.0, '879569': 0.10690449676496974, '818525': 0.0, '1001481': 0.0, '783396': 0.0}, '995321': {'899016': 0.0, '879569': 0.0, '818525': 0.0, '1001481': 0.0, '783396': 0.0}, '879569': {'899016': 0.10690449676496974, '995321': 0.0, '818525': 0.0, '1001481': 0.07559289460184544, '783396': 0.0}, '818525': {'899016': 0.0, '995321': 0.0, '879569': 0.0, '1001481': 0.0, '783396': 0.0}, '1001481': {'899016': 0.0, '995321': 0.0, '879569': 0.07559289460184544, '818525': 0.0, '783396': 0.0}, '783396': {'899016': 0.0, '995321': 0.0, '879569': 0.0, '818525': 0.0, '1001481': 0.0}}
user_similarity_df = pd.DataFrame(user_similarity)
user_similarity_df.fillna(0)
1001481783396818525879569899016995321
10014810.0000000.00.00.0755930.0000000.0
7833960.0000000.00.00.0000000.0000000.0
8185250.0000000.00.00.0000000.0000000.0
8795690.0755930.00.00.0000000.1069040.0
8990160.0000000.00.00.1069040.0000000.0
9953210.0000000.00.00.0000000.0000000.0
def user_similarity(train):
    item_users = {}
    for u, items in train.items():
        for i in items.keys():
            if i not in item_users:
                item_users[i] = set()
            item_users[i].add(u)

    # 找到有关联的用户
    C = {}
    N = {}
    for i, users in item_users.items():
        for u in users:
            C[u] ={}
            if u not in N.keys():
                N[u] = 0
            N[u] += 1
            for v in users:
                if u == v:
                    continue
                if v not in C[u].keys():
                    C[u][v] = 0
                C[u][v] += 1

    W = {}
    for u, related_users in C.items():
        W[u] = {}
        for v, cuv in related_users.items():
            W[u][v] = cuv / math.sqrt(N[u]*N[v])
    return W
print(user_similarity(users_items_dict))
{'879569': {'783396': 0.01098901098901099, '1001481': 0.01098901098901099, '818525': 0.01098901098901099, '899016': 0.01098901098901099, '995321': 0.01098901098901099}, '783396': {'879569': 0.01098901098901099, '1001481': 0.01098901098901099, '818525': 0.01098901098901099, '899016': 0.01098901098901099, '995321': 0.01098901098901099}, '1001481': {'879569': 0.01098901098901099, '783396': 0.01098901098901099, '818525': 0.01098901098901099, '899016': 0.01098901098901099, '995321': 0.01098901098901099}, '818525': {'879569': 0.01098901098901099, '783396': 0.01098901098901099, '1001481': 0.01098901098901099, '899016': 0.01098901098901099, '995321': 0.01098901098901099}, '899016': {'879569': 0.01098901098901099, '783396': 0.01098901098901099, '1001481': 0.01098901098901099, '818525': 0.01098901098901099, '995321': 0.01098901098901099}, '995321': {'879569': 0.01098901098901099, '783396': 0.01098901098901099, '1001481': 0.01098901098901099, '818525': 0.01098901098901099, '899016': 0.01098901098901099}}
user= '879569'
train= users_items_dict
W = user_similarity(users_items_dict)
K=2
print(train)
{'899016': {'苹果发布会': 1, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 1, '三亚': 1, '鱼豆腐': 0, '林允': 1, '德罗赞': 0, '数码': 0, 'iPhone': 1, '健康': 1, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 1, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 1, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 1, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 1, '痔疮最佳治疗方法': 0, '丙火': 1, '柿子': 0, '襄阳城': 0, '苹果新品': 1, '粘米粉': 0, '金牌': 1, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 1, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}, '995321': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 1, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 1, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 1, '小米推送': 1, '影视': 0, '小米6': 1, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 1, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 1, 'iphone': 1, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 1, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 1, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}, '879569': {'苹果发布会': 0, '网红': 0, '维生素': 1, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 1, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 1, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 1, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 1, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 1, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 1, '雅阁': 0, '西兰花': 1, '红米': 0, '气血不足': 1, '美容养颜': 1, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 1, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 1, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 1, 'ipad': 0, '痔疮最佳治疗方法': 1, '丙火': 0, '柿子': 1, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 1, '莲藕': 1, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 1, '本田': 0, '痔疮的症状': 1, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 1, '料酒': 1, '青菜': 1, '泥胡菜': 1, '美食': 1, '荷兰豆': 1, '腊肠': 0, '内地综艺': 0}, '818525': {'苹果发布会': 0, '网红': 1, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 0, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 0, '詹姆斯': 0, '杨颖': 0, '歌手': 1, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 1, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 0, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 1}, '1001481': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 1, '保肝护肝的食物': 1, '旅行': 0, '三亚': 0, '鱼豆腐': 1, '林允': 0, '德罗赞': 0, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 1, '创业时代': 1, '圣城': 0, '意大利面的做法': 0, '波波维奇': 0, '赵丽颖': 1, '新车': 0, '黑豆': 0, '马刺': 0, '网游': 1, '多瑙': 0, '排骨': 1, '碱性食物': 1, '人工智能技术': 0, '菜谱': 1, '发动机': 0, '詹姆斯': 0, '杨颖': 1, '歌手': 0, '张艺兴': 1, '洁齿': 1, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 1, '小米6': 0, '肛门': 0, '雅阁': 0, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 1, '金庸作品': 1, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 0, '帕萨特': 0, '碱性体质': 1, '卫视': 1, '香菇': 0, '摩登兄弟': 0, 'NBA': 0, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 1, '苹果新品': 0, '粘米粉': 1, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 0, '孙红雷': 1, '植物油': 1, '求婚钻戒': 0, '蒲公英': 1, '小米max': 0, '芋艿': 1, '养生': 1, '本田': 0, '痔疮的症状': 0, '杨丞琳': 1, '华为手机': 0, '奥迪全新a4l': 0, '芋头': 1, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 1, '内地综艺': 0}, '783396': {'苹果发布会': 0, '网红': 0, '维生素': 0, '人文': 0, '保肝护肝的食物': 0, '旅行': 0, '三亚': 0, '鱼豆腐': 0, '林允': 0, '德罗赞': 1, '数码': 0, 'iPhone': 0, '健康': 0, '焖排骨': 0, '创业时代': 0, '圣城': 1, '意大利面的做法': 0, '波波维奇': 1, '赵丽颖': 0, '新车': 1, '黑豆': 0, '马刺': 1, '网游': 0, '多瑙': 0, '排骨': 0, '碱性食物': 0, '人工智能技术': 0, '菜谱': 0, '发动机': 1, '詹姆斯': 1, '杨颖': 0, '歌手': 0, '张艺兴': 0, '洁齿': 0, '面条': 0, '奢侈品': 0, '小米手机': 0, '小米推送': 0, '影视': 0, '小米6': 0, '肛门': 0, '雅阁': 1, '西兰花': 0, '红米': 0, '气血不足': 0, '美容养颜': 0, '收视率': 0, '金庸作品': 0, '华为mate10': 0, 'iphone': 0, '虾仁': 0, '湖人': 1, '帕萨特': 1, '碱性体质': 0, '卫视': 0, '香菇': 0, '摩登兄弟': 0, 'NBA': 1, '痔疮便血': 0, 'ipad': 0, '痔疮最佳治疗方法': 0, '丙火': 0, '柿子': 0, '襄阳城': 0, '苹果新品': 0, '粘米粉': 0, '金牌': 0, '山药': 0, '莲藕': 0, '麦基': 1, '孙红雷': 0, '植物油': 0, '求婚钻戒': 0, '蒲公英': 0, '小米max': 0, '芋艿': 0, '养生': 0, '本田': 1, '痔疮的症状': 0, '杨丞琳': 0, '华为手机': 0, '奥迪全新a4l': 1, '芋头': 0, '牛肉': 0, '料酒': 0, '青菜': 0, '泥胡菜': 0, '美食': 0, '荷兰豆': 0, '腊肠': 0, '内地综艺': 0}}
def recommend(user, train, W, K):
    rank = {}
    interacted_items = train[user].keys()
    for v, wuv, in sorted(W[user].items(), key=lambda x:x[1], reverse=True)[0: K]:
        for i, rvi in train[v].items():
            if i in interacted_items:
                # 应该过滤一下用户已经看过的
                continue
            if rank or rank.keys():
                rank[i] = 0
            rank[i] += wuv * rvi
    return rank
print(recommend(user, train, W, K))
{}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值