背景
双十一购物狂欢节现已成中国电子商务的年度盛典,随着电子商务平台的逐渐兴起,平台的竞争也越来越强,为了更好地提高平台和商家利润。伴随着网购规模的逐年增大,随之产生了大量的围绕平台和购物者的数据集,如果从这大量的数据中挖掘出有用的信息,这就需要用到数据分析技术了。分析出有用的数据事就可以区分无价值消费者、高价值消费者,从而针对不同价值的消费者制定优化的个性化服务方案,并制定相应的营销策略进行喜好推荐和促销,将有限的营销资源集中于高价值消费者,对不同的消费者提供个性化的服务,实现平台和商家的利润最大化目标。
原始数据
参考附件:data.csv
具体实验
导入数据
bf<-read.csv("E:/data.csv")
使用glimpse函数查看所有数据列:
可以看到,12个变量,共有537577条数据。这12个变量分别为:
- User_ID:购物者的编码
- Product_ID:产品编码
- Gender:购物者的性别
- Age:购物者的年龄
- Occupation:职业
- City_Category:购物者的居住地点
- Stay_In_Current_City_Years:在当前城市停留的年数
- Marital_Status:购物者的婚姻状况
- Product_Category_1:购买的产品类别
- Product_Category_2:产品可能属于其他类别
- Product_Category_3:产品可能属于其他类别
- Purchase:购买的金额
使用summary函数获取最小值、最大值、四分位数和均值等描述性统计量,结果运行情况如下:
购买次数最多产品分析
代码:
bf<-bf %>% select(-User_ID)
purpro_20<-bf %>% group_by(Product_ID) %>% count() %>% arrange(desc(n))
purpro_20[1:20,] %>% ggplot(aes(x=Product_ID,y=n,fill=Product_ID))+geom_point(color='red')+theme(axis.text.x = element_text(angle=45,vjust=0.5),legend.position = "none")
结果:
从上图我们可以得知,编码为P00265242的产品被购买的次数最多,其次,编码为P00025442,P00110742,P00112142的产品被购买的次数也较多,次数均在1500次以上,从编码来看并没有什么很显眼的数据特点。
消费最多的价格区间
代码:
bf %>% ggplot(aes(x=Purchase))+geom_histogram(fill="red")
结果:
从图上可知,消费最多的价格区间再8500左右,约有60000以上的消费次数。不存在购买频率十分显著的编码号,所以还需要进一步的挖掘。
产品类别信息统计
- 对不同性别绘制箱线图:
代码:
p1<-bf %>% ggplot(aes(x=Gender,y=Purchase))+geom_boxplot()
p1
结果:
对不同城市绘制箱线图:
代码:
p2<-bf %>% ggplot(aes(x=City_Category,y=Purchase))+geom_boxplot()
p2
结果:
- 对消费者的婚姻状况绘制箱线图,我们分为男女两个方面:
代码:
p3<-bf %>% ggplot(aes(x=as.factor(Marital_Status),y=Purchase,fill=Gender))+geom_boxplot()
p3
结果:
从上面的3个箱形图中我们可以看出,男人在购物上花的钱比女人多。无论是是否结婚还是来自于不同城市,而且Age,Stay_In_Current_City_Years这两个变量本来应该保存成数字变量但是原始数据是使用字符型变量,所以需要我们进行进一步的处理。
统计年龄和所在城市的居住年份总数
我们使用年龄范围的平均值来代表每个阶段,可以看到各个年龄段出现的次数。然后我们根据Stay_In_Current_City_Years来统计消费者在当前城市停留最多的年数。
代码:
根据结果,我们可以发现:中年人(35-55岁)的比例最多;年轻人支付较少;就城市停留年数的统计数据看,停留一年的占大多数。
产品类别信息统计
首先我们通过用 table() 函数统计因子各水平的出现次数。可以看到:
共有18种产品,每种产品出现的次数各不相同。
针对不同的产品,我们通过对购买产品的数量、性别对产品的影响、价格对产品的影响三方面对数据进行分析,结果如下:
- 消费者最喜欢的产品类别:
代码:
p1<-bf %>% group_by(Product_Category_1) %>% count() %>% ggplot(aes(x=reorder(Product_Category_1,n),y=n))+geom_col(aes(factor(Product_Category_1)))+labs(x="",y="",title="消费者最喜欢的产品类别")
p1
结果:
- 不同性别各产品类别的喜爱程度
代码:
p2<-bf %>% group_by(Gender,Product_Category_1) %>% count() %>% ggplot(aes(x=as.factor(Product_Category_1),y=n,fill=as.factor(Gender)))+geom_bar(stat="identity",position="dodge")+labs(x="",y="",fill="gender",title="不同性别各产品类别的喜爱程度")
p2
结果:
- 各类别平均消费价格
代码:
p3<-bf %>% ggplot(aes(x=reorder(as.factor(Product_Category_1),Purchase),y=Purchase))+geom_point()+ggtitle("各类别平均消费价格")
p3
结果:
通过图像我们可以看到,消费者最喜欢的产品前三分别是5、1、8,男性消费者明显比女性多。
性别统计
由于每行代表一个单独的事务,我们必须首先按User_ID对数据进行分组以删除重复项。我们选择用户编号和性别两项,按照用户编号进行分组,运用distinct()去除重复项。
代码:
bf2 <- read.csv("E:/data.csv")
bf2_gender <- bf2 %>%
select(User_ID, Gender) %>%
group_by(User_ID) %>%
distinct()
head(bf2_gender)
summary(bf2_gender$Gender)
options(scipen=10000) # To remove scientific numbering
gender_ch <- ggplot(data = bf2_gender) +
geom_bar(mapping = aes(x = Gender, y = ..count..)) +
labs(title = '性别分布')
gender_ch
结果:
可以看到,在本次数据中,男性购买人数比女性购买人数多。
性别相关平均支出金额
代码:
total_P <- bf2%>%
select(User_ID, Gender, Purchase) %>%
group_by(User_ID) %>%
arrange(User_ID) %>%
summarise(Total_P= sum(Purchase))
user_G <- bf2%>%
select(User_ID, Gender) %>%
group_by(User_ID) %>%
arrange(User_ID) %>%
distinct()
head(user_G)
head(total_P)
user_P_G<-full_join(total_P, user_G, by = "User_ID")
head(user_P_G)
avg_spending_G <- user_P_G %>%
group_by(Gender) %>%
summarize(Purchase = sum(as.numeric(Total_P)),
Count = n(),
Average = Purchase/Count)
head(avg_spending_G)
avg_gender <- ggplot(data =avg_spending_G) +
geom_bar(mapping = aes(x = Gender, y = Average, fill = Gender), stat = 'identity') +
labs(title = '不同性别的平均消费') +
scale_fill_brewer(palette = 'PuBuGn')
avg_gender
结果:
通过结果可以发现,即使女性购物者购买的商品少于男性,但他们的购买量几乎与男性购物者一样多。但是也要考虑规模因素,因为女性平均仍然比男性少花费25万。
畅销品
代码:
total_purchase= bf2 %>%
group_by(User_ID) %>%
summarise(Purchase_Amount= sum(Purchase))
top_sellers <- bf2 %>%
count(Product_ID, sort = TRUE)
best_spro<- bf2[bf2$Product_ID == 'P00265242', ]
gender_bs<- ggplot(data =best_spro) +
geom_bar(mapping = aes(x = Gender, y = ..count..)) +
labs(title = '消费者性别(畅销品)') +
scale_fill_brewer(palette = 'PuBuGn')
print(gender_bs)
结果:
我们可以看到此产品适用于Product_Category_1 = 5和Product_Category_2 = 8。另一个有趣的发现是,即使人们购买相同的产品,他们也支付不同的价格。这可能是由于各种双十一促销,折扣或优惠券的缘故。
消费者年龄
代码:
c_age <- bf2 %>%
select(User_ID, Age) %>%
distinct() %>%
count(Age)
c_age
c_age_dis<- ggplot(data = c_age) +
geom_bar(color = 'black', stat = 'identity', mapping = aes(x = Age, y = n, fill = Age)) +
labs(title = '消费者年龄分布') +
theme(axis.text.x = element_text(size = 10)) +
scale_fill_brewer(palette = 'Blues') +
theme(legend.position="none")
print(c_age_dis)
结果:
结论
总的来说,我们对“双十一”数据集的数据做了一些有见地的发现。看到客户如何分布在多个分类的结果中,如Gender,Age,Occupation等。我们还确定了“双十一”期间的顶级客户,找出了“畅销品”数据。此外,确定了有关“双十一”购物的各种指标,包括客户的平均支出金额和多个类别的总购买金额。
在我们的数据统计分析之后,进行了关联规则,并在“双十一”为店铺确定了一些关联规则。我们发现了多种情况,即购买某组物品的客户在给定一组输入的情况下可能购买另一项物品的可能性超过75%。另外我也进行了聚类分析,将样本聚为6类,查看了各类别的性别分布、平均消费分布情况等信息。