美文网首页
小白学R—简单数据分析

小白学R—简单数据分析

作者: 奔跑的蜈蚣 | 来源:发表于2017-11-08 11:00 被阅读42次

    一、本关目标

    对“朝阳医院2016年销售数据.xlsx"中的数据进行处理和分析,并完成4个指标:1.月均消费次数;2.月均消费金额;3.客单价;4.消费趋势。

    二、数据清洗

    1、读取文件

    # 将Excel数据变为csv格式后导入
    exceldata<-read.table(file.choose(),header = TRUE,
                     sep=",",stringsAsFactors = FALSE)
    

    2、列重命名

    # 对列名进行重命名,可使用names()函数或者交互式编辑器fix()
    names(exceldata) <- c("time","cardno","drugID","drugName",
                          "saleNumber","virtualmoney","actualmoney")
    

    3、处理缺失值

    exceldata<- exceldata[!is.na(exceldata$time),]
    # na.omit()删除所有含缺失数据的行,适用于只有少数缺失值或缺失值集中在一小部分观测中
    

    4、处理日期值

    # 用stringr包中的字符串匹配函数:str_split_fixed()
    library(stringr)
    timesplit <- str_split_fixed(exceldata$time," ",n=2)
    exceldata$time <- timesplit[,1]
    

    str_split () 与str_split_fixed ():字符串分割函数

    str_split(string, pattern, n = Inf, simplify = FALSE)
    str_split_fixed(string, pattern, n)
    参数列表:
    string: 字符串,字符串向量。
    pattern: 匹配的字符
    n: 分割个数(最后一组不会被分割)。

    • str_split()与str_split_fixed()的区别在于前者返回列表格式,后者返回矩阵格式。
    • 当str_split()中simplify = TRUE时,返回矩阵格式。

    5、类型转换

    为了指标的计算,需要将数据进行类型转换:

    # 购药时间
    exceldata$time <- as.Date(exceldata$time,"%Y-%m-%d")
    # 销售数量
    exceldata$saleNumber <- as.numeric(exceldata$saleNumber)
    # 应收金额
    exceldata$virtualmoney <- as.numeric(exceldata$virtualmoney)
    # 实收金额
    exceldata$actualmoney <- as.numeric(exceldata$actualmoney)
    

    6、数据排序

    # 按照购药时间对数据进行升序排列
    exceldata <- exceldata[order(exceldata$time,decreasing = FALSE),]
    # order()默认decreasing = FALSE,升序排列
    

    三、指标计算

    1、月均销费次数=总消费次数(去重)/月份数

    # 总消费次数(去重):5398
    kpi1 <- exceldata[!duplicated(exceldata[,c(1,2)],fromLast = FALSE ),]
    consumeNumber <- nrow(kpi1)
    # duplicated()默认fromLast=FALSE,即若样本点重复出现,则取首次出现的;去掉重复样本值之后的行名
    

    数据去重参考: http://blog.csdn.net/qq_35242986/article/details/68927909

    # 月份数:6
    starttime <- kpi1$time[1]
    endtime <- kpi1$time[nrow(kpi1)]
    days <- endtime-starttime
    months <- as.numeric(days)%/%30
    # days为日期值,不能直接用除法,需要转换类型
    

    得到月均消费次数:899

    # 月均消费次数
    monthconsume <- consumeNumber/months
    

    2、月均销费金额=总消费金额/月份数

    # 总消费金额:304630.3
    totalmoney <- sum(exceldata$actualmoney,na.rm = TRUE)
    

    得到月份消费金额:50771.71

    monthmoney <- round(totalmoney/months,2)
    

    3、客单价=总消费金额/总消费次数(去重)

    # 客单价:56.43
    pct <- totalmoney/consumeNumber
    

    4、消费趋势

    # 使用分组计算函数tapply(),以周的形式对实收金额进行分组计算
    week <- tapply(exceldata$actualmoney,
                   format(as.Date(exceldata$time),"%Y-%W"),sum)
    

    %W从周一到周日计算,%U从周一到周六计算,貌似%W更符合中国人的统计习惯。
    关于更多日期格式,请参考:https://www.douban.com/note/347509632/

    # 把数组形式的week转换成数据框形式
    week <- as.data.frame.table(week)
    # 对数据框week的观测进行重命名
    names(week) <- c("time","actualmoney")
    # 转换变量类型
    week$time <- as.character(week$time)
    # 在week数据框中增加一列变量
    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)
    # 去除x轴上的刻度线
    # cex.axis 坐标轴刻度文字的缩放倍数
    

    R语言plot函数参数合集:http://www.cnblogs.com/wutongyuhou/p/5873056.html

    四、问题

    1 、对于基本的数据分析“套路”还不清楚,只是跟着操作。
    2、 对于很多函数以及里面的参数设置不熟悉,不清楚如何使用。
    跟着老师的操作进行了练习,其中出现了很多问题,大部分都能够自己解决。为了更清晰的理解和记忆,还需要找一些数据试着操作一下,发现问题,解决问题,才是学习的最佳途径。

    相关文章

      网友评论

          本文标题:小白学R—简单数据分析

          本文链接:https://www.haomeiwen.com/subject/adsemxtx.html