android 商品筛选_商品关联分析
写在前面的话:
最近发现,使用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<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 inspectblog.csdn.net
不写代码的调参侠:关联分析算法及实例(附数据和R代码)zhuanlan.zhihu.com
https://stackoverflow.com/questions/37292872/how-can-i-one-hot-encode-in-pythonstackoverflow.comR语言 apriori算法案例详解blog.csdn.net
数据挖掘十大算法--Apriori算法_小硒---代码无疆-CSDN博客_aproir算法实例blog.csdn.net
android 商品筛选_商品关联分析相关推荐
- 数据分析项目实战项目五:商品画像与产品关联分析体系实战
第一章:商品画像体系 1.1 什么是商品画像体系 商品画像可以简单理解成是海量数据的标签,根据商品不同属性的差异,将它们区分为不同的类型,然后每种类型中抽取出典型特征,赋予名称.价格.类别等描述. 1 ...
- python灰色关联度分析_灰色关联分析法 python
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文2290字,预计阅读需10分钟: 关联分析(association anal ...
- mysql存储商品详情_商品详情页系统架构
一般的电商演变: 商品详情页系统架构演进历程 第一个版本 架构设计 J2EE+Tomcat+MySQL 动态页面,每次请求都要调用多个依赖服务的接口,从数据库里查询数据,然后通过类似JSP的技术渲染到 ...
- python灰色关联度分析代码_灰色关联分析法步骤 - osc_uwnmtz9n的个人空间 - OSCHINA - 中文开源技术交流社区...
https://wenku.baidu.com/view/dc356290af1ffc4fff47ac0d.html?rec_flag=default&sxts=1538121950212 利 ...
- 评价类问题_灰色关联分析
适用范围:计算影响结果的因素的重要程度,确定权重,也适用于评价类问题 基本思想:根据曲线集合形状的相似程度,判断联系是否紧密,曲线越接近,相应序列之间的关联度越大,反之越小 灰色关联分析优点:计算量小 ...
- 毕业设计 商品推荐算法之关联分析
文章目录 0 前言 数据说明 问题描述 购物篮简介 关联规则 关联规则Python代码 导入基本包 数据概览 探索性数据分析EDA 使用Apriori算法求解关联规则 筛选互补品和互斥品 1.获得最高 ...
- java商品销售_商品销售系统(Java).doc
淮海工学院计算机工程学院 实验报告书 课程名:<面向对象程序设计> 实验名称: Java深入面向对象编程 商品销售系统 班 级: 软件081 组 长: 组 员: 李宏志. 谢超 一.实验目 ...
- python实现商品管理系统_商品管理系统(示例代码)
需求: 3.写一个商品管理的程序 功能1:添加商品 功能2:删除商品信息 功能3:修改商品信息 功能4:查看商品,输入all,查看所有商品,输入单个商品名称查看单个商品信息 商品格式存在文件中,goo ...
- java商品类_商品类目选择功能开发
前面,我们完成了商品列表的展示,本篇文章我们完成商品类目选择的功能.可以看到,新增商品的时候,类目选择弹框是空白的. 还是像之前说的那有,我们侧重于后台,至于前台功能我们不详述. 1.新增接口Item ...
最新文章
- C++ 析构函数(函数前面有波浪号~)
- 法院判决:优步无罪,无人车安全员可能面临过失杀人控诉
- sql server datetime转char的方法
- python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
- 二级(多级)指针,二级指针和二维数组的避坑,指针面试考题
- Spring整合ActiveMQ完成消息队列MQ编程
- java只使用try和finally不使用catch的原因和场景
- java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.classes.views.index_jsp
- STM32出现HardFault故障的解决方法
- 打开Android Studio报错required plugin “Android Support” is disabled
- servlet和struts2一起使用,实现绝对路径下的图片输出到jsp页面
- 线性二次型调节器(LQR)原理详解
- mac显示隐藏文件夹
- unity 暂停按钮_Unity VideoPlayer教程之 视频播放暂停切换
- HDU 4508 湫湫系列故事――减肥记I 【完全背包】
- 软考高级 真题 2013年上半年 信息系统项目管理师 综合知识
- WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(完)
- 如何使用Dreamweaver制作网页的技巧分享
- 初中毕业能报考成人大专吗 可以选择什么专业
- 【物理应用】基于matlab模拟井筒多相流【含Matlab源码 2152期】