当前位置: 首页 > article >正文

【数据挖掘】实验3:常用的数据管理

实验3:常用的数据管理

一:实验目的与要求

1:熟悉和掌握常用的数据管理方法,包括变量重命名、缺失值分析、数据排序、随机抽样、字符串处理、文本分词。

二:实验内容

【创建新变量】

方法1:

mydata <- iris[,1:2]

mydata$square <- mydata$Sepal.Length*mydata$Sepal.Width

方法2:

rm(list=ls())

mydata <- iris[,1:2]

attach(mydata)

mydata$square <- Sepal.Length*Sepal.Width

detach(mydata)

方法3:使用DT包(现在已经无法从CRAN下载)

rm(list=ls())

mydata <- iris[,1:2]

mydata <- transform(mydata,square=Sepal.Length*Sepal.Width)

library(DT)

datatable(mydata,rownames=F)

【变量重新编码】

Eg1:

rm(list = ls())

mydata <- mtcars

(mydata$am <- ifelse(mydata$am == 0,'automatic','manual'))

Eg2:将99岁这样的年龄重编码为缺失值

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)

leadership$age[leadership$age==99] <- NA

Eg3:将年龄离散化,将leadership中age(连续型变量)重新编码为类别型变量agecat

leadership$agecat[leadership$age > 66] <- "Elder"

leadership$agecat[leadership$age > 40 & leadership$age<66] <- "Middle Aged"

leadership$agecat[leadership$age >=18 & leadership$age<=40] <- "Young"

Eg4:同上,但使用within函数

leadership <- within(leadership, {agecat <- NA

  agecat[age > 75] <- 'Elder'

  agecat[age >-55 & age <=75] <- 'Middle Aged'

  agecat[age < 55] <- 'Young'})

【变量的重命名】

Eg1:

install.packages("reshape", repos = "http://cran.r-project.org")

w <- mtcars

library(reshape)

colnames(w)

w <- rename(w,c(mpg='Miles/(US) gallon',cy1='Number of Cylinders',disp='Displacement(cu.in)',hp='cross horsepower'))

colnames(w)

names(w)[5] <- 'Rear axle ratio'

names(w)

【数据排序】

Eg1:

x <- c(19, 84, 64, 2)

order(x)

rank(x)

sort(x)

【随机抽样】

Eg1:

install.packages("sampling",repos = "http://cran.r-project.org")

library(sampling)

LETTERS

(s<-srswor(10,26))

(obs<-((1:26)[s!=0]))

(sample<-LETTERS[obs])

Eg2:

library(sampling)

LETTERS

(s<-srswr(10,26))

(obs<-((1:26)[s!=0]))

(n<-s[s!=0])

(obs<-rep(obs,times=n))

(sample<-LETTERS[obs])

Eg3:

library(sampling)

LETTERS

sample(LETTERS,5,replace=TRUE)

sample(LETTERS,5,replace=FALSE)

Eg4:

library(sampling)

LETTERS

n<-sample(2,26,replace=T,prob=c(0.7,0.3))

n

(sample1 <- LETTERS[n==1])

(sample2 <- LETTERS[n==2])

【数学函数】

Eg1:

x <- c(1.12, -1.234, 3.1, 2.3, -4)

abs(x)

sqrt(25)

ceiling(x)

floor(x)

round(x,digits=1)

signif(x,digits=1)

【统计函数】

方法1:

mean(rivers)

median(rivers)

sd(rivers)

var(rivers)

quantile(rivers,c(.3,.84))

range(rivers)

min(rivers)

max(rivers)

【基本函数】

Eg1:鸢尾花数据集操作

head(iris)

colnames(iris)

names(iris)

sum(iris$Sepal.Length)

max(iris$Sepal.Length)

min(iris$Sepal.Length)

which.max(iris$Sepal.Length)

which.min(iris$Sepal.Length)

range(iris$Sepal.Length)

 

 

【高级函数】

Eg1:鸢尾花数据集操作

(x<-rnorm(1))

round(x,2)

index<-sample(1:150,30)

iris1<-iris$Sepal.Length[index]

sort(iris1)

order(iris1)

【概率函数】

Eg1:

data<-rnorm(20)

data

dnorm(data)

pnorm(data)

qnorm(0.9,mean=0,sd=1)

【字符串操作】

Eg1:字符串长度

data<-'R语言是一门艺术'

nchar(data)

Eg2:字符串合并

data1<-'用心去体会'

paste(data,data1,sep="")

 

Eg3:paste函数合并

paste("AB",1:5,sep="")

x<-list(a="1st",b="2nd",c="3rd")

y<-list(d=1,e=2)

paste(x,y,sep="-")

