在上一篇文章里面,我们主要是用SparkR对电商数据进行一些统计分析,这次我们将对数据进行聚类分析。
数据预处理
读入数据:
df<-read.df("file:///home/baoyu/datas/JT_data.csv","csv",header="true") # local模式
createOrReplaceTempView(df,"df")
sparkR.session()
统计用户的搜索次数:
a=summarize(groupBy(df, df$ID), countid = n(df$ID))
head(arrange(a, desc(a$countid)))
发现两个异常用户ID,前两个ID的搜索记录远高于其他所有ID的记录,这里考虑将它们排除。
df=sql("select * from df where ID!='6BB61E3B7BCE0931DA574D19D1D82C88' and ID!='5C9C98B077C04DD7EE2E5E302C3AEA5C'")
createOrReplaceTempView(df,"df")
数据剩下3万多行,下面开始聚类。
对家居用品聚类
家居用品里面包括了洗衣机、电视机、冰箱、空调等诸多子目录,为了了解用户对这些商品门类的购买需求以及消费价格水平,我们对家居用品的子类按其搜索次数和搜索均价进行Kmeans聚类:
e=sql("select SUB_CATE,AVG(PRICE) as avgprice,COUNT(*) as count from df where MAIN_CATE='家居日用' group by SUB_CATE")
kmeansModel <- spark.kmeans(e, ~ avgprice + count,k = 4)
head(fitted(kmeansModel))
聚类结果说明:
黑 | 洗衣机,电视机,冰箱,空调 |
绿 | 冰柜,家庭影院,抽油烟机 |
红 | 床上用品,空气调节设备,取暖器,微波炉,餐厨用品,食品加工机,热水器,家具,电风扇,其他家居 |
蓝 | 其他小家电,洗化用品,杯壶,浴霸,数字机顶盒,装饰收藏,压力锅,手工工具,电锅,毯垫罩用品,生活推车,消毒柜,家纺布艺,剃须刀,其他厨卫电器,生活用纸,饮水机,other,电动牙刷,榨汁搅拌机,电饭煲,台灯,干衣机,居家清洁,电熨斗,插座,电烤箱,消毒杀虫,吸尘器,卫浴用品,播放机,音响器材,OTHER,电水壶,家庭保健,视频线材,保鲜用品,收纳用品,灶具,家庭娱乐,多士炉,居家小物,电磁炉,节能灯,雨具,电吹风 |
上图的聚类结果可以理解为: