加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

文本挖掘:找出兴趣相投的用户并作产品推荐

发布时间:2020-12-14 03:14:44 所属栏目:大数据 来源:网络整理
导读:21CTO导读: Python在机器学习,推荐算法,数据抓取,大数据分析等领域,提供了很多不错的扩展模块。本文就为大家抛砖引玉,提供一个用户对电影兴趣的推荐算法,欢迎讨论。 目录: 过程 电影评价多重分类 用户信息录入 计算皮尔逊相关系数找出兴趣相投的用户

21CTO导读:

Python在机器学习,推荐算法,数据抓取,大数据分析等领域,提供了很多不错的扩展模块。本文就为大家抛砖引玉,提供一个用户对电影兴趣的推荐算法,欢迎讨论。






目录:

  1. 过程

  2. 电影评价多重分类

  3. 用户信息录入

  4. 计算皮尔逊相关系数找出兴趣相投的用户插入自己的数据

  5. 向某用户推荐电影加权平均所有人的评价

  6. 结果与分析


过程:
??? 用爬虫抓取豆瓣电影用户信息
??? 用多重分类法,定义电影评价等级
??? 计算自己与用户的皮尔逊相关度
??? 以人为主体分析相似度:找出志同道合的人,可以发现潜在喜欢的商品
??? 以商品为主体分析相似度:找出相似的商品,可以发现潜在的客户(如亚马逊的‘买了商品A的用户还买了商品B’)


电影评价多重分类:

  1. 很差

  2. 较差

  3. 还行

  4. 推荐

  5. 力荐

