Python client for Redis key-value store
$ sudo pip install redis
index.python
# _*_ coding: utf-8 -*- from __future__ import absolute_import from __future__ import unicode_literals def jaccard(e1, e2): """ :param e1: list of int :param e2: list of int :rtype: float """ set_e1 = set(e1) set_e2 = set(e2) return float(len(set_e1 & set_e2)) / float(len(set_e1 | set_e2)) def get_key(k): return 'JACCARD:PRODUCT:{}'.format(k) # 商品xを購入した人が1,3,5 product_x = [1, 3, 5] product_a = [2, 4, 5] product_b = [1, 2, 3] product_c = [2, 3, 4, 7] product_d = [3] product_e = [4, 6, 7] # 商品データ products = { 'X': product_x, 'A': product_a, 'B': product_b, 'C': product_c, 'D': product_d, 'E': product_e, } #redis import redis r = redis.Redis(host='localhost', port=6379, db=0) for key in products: base_customers = products[key] for key2 in products: if key == key2: continue target_customers = products[key2] # ジャッカード指数 j = jaccard(base_customers, target_customers) # redis Sortedに記録 r.zadd(get_key(key), key2, j) # 例1 商品xを買った人はこんな商品も買っています print(r.zrevrange(get_key('X'), 0, 2)) # 例2 商品Eを買った人はこんな商品も買っています。 print(r.zrevrange(get_key('E'), 0, 2))
[vagrant@localhost rss10]$ python index.py [b'B', b'D', b'A'] [b'C', b'A', b'X']
レコメンドアルゴリズムには、協調フィルタリングと内容ベース(コンテンツベース)フィルタリングがある