大数据部落数据科学与R语言数据-R语言-图表-决策-Linux-Python

Excel~R~Analysis

2017-02-02  本文已影响124人  胡阿白

目标:对给定的Excel数据表里的数据进行简单处理,解答相关问题。

源数据:朝阳医院2016年销售数据.xlsx

问题:根据表格数据得出

1.月均消费次数(注:同一天内,同一个人发生的所有消费算作一次消费 月消费次数=总消费次数/月数)

2.月均消费金额(注:同一天内,同一个人发生的所有消费算作一次消费 月消费金额=总消费金额/月数)

3.客单价(客单价=总消费金额/总消费次数)

4.消费趋势(周-消费金额曲线)

R的解决方案:

Step1:读取源数据

在RStudio中,可以采用多种方法导入源数据,在导入过程中,最值得注意的是“如何正确输入源数据路径”这一问题。我在具体实践中发现,由于原数据文件的命名为中文模式“朝阳医院2016年销售数据”,导入时系统总提示路径过长,于是将其重命名为长度较短的英文名称,例如“data”。果然顺利导入:

脚本中输入

Sell_data <- read_excel("C:/Users/Administrator/Desktop/data.xlsx")

View(Sell_data)

显示:

没有乱码,显示正常。

Step 2:数据预处理

数据预处理是一个重要的步骤,原始数据经过预处理(列名重命名、缺失数据剔除、日期处理、数据类型转换以及数据排序)才能更为有效地进行数据分析工作。

列名重命名   首先,为了编码的正常进行,对中文模式的项目名称进行英文重命名,即将表中的“购药时间、社保卡号、商品编码、商品名称、销售数量、应收金额以及实收金额”重命名为“"Time"、"Cardno"、DrugID"、"DrugName"、"SaleNumber"、"Virtualmoney"以及"Actualmoney"。

脚本编码如下:

#rename

names(Sell_data) <- c("Time","Cardno",

"DrugID","DrugName",

"SaleNumber","Virtualmoney",

"Actualmoney")

如图所示,命名成功:

缺失数据剔除   在药物销售表格中,最常见的缺失数据na(Not Available,不可用)是购药时间,合理运用逻辑运算符以及缺失数据函数na.omint()就可以删除所有含有缺失数据的行。

这里,我们选用“!”这一逻辑运算符,表示“非”的意思。再配合相应缺失值语句,写入脚本:

#删除缺失数据

Sell_data <- Sell_data[!is.na(Sell_data$Time),]

如图,6579行缺失数据被剔除成功

日期处理在“Time”项下,我们发现日期是以字符串的形式出现的(日期+星期),为了便于数据分析,需要将字符串拆分为相应的单列字符,这就需要R语言字符串处理包Stringr来帮忙。

输入脚本

#step3:处理日期

TimeSplit <- str_split_fixed(Sell_data$Time, " ",2)

Sell_data$Time <-TimeSplit[,1]

结果显示

这说明字符串处理包Stringr并未导入,此时,我尝试点击右下角目录框中R语言字符串处理包Stringr,

再运行,结果正常:

Time里的字符串被成功分成两列字符。

数据类型转换由于运算的需要,需将Time中的字符型向量由“character”转换为日期型Date"格式。

脚本输入:

#字符串转换为日期格式

Sell_data$Time <- as.Date(Sell_data$Time,

"%Y-%m-%d")

class(Sell_data$Time)

结果为:

同样地,像销售数量、应收金额以及实收金额("SaleNumber"、"Virtualmoney"以及"Actualmoney")这些数据也都可以转换为数值类型:

脚本输入:

#step4:数据类型转换

#销售数量

Sell_data$SaleNumber <- as.numeric(Sell_data$SaleNumber)

#应收金额(打折前的金额)

Sell_data$Virtualmoney <- as.numeric(Sell_data$Virtualmoney)

#实收金额(打折后的金额)

Sell_data$Actualmoney <- as.numeric(Sell_data$Actualmoney)

#查看类型

class(Sell_data$SaleNumber)

结果为:

转换成功!

数据排序最后,对销售数据按照时间升序进行排列

运行脚本后,结果如下:

排序没毛病~

总结:经过列名重命名、缺失数据剔除、日期处理、数据类型转换以及数据排序等五个步骤,数据处理完毕。

