朝阳医院销售趋势数据分析
一、分析目的
根据朝阳医院2016年销售数据.xlsx分析月均消费次数,月均消费金额,客单价,消费趋势。
朝阳医院2016年销售数据.xlsx部分内容如下:
读入R语言:
> head(x)
购药时间 社保卡号 商品编码 商品名称
1 2016-01-01 星期五 1616528 236701 三九感冒灵
2 2016-01-02 星期六 1616528 236701 三九感冒灵
3 2016-01-06 星期三 10070343428 236701 三九感冒灵
4 2016-01-11 星期一 13389528 236701 三九感冒灵
5 2016-01-15 星期五 101554328 236701 三九感冒灵
6 2016-01-20 星期三 13389528 236701 三九感冒灵
销售数量 应收金额 实收金额
1 7 196 182.00
2 3 84 84.00
3 3 84 73.92
4 1 28 28.00
5 8 224 208.00
6 1 28 28.00
二、数据预处理
1、删除缺失值:
> x <- x[!is.na(x$购药时间),]
> md.pattern(x)
购药时间 社保卡号 商品编码 商品名称 销售数量
[1,] 1 1 1 1 1
[2,] 0 0 0 0 0
应收金额 实收金额
[1,] 1 1 0
[2,] 0 0 0
2、日期处理:
> t <- str_split_fixed(x$购药时间," ",n=2)
> x$购药时间 <- t[,1]
> x$购药时间 <- as.Date(x$购药时间,"%Y-%m-%d")
> head(x$购药时间)
[1] "2016-01-01" "2016-01-02" "2016-01-06"
[4] "2016-01-11" "2016-01-15" "2016-01-20"
3、数据类型转换:
> x$销售数量 <- as.numeric(x$销售数量)
Warning messages:
1: In grepl("|||", what, fixed = TRUE) :
input string 1 is invalid in this locale
2: In grepl("|||", what, fixed = TRUE) :
input string 1 is invalid in this locale
> x$应收金额 <- as.numeric(x$应收金额)
> x$实收金额 <- as.numeric(x$实收金额)
> head(x)
购药时间 社保卡号 商品编码 商品名称 销售数量
1 2016-01-01 1616528 236701 三九感冒灵 7
2 2016-01-02 1616528 236701 三九感冒灵 3
3 2016-01-06 10070343428 236701 三九感冒灵 3
4 2016-01-11 13389528 236701 三九感冒灵 1
5 2016-01-15 101554328 236701 三九感冒灵 8
6 2016-01-20 13389528 236701 三九感冒灵 1
应收金额 实收金额
1 196 182.00
2 84 84.00
3 84 73.92
4 28 28.00
5 224 208.00
6 28 28.00
4、数据排序:
> x <- x[order(x$购药时间,decreasing=FALSE),]
> head(x)
购药时间 社保卡号 商品编码
1 2016-01-01 1616528 236701
265 2016-01-01 101470528 236709
399 2016-01-01 10072612028 2367011
400 2016-01-01 10074599128 2367011
894 2016-01-01 11743428 861405
895 2016-01-01 13331728 861405
商品名称 销售数量 应收金额
1 三九感冒灵 7 196.0
265 心痛定 4 179.2
399 开博通 1 28.0
400 开博通 5 140.0
894 苯磺酸氨氯地平片(络活喜) 1 34.5
895 苯磺酸氨氯地平片(络活喜) 2 69.0
实收金额
1 182.0
265 159.2
399 25.0
400 125.0
894 31.0
895 62.0
三、数据分析
业务指标1:月均消费次数
月消费次数=消费的总次数/月数 PS:同一天同一个人购买所有消费次数计作一次消费,以社保卡号和消费时间作为切入点。
> xf <- x[!duplicated(x[,c("购药时间","社保卡号")]),]
> zxf <- nrow(xf)
> xs <- xf$购药时间[1]
> ds <- xf$购药时间[nrow(xf)]
> ts <- as.numeric(ds - xs)
> yf <- ts %/% 30
> yf
[1] 6
> yjxf <- zxf / yf
> yjxf <- format(round(yjxf,2),nsmall = 2)
> yjxf
[1] "899.67"
>
月均消费=899.67
业务指标2:月均消费金额
月均消费金额=总消费金额/月份数
> zxfe <- sum(x$实收金额,na.rm =TRUE)
> yjxfe <- zxfe / yf
> zxfe
[1] 304630.3
> yjxfe
[1] 50771.71
总消费额=304630.3
月均消费额= 50771.71
业务指标3:客单价 PCT
客单价=总消费金额/总消费次数
> pct <- zxfe /zxf
> pct <- format(round(pct,2),nsmall = 2)
> pct
[1] "56.43"
>
客单价=56.43
业务指标4:消费曲线图
绘制图表,确立横坐标为周数,纵坐标为销售金额。
计算每周的销售金额。我们使用分组函数tapply()
> week <- tapply(x$实收金额,format(x$购药时间,"%Y-%U"),sum)
> week
2016-00 2016-01 2016-02 2016-03 2016-04 2016-05
1972.80 9679.64 10979.01 8719.73 15662.30 18758.82
2016-06 2016-07 2016-08 2016-09 2016-10 2016-11
3665.70 8441.51 8453.57 9988.98 8500.78 9869.16
2016-12 2016-13 2016-14 2016-15 2016-16 2016-17
10135.23 8426.46 11400.66 14408.21 10385.33 10265.98
2016-18 2016-19 2016-20 2016-21 2016-22 2016-23
9496.06 9728.40 11794.11 11497.20 9530.38 10806.71
2016-24 2016-25 2016-26 2016-27 2016-28 2016-29
11877.43 14077.38 10894.90 8386.97 13372.67 3454.18
将数据转换为数据框结构。
week <- as.data.frame.table(week)
对列名重命名
> names(week) <- c("time","actualmoney")
> week$time <- as.character(week$time)
> week$timeNumber <- c(1:nrow(week))
绘制图形
> plot(week$timeNumber,week$actualmoney,
+ xlab="时间(年份—第几周)",
+ ylab="消费金额",
+ xaxt="n",
+ main="2016年朝阳医院消费曲线",
+ col="blue",
+ type="b")
> axis(1,at=week$timeNumber,labels = week$time,cex.axis=1.5)