推荐系统之Also Buy和Also View的实现

目前很多的B2C网站均有推荐系统的呈现,而最常见的就是类似Amazon网站上出现的购买此商品的顾客也同时购买了。

推荐系统之Also Buy和Also View的实现_第1张图片

说到推荐系统,大多数人认为非常的高深莫测,但是再高深的系统也可以一探究竟。上面的推荐其实就是著名的“啤酒和尿布”相类似。下面我们就来研究上要实现上述的功能,需要做哪些操作。

首先我们要的是一份数据,即所有的用户的购买记录。即一份 userId和itemId的记录表。

数据格式可以如下:

userId itemId

123 A

123 B

124 A

125 B

有了上述所有网站内的所有数据,接下来就是对数据进行处理了

1、去除所有重复的数据项

2、去除所有只购买过一个产品的用户记录

经过上述的操作后,留下来就是有用的数据了。我们需要再把数据保存为:

A:(123,124)

B:(123,125)

即找出每个商品有哪些用户Id购买过。再然后再去取A商品和B商品有相同会员Id的数目,即同时购买A商品和B商品的人数共有多少。

如果你N个商品,则两两比较需要N(N+1)/2次,然后找出重复最多的产品。具体python代码实现如下:

import pymssql,heapq

matrix = {}

conn = pymssql.connect(host='localhost:1433',user='sa', password='123456', database='item2item')
cur = conn.cursor()
cur.execute('SELECT [itemId],[userId]  FROM [item2item].[dbo].[user_item]')

for row in cur:
    itemId = row[0]
    userId = row[1]

    if not itemId in matrix:
        matrix[itemId] = set([userId])
    else:
        matrix[itemId].add(userId)
conn.close()

def amazonDistance(item1Set, item2Set):
    return len(item1Set.intersection(item2Set))

def recommend(seedItem, numRecommendations):
    amazonResults = []
    for key in matrix.keys():
        heapq.heappush(amazonResults, (-1*amazonDistance(matrix[key], matrix[seedItem]), key))
    amazonResults.sort()
    return amazonResults[0:numRecommendations]

data = recommend(1234,10)

Related posts:

  1. 使用Python连接MSSQL方法
  2. 使用python将Sqlite中的数据直接输出为CVS
  3. 使用python来抓取新浪的IP数据

你可能感兴趣的:(python,推荐系统,程序设计)