Step3:数据分析

有了符合要求的数据,才可以正常进行数据分析这个步骤。本次需要解答的问题是:

根据表格数据得出:

1.月均消费次数(注:同一天内,同一个人发生的所有消费算作一次消费 ;月消费次数=总消费次数/月数)

2.月均消费金额(注:同一天内,同一个人发生的所有消费算作一次消费; 月消费金额=总消费金额/月数)

3.客单价(客单价=总消费金额/总消费次数)

4.消费趋势(周-消费金额曲线)

答一:

思路:

根据公式:月消费次数=总消费次数/月数,所以只要获取总消费次数和月数即可。由于同一天内,同一个人发生的所有消费算作一次消费,所以得剔除其本人当天超过一次的消费记录。月数则根据30天为1个月进行粗略计算。

脚本:

# 业务指标1:月均消费次数

#-------------------------------------------------------

kpi1 <- Sell_data[!duplicated( Sell_data[,c("Time","Cardno")]),]#采用逻辑符号“!”以及"duplicated()"语句就能筛选出非重复的消费次数。

ConsumeNumber <- nrow(kpi1) #总消费次数相当于行数

运行得:

可得总消费次数为5394;

接着运行脚本,得出月数:

#月数根据时间范围计算

#最小的时间值

StartTime <- kpi1$Time[1]

#最大的时间值

EndTime <- kpi1$Time[nrow(kpi1)]

#天数

Day <- as.numeric(EndTime -StartTime)

#月数

Month <- Day %/% 30 #整除法得出月数为6

#月均消费次数

MonthConsume <- ConsumeNumber / Month

MonthConsume <- format(round(MonthConsume, 2), nsmall = 2)

最后得出月均消费次数为899次/月。

答二:

思路:

根据公式:月消费金额=总消费金额/月数,所以只要获取总消费金额和月数即可。本次计算中,总消费金额是实际消费金额的总和,月数则根据上次计算的6个月计算即可。

脚本:

TotalMoney <- sum(Sell_data$Actualmoney,na.rm=TRUE)#采用函数sum求和,并用na.rm剔除缺失值,最终为只对有效值进行求和。

MonthMoney <- TotalMoney / Month

最终求得月消费金额为50776.38元。

答三:

思路:根据公式,客单价=总消费金额/总消费次数

脚本:

# 业务指标3:客单价pct(per customer transaction)

pct <- TotalMoney / ConsumeNumber

pct <- format(round(pct, 2), nsmall = 2)#保留小数点后两位

结果得:

最终求得,客单价为56.48元/次

答四:

思路:绘制消费趋势曲线,可以以周为时间横轴,周累计消费金额为纵轴,绘制折线图的方式得出周-消费金额曲线。

脚本:

# 业务指标4:消费曲线图

#-------------------------------------------------------

week <- tapply(Sell_data$Actualmoney, format(Sell_data$Time, "%Y-%U"), sum)#据说利用tapply()函数进行数组分类,sum()函数分别求和。

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="red",

type="b")

axis(1.5,at=week$timeNumber, labels=week$time, cex.axis = 1.5)

!!!目前对于tapply()函数进行数组分类,sum()函数分别求和这串神奇的组合表示有点懵!!!是不是先由format(时间,“%Y-%U”)这个函数把时间按周排序,然后再采用sum()求和,最后以分组的形式呈现????

这个得自己去查询了!!!

最后画出了消费趋势图:

从图中,就可以轻松得知2016年朝阳医院每周的消费总额以及消费高低等信息,从而获取消费趋势。

总结:

本次通过导入源数据、数据预处理以及数据分析三个步骤,解决了4个实际问题。从一张2016年朝阳医院药房销售数据excel表格,得出月均消费次数(899次/月)、月均消费金额(50776.38元/月)、客单价(56.48元/次)、消费趋势图。这几个数据可以大致反应2016年朝阳医院药房每月的消费人数、消费金额、人均消费水平,还可以分析药品销售的淡季旺季。同理,这种数据分析方式可应用到其它商品当中。

本次数据分析为较为基础的excel数据处理分析,具体应用到的语句、函数、运算符如下:

路漫漫其修远兮,少年仍需加油啊!!!!

上一篇下一篇

猜你喜欢

热点阅读