python商品关联_商品关联分析

写在前面的话:

最近发现,使用R做数据挖掘很是方便,一是能够快速搭建模型,二来有比较成熟的包进行数据可视化。下面详细记录自己用R语言做的一个商品关联分析,一开始对R不是很熟悉,在网上参考很多文章,然后结合自己的数据,简单的做了一个版本。

主要内容:数据预处理

模型构建

结果分析

数据预处理:

在考虑对商品进行关联分析前,需要确定使用商品的哪个维度去分析,对于一般的线下的零售数据,可以具体到商品类目,比如啤酒,或者尿布。但是线上电商来说,商品有很明确分类,所以选择的维度可能有商品的一级、二级、三级类目,进而也可以从不同的维度去看商品类目之间的购买关联,同时因为线上商品数量比较多,一般不会考虑商品SPU或者SKU维度。在数据库中取出以下字段create_at: 订单支付时间

user_id: 用户id,用于唯一识别用户

gender:性别

device:设备系统类型(Android/IOS)

categories:一级/二级/三级类目

2. one hot编码处理

当时参考的文章里面是已经对数据进行one hot编码处理了,所以在我用SQL从数据库里取出来的数据,还得用python再洗一遍数据(话说很久都没用python,这门手艺都生了)

不多说了,直接上代码:

import pandas as pd

import numpy as np

import prestodb

第一步:先取出数据,然后对商品类目进行one hot编码

#取数方式,仅展示样式,连接不可用

conn = prestodb.dbapi.connect(

host='',

port=80,

user='',

catalog='',

schema='',

)

#执行取数sql

sql = """select * from analystsdev.purchase_relate_analysis_cate_one limit 1000"""

cursor = conn.cursor()

cursor.execute(sql)

data = cursor.fetchall()

column_descriptions = cursor.description

if data:

df = pd.DataFrame(data)

df.columns = [c[0] for c in column_descriptions]

else:

df = pd.DataFrame()

# 商品类目one hot编码

one_hot = pd.get_dummies(df['category_one_cn'])

df_data = df.drop(['category_one_en','category_one_cn'],axis = 1)

#数据拼接

df_data = df_data.join(one_hot)

第二步:one hot 编码完成后,按支付时间,用户id,性别,设备系统类型进行group by

#因为数据量超级大,采用分段group by的方式

#设置变量取user id对应最大数值

max_uid=df_data['user_id'].max()

print(max_uid)

i=0

add=50000000

df_new_1=pd.DataFrame()

while i

#选择数据

