绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
走进R语言的世界——简单数据处理
2020-06-16 16:15:29

近期要连续出差,这几天加上周末除了整理出差资料就是在学习R语言,终于按期完成学习任务。前面、二章的学习可以算是入门和熟悉,这期简单数据处理则正式开始用R语言进行实战了。因此本关的笔记废话不叙,直奔主题。

1、书本基本数据管理实操练习

(1)生成一个数据框示例

manager <- c(1,2,3,4,5)
date <- c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
country <- c("US","US","UK","UK","UK")
gender <- c("M","F","F","M","F")
age <- c(32,45,25,39,99)
q1 <- c(5,3,3,3,2)
q2 <- c(4,5,5,3,2)
q3 <- c(5,2,5,4,1)
q4 <- c(5,5,5,NA,2)
q5 <- c(5,5,2,NA,1)
leadership <- data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE)

(2)创建新变量的3种方法

#种方法
mydata <- data.frame(x1 = c(2,2,6,4),x2=c(3,4,2,8))
mydata$sumx <- mydata$x1 + mydata$x2
mydata$meanx <- (mydata$x1 + mydata$x2)/2
#第二种方法
attach(mydata)
mydata$sumx <- x1 + x2
mydata$meanx <- (x1 + x2)/2
detach(mydata)
#第三种方法
mydata <- transform(mydata,sumx=x1 + x2,meanx=(x1 + x2)/2)

(3)变量重编码的2种方法

#变量的重编码(1)
leadership$age[leadership$age == 99] <- NA
leadership$agecat[leadership$age > 75] <- "Elder"
leadership$agecat[leadership$age >= 55 & leadership$age <= 75] <- "Middle Aged"
leadership$agecat[leadership$age < 55] <- "Young"
#变量的重编码的紧凑写法(2)
leadership <- within(leadership,{
                      agecat <-NA
                      agecat[age > 75]                <- "Elder"
                      agecat[age >=55 & age <=75]     <- "Middle Aged"
                      agecat[age < 55]                <- "Young" })

(4)变量重命名的3种方法

#变量的重命名(1)
fix(leadership)
#变量的重命名(2)
names((leadership))
names(leadership)[2] <- "testdate"
leadership
#变量的重命名(3)
install.packages("plyr")
library(plyr)
leadership <- rename(leadership,
                     c(manager="managerID",date="testdate"))

(5)缺失值的检测和排除

#缺失值的检测
is.na(leadership[,6:10])
#在分析中排除缺失值
leadership
newdata <- na.omit(leadership)

(6)日期格式转化

#日期格式转化
myformat <- "%m/%d/%y"
leadership$testdate <- as.Date(leadership$testdate,myformat)
leadership

(7)数据集的选入和剔除

#数据的升序和降序排序
newdate2 <- leadership[order(leadership$age),]
newdate2
newdata3 <- leadership[order(-age),]
newdata3
#数据集中取子集
myvars <- c("q1","q2","q3","q4","q5")
newdata4 <- leadership[myvars]
newdata4
#剔除数据集中的部分变量
myvars1 <- names(leadership) %in% c("q3","q4")
newdata1 <- leadership[!myvars1]
newdata5 <- leadership[c(-8,-9)]  #知道被剔除的变量是第几列情况下
newdata5

(8)图形初阶实践

dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <- c(15,18,25,31,40)
#直接键入值修改图形绘制参数
plot(dose,drugA,type="b",lty=3,lwd=3,pch=15,cex=2)
#使用plot()和par()组合函数修改图形参数
plot(dose,drugA,type = "b")
opar <- par(no.readonly = TRUE)
par(lty=2,pch=17)
plot(dose,drugA,type="b")
par(opar)
#灰度颜色图形绘制
n <- 10
mycolors <- rainbow(n)
pie(rep(1,n),labels=mycolors,col=mycolors)
mygrays <- gray(0:n/n)
pie(rep(1,n),labels=mygrays,col=mygrays)

2、朝阳医院Excels数据实践练习

(1)Excels数据的导入

#读入Excels数据
install.packages("openxlsx")
library(openxlsx)
readFilepath <- "G:/大数据作业实践和有用资料/第三关作业实践/课件源代码和数据/朝阳医院2016年销售数据.xlsx"
excelData <- read.xlsx(readFilepath,1)

(2)数据的预处理

##………………………………………………………………………………数据预处理阶段
#列名重命名
names(excelData) <- c("time","cardno","drugld","drugName","saleNumber","virtualmoney","actualmoney")
excelData1 <- excelData[!is.na(excelData$time),]

#安装stringr包并对time列截取出年月日部分
install.packages("stringr")
library(stringr)
timesplit <-str_split_fixed(excelData1$time," ",n=2)
excelData1$time <- timesplit[,1]

#转化成日期数值类型
fix(excelData1)        #查看导入后的excelData1中数据存储类型
excelData1$time <- as.Date(excelData1$time,"%Y-%m-%d")
class(excelData1$time)
excelData1$saleNumber     <- as.numeric(excelData1$saleNumber)
excelData1$virtualmoney   <- as.numeric(excelData1$virtualmoney)
excelData1$actualmoney    <- as.numeric(excelData1$actualmoney)

#按销售时间进行排序
excelData1 <- excelData1[order(excelData1$time,decreasing = FALSE),]

(3)月均消费次数统计

###月均消费次数统计——————项任务
kpi1 <- excelData1[!duplicated(excelData1[,c("time","cardno")]),]
consumeNumber <- nrow(kpi1)
consumeNumber
startTime  <-  kpi1$time[1]
endTime    <-  kpi1$time[nrow(kpi1)]
day        <-  endTime - startTime
class(day)
day        <- as.numeric(day)
month      <-  day %/% 30
monthConsume  <- consumeNumber %/% month
monthConsume

(4)月均消费金额计算

###月均消费金额计算——————第二项任务
totalMoney   <- sum(excelData1$actualmoney,na.rm = TRUE)
monthMoney   <- totalMoney / month
monthMoney

(5)客单价统计

###客单价----------——————第三项任务
pct  <- totalMoney /consumeNumber
pct  <- round(pct,2)
pct

(6)消费趋势图形绘制和终趋势图

###消费趋势--------——————第四项任务
week <- tapply(excelData1$actualmoney,
               format(excelData1$time,"%Y-%U"),
               sum)
week <- as.data.frame.table(week)
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$times,cex.axis=1.5)

3、几点心得和体会

(1)学习时将遇到函数列表统计,后期再用到某函数时直接从列表中翻看其用法和功能,省去拿书翻找的时间,方便高效。

(2)代码的目的是实现终想法,但写法可以是不拘一格、风格迥异的,发现这也是学编程的一大乐趣。

(3)函数的熟练应用和代码编写细节(如“[]”的应用)仍需边实践边加强巩固。

(4)有些函数功能无法使用,首先要检查其功能支持包是否安装,再查看哪些地方出错。

按照猴子老师的思路和给出的函数,照猫画虎的成功运行出结果,可见自己要想独立解决问题还是“路漫漫其修远兮”。但回看身后,出发的起点已经渐渐模糊,已经在漫漫的征途之中了,在自我成长的路上唯有快马加鞭,奋力向目标奔驰了。

这关学习很辛苦,自己给自己兑现奖励了。^_^ ^_^ ^_^

分享好友

分享这个小栈给你的朋友们,一起进步吧。

R语言
创建时间:2020-06-15 11:46:51
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的工具。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~