一、概述
中国白酒文化根深蒂固,白酒的地位更是不可撼动。但是对于经常饮酒的人来说,喝了大半辈子酒但却不知道整个白酒市场是怎样的。本文通过对天猫超市白酒数据的分析来帮助白酒消费者了解市面上什么样的酒销量高、什么时候买酒更优惠等有价值的信息。文章以市面上什么样的酒销量高为主线,再分别探究了20180227周期内行业大盘的表现以及浓香型的鼻祖--泸州老窖的现状。
二、数据准备
2.1数据介绍
白酒数据是来自天猫超市的白酒商品信息数据,去重之后共计8126个样本,10个特征。特征中的“商品名称”含有香型、度数、规格等信息。另外,其中有些酒的规格没有标注,影响后期的分析结果,于是我事先通过表格中对应商品链接获取到商品规格并手动补充到“商品名称”中。因此最终的数据分两份,原数据(Liquor原数据.xlsx)和补充后的数据(Liquor.xlsx),数据具体详情如下:
![](https://i-blog.csdnimg.cn/blog_migrate/ebd5952d26abb526b15c5a1b7c69dd88.png)
2.2数据预处理
首先加载所需要的包,同时导入数据删除“商品链接”列并修改列名
#加载所需包
library(data.table)
library(readxl)
library(tidyverse)
library(VIM)
library(ggplot2)
#加载数据
Liquor <- read_excel("******\\Liquor.xlsx",
col_types = c("text", rep("guess", 9))) %>%
unique() %>%
select(-商品链接)
#改名
colnames(Liquor) <- c("id", "product", "price", "sales_30", "ad_word",
"promotions", "comments", "date0", "brand")
查看数据缺失值情况
aggr(Liquor, prop = FALSE, numbers = TRUE)
![](https://i-blog.csdnimg.cn/blog_migrate/e26866a9dd8b4e2ab0d3ab19e0f6fec3.png)
图1显示price中有少量缺失值,经过查看后发现有2个且涉及到的样本并无特殊之处,因此我将这两个样本删除;ad_word、promotions、comments中缺失值较多,目前无需做插值或删除处理,保留缺失值,后续视分析情况而定。
删除那price的两个缺失值样本同时排除数据中的非酒类品牌:
Liquor_noNA <- Liquor %>%
filter(!is.na(price)) %>%
filter(!brand %in% c("樱花汇", "Union", "欧欣", "喜碧曼"))
由于product列中几乎是“3D泸州老窖龙香醇喜装33.9度 500mLX6浓香型整箱白酒”样式的字符串,所以需要对product列正则匹配提取出酒的浓度、香型以及酒的规格等信息:
amount <- data.frame(amount = str_extract_all(Liquor_noNA$product, regex("[0-9]+(m)?l+(\\s)?([0-9]+支)?([0-9]+瓶)?(x[0-9]+)?(\\*[0-9]+)?(×[0-9]+)?(\\*[0-9]+盒)?", ignore_case=TRUE), simplify = TRUE))
frag <- data.frame(frag = str_extract_all(Liquor_noNA$product, regex("(馥郁|酱|清|浓|米|凤|芝麻|豉|特|老白干|兼|其他)香(型)?"), simplify = TRUE))
degree <- data.frame(degree = str_extract_all(Liquor_noNA$product, regex("\\d{2}(\\.[0-9])?度"), simplify = TRUE))
Liquor_noNA_split <- cbind(Liquor_noNA, amount, frag, degree)
amount_1_final <- sub("ml", "", Liquor_noNA_split$amount.1, ignore.case = TRUE) %>%
sub("L", "000", ., ignore.case = TRUE) %>%
sub("X", "*", ., ignore.case = TRUE) %>%
sub("×", "*", ., ignore.case = TRUE) %>%
sub("盒", "", .) %>%
sub("支", "", .) %>%
sub("瓶", "", .) %>%
sub("\\s\\*", "*", .) %>%
sub("\\s$", "", .) %>%
sub("\\s", "*", .) %>%
lapply(., FUN = function(x) eval(parse(text = x))) %>%
as.character() %>% unlist() %>% as.integer() %>% data.frame(amount_1_final = .)
amount_1_final$amount_1_final[amount_1_final$amount_1_final %in% NA] <- 0
amount_2_final <- sub("ml", "", Liquor_noNA_split$amount.2, ignore.case = TRUE) %>%
sub("L", "000", ., ignore.case = TRUE) %>%
sub("X", "*", ., ignore.case = TRUE) %>%
sub("×", "*", ., ignore.case = TRUE) %>%
sub("盒", "", .) %>%
sub("支", "", .) %>%
sub("瓶", "", .) %>%
sub("\\s\\*", "*", .) %>%
sub("\\s$", "", .) %>%
sub("\\s", "*", .) %>%
lapply(., FUN = function(x) eval(parse(text = x))) %>%
as.character() %>% unlist() %>% as.integer() %>% data.frame(amount_2_final = .)
amount_2_final$amount_2_final[amount_2_final$amount_2_final %in% NA] <- 0
frag_1_final <- sub("香$", "香型", Liquor_noNA_split$frag.1, ignore.case = TRUE)
frag_2_final <- sub("香$", "香型", Liquor_noNA_split$frag.2, ignore.case = TRUE)
Liquor_noNA_split$degree.1[Liquor_noNA_split$degree.1 == ""] <- NA
Liquor_noNA_split$degree.2[Liquor_noNA_split$degree.2 ==""] <- NA
Liquor_noNA_split_num <- cbind(Liquor_noNA_split, amount_1_final, amount_2_final, frag_1_final) %>%
mutate(amount_aii = amount_1_final + amount_2_final,
price_per_L = price / amount_aii*1000) %>%
select(-c(amount.1, amount.2, frag.1, frag.2, degree.2, amount_1_final, amount_2_final))
经过以上所有数据预处理操作后衍生出4个新的特征:
degree.1:从product列中提取出的酒的度数。
frag_1_final:从product列中提取出的酒的香型。
amount_aii:从product列中提取出的酒的规格。
price_per_L:每升酒的价格,计算方式:price/amount_aii*1000。
三、销量高的酒具备的特征?什么阶段销量高?
首先,需要明确影响销量的因素,再通过分析销量与影响因素的关系进而得出结论。经过将