paste(x,y,sep="-",collapse=";")

paste(x,collapse=",")

Eg4:分割字符串

data<-c("2016年1月1日","2016年2月1日")

strsplit(data,"年")

strsplit(data,"年")[[1]][1]

Eg5:字符串替换

txt <- c("Whatever","is","worth","doing","is","worth","doing","well")

sub("[tr]","k",txt)

gsub("[tr]","k",txt)

Eg6:

(x<-'abadfa')

(substr(x,2,4))

substr(x,2,4)<-'kkk'

x

Eg7:

(x<-'abadfaf')

(x<-chartr('k','h',x))

(x<-chartr('faf','tBt',x))

(x<-chartr('faf','ttt',x))

(x<-chartr('af','Tt',x))

【jiebaR】

Eg1:(由于未找到data.txt文件,因此未对文件进行分词)

install.packages("jiebaR",repos = "http://cran.r-project.org")

library(jiebaR)

mixseg <- worker()

mpseg <- worker(type="mp")

hmmseg <- worker(type="hmm")

word = "人们都说桂林山水甲天下"

mixseg <= word

mpseg <= word

hmmseg <= word

segment(word,mixseg)

qseg <= word

qseg[word]

【apply家族】

Eg1:鸢尾花维度处理

apply(iris[,1:4],1,mean)

sapply(iris,mean)

lapply(iris[,1:4],mean)

Eg2:对列表x的每一个元素计算均值

x <- list(a=1:5,b=exp(0:3))

lapply(x,mean)

Eg3:计算矩阵x各行各列的均值

x<-matrix(1:20,ncol=4)

x

apply(x,1,mean)

apply(x,2,mean)

Eg4:列表list中的元素与数字1-3连接,并以矩阵和列表两种形式输出

list<-list(c("a","b","c"),c("A","B","C"))

list

sapply(list,paste,1:3,simplify=T)

sapply(list,paste,1:3,simplify=F)

【数据汇总统计】

Eg1:

attach(mtcars)

colnames(mtcars)

aggregate(mtcars[,c(1,3)],by=list(cyl,gear),FUN=mean)

【数据融合】

Eg1:melt函数融合数据框和数组

library(reshape)

head(airquality)

air_melt <- melt(airquality,id=c("Ozone","Month","Day"),na.rm=TRUE)

head(air_melt)

a <- array(c(1:11,NA),c(2,3,2))

a

a_melt <- melt(a,na.rm=TRUE,varnames=c("X","Y","Z"))

a_melt

【数据重塑】

Eg1:

install.packages("reshape2")

library(reshape2)

air_cast <- dcast(air_melt,Month~variable,fun.aggregate=mean)

air_cast

【粘贴数据结构】

Eg1:数据框加载

authors <- data.frame(

  surname=I(c('Tukey','venables','Tierney','Ripley','McNeil')),

  nationality=c('US','Australia','US',"UK",'Australia'),

  deceased=c('yes',rep('no',4))

)

books<-data.frame(

  name=I(c('Tukey','Venables','Tierney','Ripley','Ripley','McNeil','R core')),

  title=c('Exploratory Data Analysis',

          'Modern Applied statistics...',

          'LISP-STAT',

          'Spatial Statistics',

          'Stochastic Simulation',

          'Interactive Data Analysis',

          'An Introduction to R'),

  other.author = c(NA,'Ripley',NA,NA,NA,NA,'Venables & Smi')

)

Eg2:merge函数

(m1<-merge(authors,books,by.x='surname',by.y='name',all=F))

merge(authors,books,by.x='surname',by.y='name',all=T)

【转换函数】

Eg1:transform函数

head(airquality)

head(transform(airquality,Ozone=-Ozone))

head(transform(airquality,new=-Ozone))

【while循环语句】

Eg1:

pv <- c(1,1,2,3,1,1,15,7,18)

i<-1

result<-""

length(pv)

while(i<=length(pv)){

  if(pv[i]<=5){

    result[i] <- "初级用户"

  }else if(pv[i]<=15){

    result[i] <- "中级用户"

  }else{

    result[i] <- "高级用户"

  }

  i <- i+1

}

result

【for循环】

Eg1:不知道循环次数

pv <- c(1,1,2,3,1,1,15,7,18,1,1,2,3,1,1)

result<-""

m<-1

for(i in pv){

  if(i<=5){

    result[m]<-"初级用户";

  }else if(i<=15){

    result[m]<-"中级用户";

  }else{

    result[m]<-"高级用户";

  }

  m<-m+1

}

result

Eg2:知道循环次数

pv <- c(1,1,2,3,1,1,15,7,18,1,1,2,3,1,1)

result<-""

