针对采购品类的用户相似性分析

数据描述: 取三级品类采购数据的top的 品类

品类        被采购次数

办公文具   36677

纸类         21236

纸品/湿巾 20646

文件管理 15909

本册便签 13781

充电器/数据线 10240

打印复印耗材 9803

食用油    8368

米面杂粮  8143

以这些品类为基础

筛选了采购过这10个品类里面3个以上的用户采购品类数据()

数据格式:

uid                      采购品类

22|130600|K001        纸巾|办公文具|纸品/湿巾

22|240300|S010       办公文具|纸品/湿巾|本册便签|文件管理|一次性用品

 

代码如下

similarity.py
import numpy as np

def compete_similar(array1,array2):
    if(array1==array2):
        return 1
    #计算相似度
    vec_1=array1
    vec_2=array2
    one_dot_two=np.dot(vec_1,vec_2)
    L1=np.sqrt(np.dot(vec_1,vec_1))
    L2 = np.sqrt(np.dot(vec_2, vec_2))
    #余弦值越接近1,就表明家教越接近0度,也就是两个向量越相似
    cos_angle=one_dot_two/(L1*L2)
    angle_pi=np.arccos(cos_angle)
    angle=(angle_pi*360/2/np.pi)/100
    return angle

similar_analysis.py
import pandas as pd
from util import similarity as similar
def getPL_code(arrLike):
    arrString=arrLike['array_to_string']
    pl_code_list=["办公文具","纸类","纸品/湿巾","文件管理","本册便签","充电器/数据线","打印复印耗材","一次性用品","食用油","米面杂粮"]
    pl_list=[]
    for cur_pl_code in pl_code_list:
        if cur_pl_code in arrString:#对品类二值化处理
            pl_list.append(1)
        else:
            pl_list.append(0)
    return pl_list

def ResultDFToSave(rules):
    returnRules=[]
    for i in rules:
        temList=[]
        temList.append(i[0])
        temList.append(i[1])
        temList.append(i[2])
    returnRules.append(temList)
    return pd.DataFrame(returnRules,columns=('user1','user2','余弦相似度'),index=None)

if __name__ == '__main__':
    fileName = "E:/data/user_category.csv"
    df=pd.read_csv(fileName)
    df=df.head(100)
    df['pl_code']=df.apply(getPL_code,axis=1)

    result_list=[]
    result = []
    for i in range(df.iloc[:,0].size):
        user1=df.iloc[i]['uid']
        pl_code_array1=df.iloc[i]['pl_code']
        for j in range(df.iloc[:, 0].size):
            user2 = df.iloc[j]['uid']
            pl_code_array2 = df.iloc[j]['pl_code']
            similar_num=similar.compete_similar(pl_code_array1,pl_code_array2)
            result.append(user1)
            result.append(user2)
            result.append(similar_num)
            result_list.append(result.copy())
            result.clear()
    print(result_list)
    #将结果保存成excel格式的文件
    dfToSave=ResultDFToSave(result_list)
    saveFileName="用户余弦相似性"+".xlsx"
    dfToSave.to_excel(saveFileName)
    print("生成文件完毕")

由此可以得到用户之间的相似度

但是遗漏了一个重要问题 就是品类的采购次数

一个品类采购1次和采购100次 是完全不同的  

这个待后续再探索吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值