有句话说:所有光鲜亮丽的背后,都曾熬过无数个不为人知的黑夜——这句话可以套用在任何一件大大小小的劳动成果上!编程如是,此处学习的数据分析亦是!
数据分析,名为分析,但其实质对其分析前的数据进行预处理就得花上老半天,当然也不难理解,在当今这个信息丰富的世界中,数据的来源和格式多种多式,目前还没有哪种计算机语言一看到原始数据就能bala开始分析的。所以这第四章的内容讲的还是对数据的基本处理。
操纵日期和缺失值
熟悉数据类型的转换
变量的创建和重编码
数据集的排序、合并和取子集
选入和丢弃变量
从实例开始学习
数据:朝阳医院2016年销售数据.xlsx—该数据是取自于猴子老师讲座中的实例。
简单数据分析的思路与步骤
**一、读取Excel数据 **
二、对数据进行预处理
1,列名重命名
2,删除缺失值
3,处理日期
4,数据类型转换
5,数据排序
三、数据分析
1,分析月均消费次数。(月均消费次数=总消费次数/月份数 (注:同一天内,同一个人发生的所有消费算作一次消费。))
2,分析月均消费金额。(月均消费金额=总消费金额/月份数)
3,分析客单价。(客单价=每客总消费金额/每客总消费次数)
4,分析消费趋势。(以周-消费金额绘制曲线图)
具体来实际操作:
一、读取Excel数据
这里使用(openxlsx)包读取Excel数据,未安装此包前请先下载安装并载入方可使用。
读取数据后可通过函数 View()来预览
二、对数据进行预处理
1,列名重命名
2,删除缺失值
删除缺失值之前,先对缺失值做个基本的了解。
⑴,什么是缺失值,就是在任何规模的项目中,数据都可能由于未作答、设备故障或误编码数据的缘故而不完整,这些不完整的值通常称作缺失值。缺失值以符号 NA(Not Available)表示。
⑵,缺失值的应用
A, is.na()函数,用于识别包含缺失值的观测。
在处理缺失值时,注意两点:
1,缺失值是不可比较的。意味着无法使用运算符来检测数据中是否存在缺失值,只能使用处理缺失值的函数来识别,如 is.na()函数。
2,R 中缺失值不包括正负无穷数或者不可能出现的数值。正无穷用 Inf 标记,负无穷用 -Inf 标记,不可能的值 用 NaN 标记。识别这两种数据时需分别用到不同的函数 is.infinite() 或 is.nan() 。
B,排除数据中的缺失值
■ 在函数中添加参数 na.rm=TRUE
■ 通过函数 na.omit() 移除所有含有缺失值的行。
■通过逻辑运算符 !is.na--非is.na来处理缺失值
从数据框中选出销售时间不为空的数据。含有缺失值的第6579行被剔除。
在此,同时补充一下R中的逻辑运算符,如下,逻辑运算符表达式可返回TRUE或FALSE.
3,处理日期
在导入的Excel数据里,购药时间格式为字符串"2016-01-01 星期五",这样的值在R 中是没法进行统计的,需要拆分成我们想要的"2016-01-01",此时,需要用到函数
str_split_fixed()
日期值通常以字符串的形式输入R中的,需要用日期值进行数据分析时,往往需将其转化为数值型,函数 as.Data()用于执行这种转化。日期值的默认输入格式为yyyy-mm--dd。
R中给出了用于读入日期的适当格式,如下:
4,数据类型转换
判断数据的类型及将其转换为指定的类型,R中是有相应的函数来执行的
下面将是将导入的Excel表中的三组数据执行转化:
5,数据排序
在R中,使用order()函数给一个数据框进行排序。默认的排序是升序。在排序变量前边加一个减号(-)或者添加参数 decreasing=TRUE 即可得到降序的排序结果(=FALSE 表升序)。
三、数据分析
1,月均消费次数
月均消费次数=总消费次数/月份数
在这里,同一天内,同一个人发生的所有消费只算作一次消费。在获取总消费次数时,根据消费数据里购药时间、社保卡号先判断出哪些消费数据是重复的(购药时间和社保卡号两个值都相同的数据为重复,只能算作一次消费),这样重复的数据只取其一,可以用函数 !duplicated()来实现这样的操作。
获取总消费次数 "consumeNumber 5394"
获取总消费天数 "day 200"
计算月份数,这里只考虑一个月30天的情况。"month 6"
计算月均消费次数,四舍五入保留小数点后两位数。"monthconsume 899.00"
2,月均消费金额
月均消费金额=总消费金额/月份数,见下图:
3,客单量
客单价=每客总消费金额/每客总消费次数
4,消费趋势
在这里,将以单位周的消费金额绘制曲线图来展示未来的消费趋势。
首先,计算出每周消费金额,可以用函数 tapply()来实现。运用 tapply()函数计算后得到一个二维数组,一维是第几周的序号,二维是对应的这周的总消费金额:
将二维数组转化生成一个数据框:
其次,将转化后的数据框列名进行重命名,并获取周数:
最后,绘制曲线图
总算做了个了结,但还不熟练,还需练上起码三遍,加油!