for(i in 1:length(pv)){

  if(pv[i]<=5){

    result[i]<-"初级用户";

  }else if(pv[i]<=15){

    result[i]<-"中级用户";

  }else{

    result[i]<-"高级用户";

  }

}

result

【repeat-break循环】

Eg1:

pv <- c(1,1,2,3,1,1,15,7,18)

i<-1

result<-""

repeat{

  if(i>length(pv)){

    break

  }

  if(pv[i]<=5){

    result[i]<-"初级用户"

  }else if(pv[i]<=15){

    result[i]<-"中级用户"

  }else{

    result[i]<-"高级用户"

  }

  i<-i+1

}

result

【自定义函数】

Eg1:自定义一个求两数之和的函数

s <- function(x,y){

  a<-x+y

  return(a)

}

s(2,3)

三:课堂练习

【练习1】PPT-05第27页

案例1:

scale(cars,center=T,scale=F) # centrialize

scale(cars,center=T,scale=T) # standarlize

diff(cars[,1]) # differentiate

案例2:

date <- c("2016-01-27","2016-02-27")

difftime(date[2],date[1],units="days")

difftime(date[2],date[1],units="weeks")

【练习2】PPT-05第27页

案例1:subset函数选定特定行或子集

subset(airquality, Temp > 80, select = c(Ozone, Temp))

案例2:

subset(airquality, Day == 1, select=-Temp)

案例3:

subset(airquality, select = Ozone:Wind)

详细结果如下表所示

    Ozone Solar.R Wind

1      41     190  7.4

2      36     118  8.0

3      12     149 12.6

4      18     313 11.5

5      NA      NA 14.3

6      28      NA 14.9

7      23     299  8.6

8      19      99 13.8

9       8      19 20.1

10     NA     194  8.6

11      7      NA  6.9

12     16     256  9.7

13     11     290  9.2

14     14     274 10.9

15     18      65 13.2

16     14     334 11.5

17     34     307 12.0

18      6      78 18.4

19     30     322 11.5

20     11      44  9.7

21      1       8  9.7

22     11     320 16.6

23      4      25  9.7

24     32      92 12.0

25     NA      66 16.6

26     NA     266 14.9

27     NA      NA  8.0

28     23      13 12.0

29     45     252 14.9

30    115     223  5.7

31     37     279  7.4

32     NA     286  8.6

33     NA     287  9.7

34     NA     242 16.1

35     NA     186  9.2

36     NA     220  8.6

37     NA     264 14.3

38     29     127  9.7

39     NA     273  6.9

40     71     291 13.8

41     39     323 11.5

42     NA     259 10.9

43     NA     250  9.2

44     23     148  8.0

45     NA     332 13.8

46     NA     322 11.5

47     21     191 14.9

48     37     284 20.7

49     20      37  9.2

50     12     120 11.5

51     13     137 10.3

52     NA     150  6.3

53     NA      59  1.7

54     NA      91  4.6

55     NA     250  6.3

56     NA     135  8.0

57     NA     127  8.0

58     NA      47 10.3

59     NA      98 11.5

60     NA      31 14.9

61     NA     138  8.0

62    135     269  4.1

63     49     248  9.2

64     32     236  9.2

65     NA     101 10.9

66     64     175  4.6

67     40     314 10.9

68     77     276  5.1

69     97     267  6.3

70     97     272  5.7

71     85     175  7.4

72     NA     139  8.6

73     10     264 14.3

74     27     175 14.9

75     NA     291 14.9

76      7      48 14.3

77     48     260  6.9

78     35     274 10.3

79     61     285  6.3

80     79     187  5.1

81     63     220 11.5

82     16       7  6.9

83     NA     258  9.7

84     NA     295 11.5

85     80     294  8.6

86    108     223  8.0

87     20      81  8.6

88     52      82 12.0

89     82     213  7.4

90     50     275  7.4

91     64     253  7.4

92     59     254  9.2

93     39      83  6.9

94      9      24 13.8

95     16      77  7.4

96     78      NA  6.9

97     35      NA  7.4

98     66      NA  4.6

99    122     255  4.0

100    89     229 10.3

101   110     207  8.0

102    NA     222  8.6

103    NA     137 11.5

104    44     192 11.5

105    28     273 11.5

106    65     157  9.7

107    NA      64 11.5

108    22      71 10.3

109    59      51  6.3

110    23     115  7.4

111    31     244 10.9

112    44     190 10.3

113    21     259 15.5

114     9      36 14.3

115    NA     255 12.6

116    45     212  9.7

117   168     238  3.4

118    73     215  8.0

119    NA     153  5.7

120    76     203  9.7

121   118     225  2.3

