目的
从海量的数据中提取和挖掘出对企业有价值的规律和趋势,为企业的决策,营销,运维等提供支持
支持包括,评估,预见,改进
在这里做的是客户分群
使用的工具是R语言
时间是20160929
特征工程
将原始数据转化为特征数据
数据示意
Channel Region Fresh Milk Grocery Frozen Detergents_Paper Delicassen
2 3 12669 9656 7561 214 2674 1338
2 3 7057 9810 9568 1762 3293 1776
2 3 6353 8808 7684 2405 3516 7844
1 3 13265 1196 4221 6404 507 1788
2 3 22615 5410 7198 3915 1777 5185
2 3 9413 8259 5126 666 1795 1451
输入数据
filename <- "C:/Data/Wholesale_customers_data.csv"
dat <- read.table(filename,sep=",",header=TRUE,stringsAsFactors=TRUE)
描述性统计
数据剖析,离散数据与连续数据
各个属性的集中趋势
median(dat[,3])
summary(dat[,3])
summary(dat)
各个属性离中趋势
max(dat[,3])
min(dat[,3])
sd(dat[,3])
var(dat[,3])
离散数据的p频率
##统计一列
datfreq <- data.frame(table(dat[,1]),stringsAsFactors=F)
统计两列或者多列
##install.packages("plyr")
library(plyr)
Freq_table <- count(dat,vars=c("Channel", "Region"))
colnames(Freq_table ) <- c("Chal", "Reg","Frequence")
各个属性的偏峰态
install.packages("fBasics")
library(fBasics)
kurtosis(dat[,3])
skewness(dat[,3])
关联协方差
cov(dat[,3],dat[,4])
cov(dat[,3],dat[,4])
cov(dat)
var(dat)
简单相关系数以及其显著性检验
cor(dat$[,3],dat[4])
cor(dat)
cor.test(dat[,3],dat[,4])
cor.test(dat[,3],dat[,4],method="spearman")
绘制图形
plot(dat)
barplot(dat[,3])
hist(dat[,3])
聚类分析
clusdata <- dat[,3:6]
##距离矩阵
kdat <- dist(clusdata,method="euclidean")
##centers是分类个数,nstar取随机初始中心的次数
km <- kmeans(kdat,center=3)
##聚类的一些参数
km$centers #各类别中心坐标点
km$tot.withinss #组内平方和
km$betweenss #组间平方和
km$totss #总平方和
##聚类示意图
plot(kdat,pch=(km$cluster-1))
points(km$centers,pch=8)
legend(km$center[1,1],km$center[1,2],"center_1")
legend(km$center[2,1],km$center[2,2],"center_2")
legend(km$center[3,1],km$center[3,2],"center_3")
##聚类评价,聚类优度 取N/2中聚类个数,看哪个模型拟合效果会好一些
N <- length( clusdata[,1])
result = rep(0,N/2)
for(k in 1:(N-1)){
km =kmeans(kdat,center=k)
result[k] =km$betweenss/km$totss
}
#取结果的两位小数,并画出聚类优度图
round(result,2)
plot(1:(N/2),xlab="number of cluster",ylab="betweenss/totss")
points(5,result[5],pch=16)
legend(5,result[5],paste("(5",sprintf("%.1f%",result[5]*100),")",sep=""))
##结果展示
clustertag <- data.frame(km$cluster)
colnames(clustertag) <- c("tags")
tyepdat <- cbind(dat,clustertag)
##统计标签的数目
tagfreq <- as.data.frame(table(tyepdat$tags) ,stringsAsFactors=F)
##筛选,选出特定标签的数据进行查看
subset(tyepdat,tags=="3",select=Channel:tags)
##按照聚类的标签进行排序
heatdat <- tyepdat[order(tyepdat$tags),]
##绘制K均值聚类热图
#install.packages("pheatmap")
library(pheatmap)
pheatmap(heatdat[,3:8], cluster_rows=F,cluster_cols=F,border_color=NA)
#install.packages("RColorBrewer")
library(RColorBrewer)##颜色扩展包,扩展聚类热图
pheatmap(heatdat[,3:8], cluster_rows=F,cluster_cols=F, col=brewer.pal(3,"Set3"),border_color=NA)
#对热图的解释
##参考Heatmap里kmeans聚类 和 纯Heatmap
##http://joseph.yy.blog.163.com/blog/static/50973959201285102114376/
##使用ggplot2绘制热图
#ggplot(heatdat,)+geom_tile()
#ggplot(heatdat,)+geom_raster()
#或者利用R语言heatmap.2函数进行聚类并画热图
#http://www.plob.org/article/10045.html
聚类结果解读与业务联系
用户的消费行为的图像进行贴标签
目标用户的群体分类
不同产品的价值组合
探测、发现 孤立点和异常点
备注信息
K-modes采用相关性
library(cluster) ##k-medoids
dist
pm <- pam(d,)
聚类本身就是一种模型技术,聚类得到的结果可以指导实践
聚类在数据分析前期过程的一种工具,用来进行数据摸底,数据清洗以及数据整理
不足是处,对初始值敏感