11月开始到同济大学适应环境了,提前搬砖啦。导师拟定的毕设题目是异常分析(anomaly detection),异常检测的具体概念参见百度百科:https://baike.baidu.com/item/%E5%BC%82%E5%B8%B8%E6%A3%80%E6%B5%8B/11069992?fr=aladdin
毕设的目标是做一个网页应用,能够实现异常检测,所运用的语言是R语言,R语言在做数据分析的时候经常使用;其语言特性与python相似,不用提前声明变量,不固定变量名与代数据类型的关系,可以说很简便了;代码风格与java等传统语音相似,使用大括号{}的方式形成一段代码。
大概用了三天时间学习了一下R以及RShiny,所用的平台是RStudio,R的版本为3.4.2,顺便做了些笔记,怕忘记,就传上来啦。
一、 六种数据类型
1. 向量
原子向量:逻辑(TRUE, FALSE),数字值(v <- 23.5),整数(v <- 2L),复数(v <- 2+5i),字符(v <- “TRUE”),原生(v <- charToRaw("Hello"),每个字符储存为一个RAW中的元素)
创建向量:apple <- c(‘red’,’’green’,”yellow”)
【其中的单引号双引号不影响赋值,各个元素的类型一致下标从1开始】
2. 矩阵mateix
创建二维矩形数据集:M = matrix( c('a','a','b','c','b','a'),nrow = 2, ncol = 3, byrow = TRUE, dimnames = list(rnames, cnames))
【每个元素数据类型相同,取行列值与具体值:X[ i , ]或X[ , j],X[i,j]】
3. 数组array
a <- array(c('green','yellow'),dim = c(3,3,2),dimname=list(……))
【多维的矩阵,array函数(data,dim,dimnames)】
4. 数据框,数据帧frame
BMI <- data.frame( gender =c("Male", "Male","Female"), height = c(152,171.5, 165), weight = c(81,93, 78), Age = c(42,38,26))
【储存一种类似EXCEL列表形式的数据,仅每列的数据属性相同,列之间可不相同,函数原型为简单列的罗列】
搜索:type1<-patientdata[patientdata$diabetes==”Type1”]【使用$取列名】
新增:patientdata<-rbind(patientdata , newdataframe)
5. 因子factor
变量可归结为名义型、有序型或连续型变量。
名义型变量是没有顺序之分的类别变量。糖尿病类型Diabetes(Type1、Type2)是名义型变量的一例。变量之间并没有先后顺序,只是表示不同类型。
有序型变量表示一种顺序关系。如上例中病情Status(poor、 improved、 excellent)是顺序型变量。病情为poor(较差)病人的状态不如improved(病情好转)的病人,但并不知道相差多少。
连续型变量可以呈现为某个范围内的任意值,并同时表示了顺序和数量。年龄Age就是一个连续型变量。
类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。类似于编程语言中的枚举类型。
factor(c(“type1”, “type2”, “type1”, “type1”))
【将名义或者有序型变量映射成整数并存储(从1开始),如果没有定义level,则其内部关联的整数由标签出现的顺序来定义】
factor(c(“type1”, “type2”, “type1”, “type1”), ordered = TRUE, levels= c(“pool”,” improved”,” excellent”))
【创建有序型变量,为factor()指定参数ordered=TRUE,通过指定levels选项来覆盖默认排序, “pool”,” improved”,”excellent”分别为1,2,3】
6. 列表list
list1 <- list (c(2,5,3), 21.3, sin);
【一些对象的有序组合,对象的类别可以不相同】
list1 <- list (obj1=c(2,5,3), obj2=21.3, sin);
list1[[2]]与list1[[“obj2”]]效果相同
【可以给一些对象命名,也可以不命名,对象使用[x]搜索,其中X是列表的下标,当对象被命名时,也可以使用名字来检索】
二、 向量元素
1. 一个元素为字符串,则其他类型的均转化为字符串
2. 访问向量元素
t <-c("Sun","Mon","Tue","Wed","Thurs","Fri","Sat")
u <- t[c(2,3,6)]
print(u)
[1] "Mon" "Tue" "Fri"
【[ ]括号用于指定索引,索引从位置1开始】
# Accessing vector elements using logical indexing.
v <- t[c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)]
print(v)
[1] "Sun" "Fri"
# Accessing vector elements using negative indexing.
x <- t[c(-2,-5)]
print(x)
[1] "Sun" "Tue" "Wed" "Fri""Sat"
# Accessing vector elements using 0/1 indexin0g.
y <- t[c(0,0,0,0,0,0,1)]
print(y)
[1] "Sun"
【在索引中赋予负值会从结果中删除该元素。TRUE,FALSE或0和1也可用于索引。】
3. 运算
若长度相同的两个向量,则按常规
若长度不同,则循环使用较短的向量
排序
sort(x)【默认升序排序,增加属性decreasing =TRUE,可以实现降序】
三、 列表list
1. 列表命名names(list_data)<-c(…)【为list_data列表的每一项命名】
2. 列表索引:使用[list_name$row_name]格式可以用名称索引
3. 增删:只可以在列表末尾增删;
改:可以更新任意位置的项目
4. 合并多个列表:newlist<-c(list1,list2)
5. 转换列表为向量unlist(alist),转换后的变量可以使用向量的运算。
6. listname[1]返回的是仅包含listname的第一个元素的列表
四、 矩阵
1. matrix(data, nrow, ncol, byrow,dimnames)
data - 是将要转为矩阵元素的输入向量。
nrow - 是要创建的行数。
ncol - 是要创建的列数。
byrow - 是一个逻辑线索。 如果为TRUE,则输入向量元素按行排列。
dimname - 是分配给行和列的名称
【eg:
rownames = c("row1", "row2","row3", "row4")
colnames = c("col1", "col2","col3")
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames =list(rownames, colnames))】
五、 数据帧
1. Str(data_frame)【查看数据帧结构】
2. Summary(data_frame)【查看数据帧摘要,谁是最大,谁中位数等等】
3. 从数据帧中提取数据
result <- data.frame(emp.data$emp_name,emp.data$salary)【提取所有行的某列】
result <- emp.data[1:2,]【提取某行与其所有列】
result <- emp.data[c(3,5),c(2,4)]【提取3,5行的2,4列】
4. 添加数据
emp.data$dept <-c("IT","Operations","IT","HR","Finance")【添加列:用新的列名添加一列数据】
emp.finaldata <- rbind(emp.data,emp.newdata)【把新行添加在末尾】