df=df_data.loc[(df_data['user_id']>=i)&(df_data['user_id']

df=df.groupby(['create_at','user_id','gender','device'],as_index=False).sum()

i=i+add

print(i)

#df_new_1 = df

df_new_1 = pd.concat([df_new_1,df], axis=0)

df_new = df_new_1

第三步:保存成csv文件,后续导入R中构建模型

df_new.to_csv('E:\\goods_corr_anlysts_cate_one_201907to202003.csv',index=False,encoding='utf-8')

模型构建:

前面通过sql取数并且利用python进行处理之后生成的csv文件就可以直接导入R中,然后调用关联算法进行相应的分析。

相关代码(R语言):

###商品一级类目

###一单多件判断逻辑:同一个user_id,下单时间为同一天的商品被归类为同一购物篮商品,筛选出购物篮

中大于2件的商品及对应的支付时间

###user_id

basket<-read.csv("E:/finance_data/1909/corr/goods_corr_anlysts_cate_one_201907to202003.csv",

header = TRUE,sep = ",", dec = ".",fileEncoding = 'utf-8')

###basket<-read.csv("/Users/leviwang/Desktop/goods_corr_anlysts_cate_one_201907to09.csv",

header = TRUE,sep = ",", dec = ".",fileEncoding = 'utf-8')

#加载相关包

library(Matrix)

library(arules)

library(arulesViz)

library(grid)

#查看数据

#View(basket)

#查看列数

ncol(basket)

#查看列名

names(basket)

#查看各列数据的统计参数

summary(basket)

#basket's variable can be referenced by their name aloneattach(basket)##################delele the first two columns of basketbasket<-basket[,-c(1:2)]##数据预处理,把数字1替换为字符串1,把数字0替换成NAfor (i in 1:ncol(basket)){basket[,i] <-replace(basket[,i],basket[,i]==1,"1")}for (i in 1:ncol(basket)){basket[,i] <-replace(basket[,i],basket[,i]==0,NA)}##设定关联规则##rules1 <- apriori(basket, parameter = list(supp = 0.005, conf = 0.2, target = "rules",minlen=2,maxlen=2),appearance = list(rhs=c("女装=1"),lhs=c("gender=M","gender=F","gender=U")),control = list(verbose=F))##查看不同的性别的购买偏好rules1 <- apriori(basket[,-c(2:2)], parameter = list(supp = 0.0005, conf = 0.001, target = "rules",minlen=2,maxlen=2),appearance = list(lhs=c("gender=M")),control = list(verbose=F))##查看不同的设备的购买偏好rules1 <- apriori(basket[,-c(1:1)], parameter = list(supp = 0.0005, conf = 0.01, target = "rules",minlen=2,maxlen=2),appearance = list(lhs=c("device=android")),control = list(verbose=F))##对于supp和conf的设置,不同的数据可能会有很大差异#rules1 <- apriori(basket, parameter = list(supp = 0.005, conf = 0.2, target = "rules", minlen=2,maxlen=2))### 查看规则基本情况summary(rules1)##绘制规则plot(rules1)#sort the rules by decreaing confidenceoptions(digits = 2)rules1<-sort(rules1,by='confidence',decreasing = TRUE)#sort the rules by decreaing lift and identify how many rules have lift >1#rules1<-sort(rules1,by='lift',decreasing = TRUE)##查看规则inspect(rules1)#write.table (inspect(rules1[1:20]), file ="E:/finance_data/201907.csv", sep =",",row.names =TRUE, col.names =TRUE, quote =TRUE)##quartz(family='STKaiti')##rules1<- subset(rules1, lift>1)inspectDT(rules1)#par(family='STKaiti')

plot(rules1[1:10], measure="confidence", method="graph",shading = "support",

control = list(verbose = TRUE))

结果分析:

通过以上关联模型,得出商品类目的购买的关联关系

商品一级类目关联规则:数码电脑、女装、男装、日用百货是主要的被关联一级类目

客户购买童装时会倾向购买女装

从提升度上看,{家居饰品,日用百货} 是有效的强关联规则

不同性别情况:

不同设备情况:

商品二级类目:

二级无特别明显关联规则,关联的商品和性别相关,男士在购买T shirts会关联购买卫衣、裤子

商品三级类目:

从三级类目看,{耳环,女性耳钉}是相对强的关联规则,先买耳环再买女性耳钉的概率大于先买女性耳钉再买耳环

参考文章:R语言关联分析之啤酒和尿布_王亨的博客-CSDN博客_could not find function inspect​blog.csdn.netv2-b981620e8dfd0e3f14849e5d8240edf6_ipico.jpg不写代码的调参侠:关联分析算法及实例(附数据和R代码)​zhuanlan.zhihu.comv2-77d179e2b448e8693f28cdfeb1b97a24_180x120.jpghttps://stackoverflow.com/questions/37292872/how-can-i-one-hot-encode-in-python​stackoverflow.comR语言 apriori算法案例详解​blog.csdn.netv2-2a5027b5bff83f50a189c6146b4f7548_ipico.jpg数据挖掘十大算法--Apriori算法_小硒---代码无疆-CSDN博客_aproir算法实例​blog.csdn.netv2-b981620e8dfd0e3f14849e5d8240edf6_ipico.jpg

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值