写在前面的话:

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

主要内容:

  • 数据预处理
  • 模型构建
  • 结果分析

数据预处理:

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

  1. 在数据库中取出以下字段
  • 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<max_uid:#选择数据df=df_data.loc[(df_data['user_id']>=i)&(df_data['user_id']<i+add)]df=df.groupby(['create_at','user_id','gender','device'],as_index=False).sum()i=i+addprint(i)#df_new_1 = dfdf_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 alone
attach(basket)#################
#delele the first two columns of basket
basket<-basket[,-c(1:2)]
##数据预处理,把数字1替换为字符串1,把数字0替换成NA
for (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 confidence
options(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.net

不写代码的调参侠:关联分析算法及实例(附数据和R代码)​zhuanlan.zhihu.com

https://stackoverflow.com/questions/37292872/how-can-i-one-hot-encode-in-python​stackoverflow.comR语言 apriori算法案例详解​blog.csdn.net

数据挖掘十大算法--Apriori算法_小硒---代码无疆-CSDN博客_aproir算法实例​blog.csdn.net

android 商品筛选_商品关联分析相关推荐

  1. 数据分析项目实战项目五:商品画像与产品关联分析体系实战

    第一章:商品画像体系 1.1 什么是商品画像体系 商品画像可以简单理解成是海量数据的标签,根据商品不同属性的差异,将它们区分为不同的类型,然后每种类型中抽取出典型特征,赋予名称.价格.类别等描述. 1 ...

  2. python灰色关联度分析_灰色关联分析法 python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文2290字,预计阅读需10分钟: 关联分析(association anal ...

  3. mysql存储商品详情_商品详情页系统架构

    一般的电商演变: 商品详情页系统架构演进历程 第一个版本 架构设计 J2EE+Tomcat+MySQL 动态页面,每次请求都要调用多个依赖服务的接口,从数据库里查询数据,然后通过类似JSP的技术渲染到 ...

  4. python灰色关联度分析代码_灰色关联分析法步骤 - osc_uwnmtz9n的个人空间 - OSCHINA - 中文开源技术交流社区...

    https://wenku.baidu.com/view/dc356290af1ffc4fff47ac0d.html?rec_flag=default&sxts=1538121950212 利 ...

  5. 评价类问题_灰色关联分析

    适用范围:计算影响结果的因素的重要程度,确定权重,也适用于评价类问题 基本思想:根据曲线集合形状的相似程度,判断联系是否紧密,曲线越接近,相应序列之间的关联度越大,反之越小 灰色关联分析优点:计算量小 ...

  6. 毕业设计 商品推荐算法之关联分析

    文章目录 0 前言 数据说明 问题描述 购物篮简介 关联规则 关联规则Python代码 导入基本包 数据概览 探索性数据分析EDA 使用Apriori算法求解关联规则 筛选互补品和互斥品 1.获得最高 ...

  7. java商品销售_商品销售系统(Java).doc

    淮海工学院计算机工程学院 实验报告书 课程名:<面向对象程序设计> 实验名称: Java深入面向对象编程 商品销售系统 班 级: 软件081 组 长: 组 员: 李宏志. 谢超 一.实验目 ...

  8. python实现商品管理系统_商品管理系统(示例代码)

    需求: 3.写一个商品管理的程序 功能1:添加商品 功能2:删除商品信息 功能3:修改商品信息 功能4:查看商品,输入all,查看所有商品,输入单个商品名称查看单个商品信息 商品格式存在文件中,goo ...

  9. java商品类_商品类目选择功能开发

    前面,我们完成了商品列表的展示,本篇文章我们完成商品类目选择的功能.可以看到,新增商品的时候,类目选择弹框是空白的. 还是像之前说的那有,我们侧重于后台,至于前台功能我们不详述. 1.新增接口Item ...

最新文章

  1. C++ 析构函数(函数前面有波浪号~)
  2. 法院判决:优步无罪,无人车安全员可能面临过失杀人控诉
  3. sql server datetime转char的方法
  4. python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
  5. 二级(多级)指针,二级指针和二维数组的避坑,指针面试考题
  6. Spring整合ActiveMQ完成消息队列MQ编程
  7. java只使用try和finally不使用catch的原因和场景
  8. java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.classes.views.index_jsp
  9. STM32出现HardFault故障的解决方法
  10. 打开Android Studio报错required plugin “Android Support” is disabled
  11. servlet和struts2一起使用,实现绝对路径下的图片输出到jsp页面
  12. 线性二次型调节器(LQR)原理详解
  13. mac显示隐藏文件夹
  14. unity 暂停按钮_Unity VideoPlayer教程之 视频播放暂停切换
  15. HDU 4508 湫湫系列故事――减肥记I 【完全背包】
  16. 软考高级 真题 2013年上半年 信息系统项目管理师 综合知识
  17. WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(完)
  18. 如何使用Dreamweaver制作网页的技巧分享
  19. 初中毕业能报考成人大专吗 可以选择什么专业
  20. 【物理应用】基于matlab模拟井筒多相流【含Matlab源码 2152期】

热门文章

  1. java集合类中的迭代器
  2. oracle命中率sql语句
  3. transport方式连接Elasticsearch6.2.3
  4. websocket handshake unexpected response code 404问题
  5. thinkPHP的Excel插件
  6. 关于Axure RP
  7. 转载 漫谈机器学习中的距离和相似性度量方法
  8. Struts2的声明式异常处理
  9. ARP监听渗透内网的方法
  10. vagrant配置虚拟机网卡