122    84     237  6.3

123    85     188  6.3

124    96     167  6.9

125    78     197  5.1

126    73     183  2.8

127    91     189  4.6

128    47      95  7.4

129    32      92 15.5

130    20     252 10.9

131    23     220 10.3

132    21     230 10.9

133    24     259  9.7

134    44     236 14.9

135    21     259 15.5

136    28     238  6.3

137     9      24 10.9

138    13     112 11.5

139    46     237  6.9

140    18     224 13.8

141    13      27 10.3

142    24     238 10.3

143    16     201  8.0

144    13     238 12.6

145    23      14  9.2

146    36     139 10.3

147     7      49 10.3

148    14      20 16.6

149    30     193  6.9

150    NA     145 13.2

151    14     191 14.3

152    18     131  8.0

153    20     223 11.5

【练习3】PPT-05第37页

案例1:求给定向量中的偶数个数

Num <- function(x){

  k=0

  stopifnot(is.numeric(x))

  for(i in x){

    if(i %% 2==0){

      k=k+1

    }

  }

  return(k)

}

Num(1:9)

【练习4】PPT-05第39页

案例1:自编函数计算标准差代码

BZC <- function(x){

  stopifnot(is.numeric(x))

  stopifnot(length(x)>1)

  avg<-mean(x)

  sum=0

  for(i in x){

    sum=sum+(i-avg)**2

  }

  return(sqrt(sum/length(x)))

}

BZC(c(1:5))

函数设计流程:

四:实验知识点总结

0:PPT-05上第29页中【na.rm=FALSE】的作用是——保留数据集中的缺失值,并尝试计算包含这些缺失值的统计量。当na.rm=TRUE时,函数会在计算统计量之前从数据集中删除所有的缺失值。

1:在变量的重命名中,rename函数可修改数据库和列表(不改变原数据集中的变量名),不能修改矩阵;names函数可修改数据库和列表(改变原数据集中的变量名),不能修改矩阵;colnames函数和rownames函数可修改矩阵和数据库的行名和列名。


2:数据排序函数的区别。

3:随机抽样函数的区别。

4:常用的数学函数。

5:常用的统计函数。

6:常用的高级数学函数。

 7:apply家族的使用方法。

8:函数体的组成部分。

五:遇到的问题和解决方法

问题&解决1:reshape2和reshape不是一个依赖包,只载入reshape包而不载入reshape2包,无法调用reshape2中的封装功能。因此,需要看清楚封装功能所来源的依赖包是哪一个,再进行调用。

问题&解决2:如果当前使用的镜像源太卡,会导致install.packages()失败。此时需要使用【chooseCRANmirror()】,并选择新的镜像源,然后再进行依赖包的安装和载入。或者通过例如【options(repos = c(CRAN = "https://cloud.r-project.org/"))】的方式更换。

问题&解决3:PPT中的思考题通过以下网页进行学习。

R语言数据框中的缺失值_na.rm=true什么意思-CSDN博客

https://www.cnblogs.com/chenwenyan/p/16384901.html


http://www.kler.cn/a/273429.html

相关文章:

  • Optimizing Medical Image Segmentation with Advanced Decoder
  • java、excel表格合并、指定单元格查找、合并文件夹
  • 【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式
  • BFV/BGV全同态加密方案浅析
  • 电子电气架构 --- 车载诊断的快速入门
  • Android:ViewPaper动态添加移除第一页
  • 【Docker】常用命令 docker build
  • 还原wps纯粹的编辑功能
  • VSCode下使用github初步
  • java的成员变量和局部变量
  • 前端面试拼图-实践经验
  • 基础:TCP三次握手做了什么,为什么要握手?
  • 【DataWhale学习笔记-蝴蝶书共读】大语言模型背后
  • CTF题型 Http请求走私总结Burp靶场例题
  • EI Scopus检索 | 第二届大数据、物联网与云计算国际会议(ICBICC 2024) |
  • 苍穹外卖-day09:用户端历史订单模块(理解业务逻辑),商家端订单管理模块(理解业务逻辑),校验收货地址是否超出配送范围(相关API)
  • springboot280基于WEB的旅游推荐系统设计与实现
  • 环境变量和Bash内置命令
  • android 顺滑滑动嵌套布局
  • Mac玩《幻兽帕鲁》为什么打不开D3DMetal?d3d错误怎么办 d3dxl error
  • 基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类
  • mac清除dns缓存指令 mac清除缓存怎么清理
  • 复制word文档,合并word文档
  • 【vscode】vscode重命名变量后多了很多空白行
  • 计算地球圆盘负荷产生的位移
  • Ubuntu 搭建gitlab服务器,及使用repo管理