特征画像,在电商中俗称用户画像,是对不同类别群体的特征描述方法
做特征画像的方法非常多,今天抛砖引玉一下
注,有疑问 加QQ群..[174225475].. 共同探讨进步
有偿求助请 出门左转 door , 合作愉快
问题描述
从网上抓取了部分动漫的基本信息/周边及竞品数量信息
希望能从中获取高点播动漫的分布特征
解题步骤
数据准备
setwd('./20171222dongman')
library(readxl)
library(data.table)
dongman1 <- data.table(read_xlsx('./dongman.xlsx',sheet = 1))
数据基本情况描述
head(dongman1)
数据有数值和字符串及数值和字符串混合等情况,字符串中还包含了特殊字符大量空格等,鉴于这些情况,需要对数据进行清洗
数据清洗及有效信息提取
str_clean <- function(x) {
trimws(gsub('\r|\n','',x))
}
dongman2 <- dongman1[,lapply(.SD,str_clean)]
get_num <- function(x) {
if (as.numeric(regexpr('[0-9.]+',x))>0) {
regmatches(x,regexpr('[0-9.]+',x))
}else{
NA
}
}
dongman2[,c('正片数据','周边数据','专辑总数据')] <-
dongman2[,lapply(.SD,function(x) lapply(x,get_num)),
.SDcols=c('正片数据','周边数据','专辑总数据')]
dongman2[,':='(评分=as.numeric(评分),
总播放量=as.numeric(总播放量),
正片数据=as.numeric(正片数据),
周边数据=as.numeric(周边数据),
专辑总数据=as.numeric(专辑总数据),
今日播放量=as.numeric(今日播放量))]
leixing2 <- gsub(' ',
' ',dongman2$类型)
type1 <- dcast(L1~value,data=melt(strsplit(leixing2,' ')),length)
dongman3 <- cbind(dongman2,type1[,-1])
建模前数据规整
# delete 动漫名称/主演/类型/简介
# 名称无效,主演都是动漫里的角色没什么参考价值,简介涉及文本挖掘暂不深入,类型已被拆分处理为type1
dongman4 <- dongman3[!is.na(dongman3$总播放量),-c('动漫名称','主演','类型','简介')]
dongman4$target1 <- ifelse(dongman4$总播放量>0.1,1,0)
library(smbinning)
websc1 <- smbinning(df=dongman4[,c('target1','评分')],
y='target1',x='评分')
pingfen1 <- cut(dongman4$评分,c(websc1$bands))
zhengp1 <- smbinning(df=dongman4[,c('target1','正片数据')],
y='target1',x='正片数据')
zhengpian1 <- cut(dongman4$正片数据,c(zhengp1$bands))
zhoub1 <- smbinning(df=dongman4[,c('target1','周边数据')],
y='target1',x='周边数据')
zhoubian1 <- cut(dongman4$周边数据,c(zhoub1$bands))
zhuanj1 <- smbinning(df=dongman4[,c('target1','专辑总数据')],
y='target1',x='专辑总数据')
zhuanji1 <- cut(dongman4$周边数据,c(zhuanj1$bands))
doman1 <- cbind(pingfen1,zhengpian1,zhoubian1,
zhuanji1,dongman4[,-c(1:5)])
doman1$target2 <- ifelse(doman1$target1==1,'YES','NO')
doman2 <- data.table(doman1[,-c('target1')])
doman2 <- doman2[,lapply(.SD,as.factor)]
建模
rules <- apri(...)
rules.sorted <- sort(rules, by='lift')
plot(rules.sorted, method="graph",
control=list(type='items',arrowSize=0.3))
将所有规则展示出来会发现, 绝大多数高点播动漫都与 评分(8.9,9.7]有关联, 于是对规则进行合并处理
# remove redundant rules
rules.pruned <- rules.sorted[!redundant]
#inspect(rules.pruned)
plot(rules.pruned, method="graph",
control=list(type='items',arrowSize=0.4))
将前面的规则合并后我们发现,高点播动漫主要依赖于 分值, 这一点是非常清晰明了的, 同时也是闭着眼睛也能发现的规则, 于是乎规避掉这个因素, 则
rules <- apri(...)
rules.sorted <- sort(subset(rules, !items %in% c('pingfen1')), by='lift')
...
# remove redundant rules
rules.pruned <- rules.sorted[!redundant]
plot(rules.pruned, method="graph",
control=list(type='items',arrowSize=0.4))
剔除 评分 因素, 正片数量在(52,218] , 周边数量在 (35,2460], 类型 == 经典, 专辑总数据在 (52,2580] 都可以 成为高点播动漫 的主要特征