基于标签内容的推荐,首先计算项目对于标签的tf-idf值,然后基于tf-idf值采用余弦相似度公式计算项目之间的相似度,从而实现根据相似度的大小来进行推荐具有类似标签的项目。
import pandas as pd
from numpy import *
import os
os.chdir('E:\广电大数据营销推荐项目案例\数据清洗\电视节目信息数据预处理\wordsbag\dataprocess')
#prams_title = ['MovieID', 'Title', 'Genres']
prams = pd.read_table('./third_programs.csv', sep=',',encoding='gbk',header='infer',error_bad_lines=False)
prams.head()
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf=TfidfVectorizer(stop_words='english')
#prams['Genres']=prams['Genres'].fillna('')
prams['genres_good']=prams['genres_good'].fillna('')
tfidf_matrix=tfidf.fit_transform(prams['genres_good'])
print(tfidf_matrix)
tfidf_matrix.shape
from sklearn.metrics.pairwise import linear_kernel
cosine_sim=linear_kernel(tfidf_matrix,tfidf_matrix)
indices=pd.Series(prams.index,index=prams['program_title']).drop_duplicates()
def get_recommendation(title,consine_sim=cosine_sim):
idx=indices[title]
sim_scores=list(enumerate(cosine_sim[idx]))
sim_scores=sorted(sim_scores,key=lambda x:x[1],reverse=True)
sim_scores=sim_scores[1:30]
movie_indices=[i[0]for i in sim_scores]
return prams[['program_title','genres_good']].iloc[movie_indices]
get_recommendation('黑客帝国')
“黑客帝国”的标签为“动作、科幻”,输出跟它相似的top20个节目的结果为:
Out[146]:
program_title genres_good
1315 功夫机器侠之北腿 动作 / 科幻
1731 机器人的崛起 动作 / 科幻
1267 金刚狼3殊死一战 剧情 / 动作 / 科幻
2303 闪电侠 剧情 / 动作 / 科幻
2327 神盾局特工 剧情 / 动作 / 科幻
2960 猩球崛起3终极之战 剧情 / 动作 / 科幻
3055 机器之血 剧情 / 动作 / 科幻
3548 绿巨人浩克 剧情 / 动作 / 科幻
3588 猩球崛起2黎明之战 剧情 / 动作 / 科幻
254 像素大战 喜剧 / 动作 / 科幻
541 黑衣人3 喜剧 / 动作 / 科幻
1811 最后一个男人 喜剧 / 动作 / 科幻
417 迪迦奥特曼光的孩子们 科幻
814 平行世界之门 科幻
874 登月先锋 科幻
1225 9 科幻
2082 最终变异 科幻
2372 我机器人2 科幻
2874 流星风暴 科幻
3033 未来警察 科幻
911 魔法阵都市剧场版上篇 动作 / 科幻 / 动画
1883 超蛙战士之威武教官 动作 / 科幻 / 动画
3278 机甲界卡利安 动作 / 科幻 / 动画
790 蚁人2黄蜂女现身 动作 / 科幻 / 冒险
991 环太平洋雷霆再起 动作 / 科幻 / 冒险
1036 冲出宁静号 动作 / 科幻 / 冒险
1104 头号玩家 动作 / 科幻 / 冒险
1752 X战警黑凤凰 动作 / 科幻 / 冒险
1824 终结者创世纪 动作 / 科幻 / 冒险
本文主要参考https://blog.csdn.net/Joenyye/article/details/80912909