代码:

  1. #-*-?coding:?utf-8?-*-??

  2. import?json??

  3. import?sys??

  4. reload(sys)??

  5. sys.setdefaultencoding(?"utf-8"?)??

  6. ??

  7. user_info?=?{}??

  8. ??

  9. #爬取到的数据??

  10. user_dict?=?{??

  11. ?????????????'ns2250225':[4,3,4,5,4],??

  12. ?????????????'justin':[3,2],??

  13. ?????????????'totox':[2,1,??

  14. ?????????????'fabrice':[4,5],??

  15. ?????????????'doreen':[3,2,3]??

  16. ?????????????}??

  17. ??

  18. #录入用户数据??

  19. def?user_data(user_dict):??

  20. ????for?name?in?user_dict:??

  21. ????????user_info[name]?=?{u'消失的爱人'?:?user_dict[name][0]}??

  22. ????????user_info[name][u'霍比特人3']?=?user_dict[name][1]??

  23. ????????user_info[name][u'神去村']?=?user_dict[name][2]??

  24. ????????user_info[name][u'泰坦尼克号']?=?user_dict[name][3]??

  25. ????????user_info[name][u'这个杀手不太冷']?=?user_dict[name][4]??

  26. ??????????

  27. ??

  28. user_data(user_dict)??????

  29. ??

  30. #存放用户数据??

  31. try:??

  32. ????with?open('user_data.txt',?'w')?as?data:??

  33. ????????for?key?in?user_info:??

  34. ????????????data.write(key)??

  35. ????????????for?key2?in?user_info[key]:??

  36. ????????????????data.write('t')??

  37. ????????????????data.write(key2)??

  38. ????????????????data.write('t')??

  39. ????????????????data.write('t')??

  40. ????????????????data.write(str(user_info[key][key2]))??

  41. ????????????????data.write('n')??

  42. ????????????data.write('n')??

  43. except?IOError?as?err:??

  44. ????print('File?error:?'?+?str(err)) ?

计算皮尔逊相关系数,找出兴趣相投的用户:(插入自己的数据)


  1. from?math?import?sqrt???

  2. ??

  3. #计算皮尔逊相关度(1为完全正相关,-1为完成负相关)??

  4. def?sim_pearson(prefs,?p1,?p2):????

  5. ????#?Get?the?list?of?mutually?rated?items????

  6. ????si?=?{}????

  7. ????for?item?in?prefs[p1]:????

  8. ????????if?item?in?prefs[p2]:????

  9. ????????????si[item]?=?1????

  10. ????

  11. ????#?if?they?are?no?ratings?in?common,?return?0????

  12. ????if?len(si)?==?0:????

  13. ????????return?0????

  14. ????

  15. ????#?Sum?calculations????

  16. ????n?=?len(si)????

  17. ????

  18. ????#?Sums?of?all?the?preferences????

  19. ????sum1?=?sum([prefs[p1][it]?for?it?in?si])????

  20. ????sum2?=?sum([prefs[p2][it]?for?it?in?si])????

  21. ????

  22. ????#?Sums?of?the?squares????

  23. ????sum1Sq?=?sum([pow(prefs[p1][it],?2)?for?it?in?si])????

  24. ????sum2Sq?=?sum([pow(prefs[p2][it],?2)?for?it?in?si])????

  25. ????

  26. ????#?Sum?of?the?products????

  27. ????pSum?=?sum([prefs[p1][it]?*?prefs[p2][it]?for?it?in?si])????

  28. ????

  29. ????#?Calculate?r?(Pearson?score)????

  30. ????num?=?pSum?-?(sum1?*?sum2?/?n)????

  31. ????den?=?sqrt((sum1Sq?-?pow(sum1,?2)?/?n)?*?(sum2Sq?-?pow(sum2,?2)?/?n)) ?

  32. ??

  33. ????if?den?==?0:????

  34. ????????return?0????

  35. ????r?=?num?/?den??

  36. ??????

  37. ????return?r??

  38. ??

  39. ??

  40. #插入自己的数据??

  41. user_info['me']?=?{u'消失的爱人'?:?5,??

  42. ???????????????????u'神去村'?:?3,??

  43. ???????????????????u'炸裂鼓手'?:?5}??

  44. ??

  45. ??

  46. ????????????

  47. #找出皮尔逊相关系数>0的用户,说明该用户与自己的电影品味比较相近??

  48. for?user?in?user_info:??

  49. ????res?=?sim_pearson(user_info,?'me',?user)??

  50. ????if?res?>?0:??

  51. ????????print('the?user?like?%s?is?:?%s'?%?('me',?user))??

  52. ????????print('result?:%fn'?%?res) ?

向某用户推荐电影(加权平均所有人的评价)


  1. #向某个用户推荐电影(加权平均所有人的评价值)??

  2. def?getRecommendations(prefs,person,similarity=sim_pearson):??

  3. ??totals={}??

  4. ??simSums={}??

  5. ??for?other?in?prefs:??

  6. ????#?don't?compare?me?to?myself??

  7. ????if?other==person:?continue??

  8. ????sim=similarity(prefs,other)??

  9. ??

  10. ????#?ignore?scores?of?zero?or?lower??

  11. ????if?sim<=0:?continue??

  12. ????for?item?in?prefs[other]:??

  13. ??????????

  14. ??????#?only?score?movies?I?haven't?seen?yet??

  15. ??????if?item?not?in?prefs[person]?or?prefs[person][item]==0:??

  16. ????????#?Similarity?*?Score??

  17. ????????totals.setdefault(item,0)??

  18. ????????totals[item]+=prefs[other][item]*sim??

  19. ????????#?Sum?of?similarities??

  20. ????????simSums.setdefault(item,0)??

  21. ????????simSums[item]+=sim??

  22. ??

  23. ??#?Create?the?normalized?list??

  24. ??rankings=[(total/simSums[item],item)?for?item,total?in?totals.items()]??

  25. ??

  26. ??#?Return?the?sorted?list??

  27. ??rankings.sort()??

  28. ??rankings.reverse()??

  29. ??return?rankings??

  30. ??

  31. ??

  32. #向我推荐电影??

  33. res?=?getRecommendations(user_info,?"me")??

  34. print('Recommand?watching?the?movie:')??

  35. print?json.dumps(res,?encoding='UTF-8',?ensure_ascii=False)??

结果与分析:

  • 与我电影口味相近的用户有:doreen,fabrice?

  • 推荐我看的电影有:泰坦尼克号,这个杀手不太冷

  • 以人为主体分析, 找出有相似爱好的人, 并向这些人推荐商品,可以发现潜在喜欢的商品

  • 而若以商品为主体分析, 找出相似的商品, 找出喜欢这个产品的人, 可以发现商品潜在的客户


来源:数据挖掘入门与实战

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读