大型数据库分析-R语言

翻译 2015年11月18日 00:08:46

先看一下R能干什么

df <- mtcars
?mtcars

names(df)
head(df)
nrow(df)
summary(df)

hist(df$hp)
plot(df$hp,df$qsec)

cor(df$hp,df$qsec)
cor(df$cyl,df$qsec)

df$hpPerCyl <- df$hp/df$cyl

df[order(df$hpPerCyl),]
head(df[order(df$hpPerCyl),])

基础内容

如何给变量赋值

#either
x <- 1
#or
x = 1

注意不要忘了空白号,x<-1会被翻译成x <- 1而不是x < -1

R的基本原子类型(atomic types)

x <- TRUE   #class(x) is "logical"
x <- 1L     #class(x) is "integer"
x <- 1.5    #class(x) is "numeric"
x <- 1.5 + o.4i #class(x) is "complex"
x <- "Text" #class(x) is "character"

R中不含有标量(scalars),标量在这里被表示为长度为1的向量。
TRUE和FALSE可以简单的用T,F来代替
Strings即可以用双括号也可以用单括号阔起来

如何调用函数

ls      #is a function object
ls()    #is the object returned by calling the function

如何寻求帮助

#open help:
?ls

#search help for the specific topic:
??correlation

#other functions to analyze things
str(x)
summary(x)
class(x)
attributes(x)

R的控制流

#if:
if(STATEMENT)
    STATEMENT
else
    STATEMENT

#for loop:
for(name in vector)
    STATEMENT

#repeat
repeat
    STATEMENT #until 'break' is called

有趣的地方是:if结构可以被当成statement使用(只有if结构可以):

y <- if(x > 0) "y" else "no"

另外STATEMENT也可以被用{}包围起来的一组statement代替,这些语句可以全部扔在一行,也可以分成多行写

if({x <- mean(1:5); y <- mean(1:4); x<y}){
cat("evaluating the 'true' block \n")
"y"
}else {
cat("evaluating the 'false' block \n")
"n"
}

向量(Vectors)

如何生成向量

x <- c(1,2,3)   #c for "c"Kombine
x <- seq(1,3)   #to create a sequence, with possibility to
x <- seq(1,3,by=0.5)    #-define step size
x <- seq(1,3,len=10)    #-define numer of steps
x <- 1:3        #quick notation for integer sequences
x <- rep(0,10)  #repeat first "vector" 10 times
x <- numeric(10)#"numeric" vector of length 10
x[1] = 10
x[2] = 20
x[3] = 30

无论如何c()的结果都会被铺平所以试试这个吧:

x <- c(1,c(c(2,3),c(4,5,6)))

另外原子向量中是允许缺值的:

c(T,F,T,NA)
c(1:5,NA)
c("A",NA,"B","C",NA)

如果在一个Vector中混合不同类型的值会怎么样呢

因为vector中的值的类性应该一直保持一致,因此当上述情况发生时,R会强制改变类型。他们的优先顺序是:logical,integer,numeric,complex,character

#notice how the type changes when you remove elements from the end
x <- c(T,1L,1.0,1i,"text")
#notice that modifying elements can change the whole type
x <- rep(F,10)
x[6] = "text"

关于vector的一些重要函数

x <- runif(10)

length(x)
sum(x)

#statistics
mean(x)
median(x)
var(x)
sd(x)
quantile(x)

#range related
min(x)
max(x)
range(x)

#sorting related
sort(x)
rank(x)
order(x)

#vectorized functions
x + 1
x * 10
x < 0.5
(x < 0.2)|(x > 0.8)
sin(x)
exp(x)
round(x)

如果用不同长度的两个vector进行运算会怎么样

c(1,2,3,4) + c(1,2)
c(1,2,3,4) + c(1,2,3)
c(1,2,3,4) > 1

R采用的是循环的机制,但这也就要求长的vector的长度应该是短的vector的长度的整数倍

如何使用索引

x <- 1:10 * 10

#a positive index select an element
#a negative index omits an element
x[3]
x[-3]

#indices can again be vectors
x[c(1,3,5)]
x[3:5]
x[-c(1,3,5)]
x[-(3:5)]
#note:mixing positive and negative indices does not make sense

#indices can also be logical vectors
x[c(T,F,T,F,T,F,F,F,F,F)]
x[x == 10 | x == 30]

#indices can even be named
names(x) <- c("a","b","c","d","e","f","g","h","i","j")
x
x["c"]

矩阵和数组

R的vector其实就是其他语言中的array。他没有纬度的概念,只有长度。
R的array是特指多维的array。他有确定的纬度。但是本质上,他也是由vector实现的
R的matrix就是指一个二维的array

如何构建一个matrix

#generate without a vector
m <- matrix(nrow=2, ncol=3)
m[1,1] = 1
m[2,1] = 2
m[1,2] = 3
m[2,2] = 4
m[1,3] = 5
m[2,3] = 6

#generate from ONE vector
matrix(1:6, nrow=2, ncol=3)
matrix(1:6, nrow=2)
matrix(1:6, ncol=3)
matrix(1:6, byrow=TRUE, ncol=3)

#generate from multiple column/row vectors
rbind(c(1,3,5),c(2,4,6))
cbind(1:2,3:4,5:6)

因为matrix本质上就是一个拥有纬度的vector,因此也可以通过vector来构造matrix

m <- 1:12
dim(m) <- c(2,6)
dim(m) <- c(3,2,2)
c(is.vector(m),is.matrix(m),is.array(m))

matrix又是如何使用索引的呢

和vector一样

m[2,2]
m[1,1:3]
m[1,]
m[,2]

唯一不同的是现在要给元素起名的话,要加上纬度属性了

colnames(m) <- c("A","B","C")
rownames(m) <- c("o1","o2")
dimnames(m)

attibutes(m)

进行简单的线性运算

m <- cbind(1:2,3:4,5:6)

#multiply by vectors
m %*% c(1,2,4)
c(5,6) %*% m

第一个c三行一列,第二个c一行两列。真心不知道他在玩什么。以为他能自动转化吗,于是试了以下用c(1,2,3,4) %% m.结果却是出现错误,我还以为可以自动翻译成两行两列呢??然后又试了以下,5 %% m。结果还是错了

#multiply by matrices
m %*% matrix(runif(6),nrow=3)

#typical unary operators
m <- cbind(1:2,3:4)
t(m)        #transpose
diag(m)     #diagonal
solve(m)    #inverse
eigen(m)    #eigenvector/eigenvalues

#solving linear equations
solve(m,c(1,1)) #solve mx=c(1,1) for x

#misc matrix functions
dim(m)
nrow(m)
ncol(m)
rowSums(m)
colSums(m)
rowMeans(m)
colMeans(m)

其他数据类型

R语言中的list

#to construct a list
l <- list(name="Joe", unemployed=FALSE, salary=50000)

#naming the fields is optional 
l <- list("Joe",FALSE,50000)

#in fact, the mechanism to set the "names" is the same as for vectors
names(l) <- c("name", "unemployed", "salary")

#access single elements
l[[1]]
l$name
l["name]
l$sal #it is even allowed to abbreviate the names if it is unique

#generate a "sub" list
l[c(1,3)]
l[c("name","salary")]
l[1]

#"fields" can be added dynamically
l$department <- "IT"
l[["position"]] <- c("consultant","developer")
#note that this can create gaps and unnamed fields
l[[8]] <- TRUE

好像只有在$后面的才能以省略

R语言中的factor

f <- factor(c("A","B","C","A","B","A","A"), ordered = T)
attributes(f)
levels(f)
summary(f)

#to rename a category
levels(f)[1] <- "a"

#to convert to a numeric type
as.numeric(f)
#or:
attributes(f) <- NULL

R语言的data.frame

#create a data frame manually
df <- data.frame(x=runif(20), y=runif(20), type=as.factor(runif(20) > 0.5))
str(df)

#create a new "feature"
df$z <- df$x * df$y
df

#sort by a feature
permutation <- order(df$x)
df <- df[permutation,]

#remove features
toRemove <- c("x","y")
toRemoveLogical <- names(df) %in% toRemove
df <- df[,!toRemoveLogical]
df <- df[,!toRemoveLogical, drop= FALSE]
#better if only one feature is kept

#there is also the powerful "subset" function
#parameter "subset" works on rows
#parameter "subset" works on columns
subset(df, subset = x > 0.5, select = c(y,z))

什么是S3/S4 classes

不知??

Functions

如何定义一个function

nameOfMyFunction <- function(a,b){
return (a+b)
}

注意,return需要有圆括号,另外如果没有return的话,那就默认返回最后一个statement

如何定义函数的默认参数

myfunc <- function(range = 1 : myelin) range^2
myfunc(1:5)

mylen=10
myfunc()

mylen=5
myfunc()

rm(malen)
myfunc()

如何返回多于一个值

myfunc <- function(){
    list(result=42,additional="no errors",numberOfIterations=4)
}
ret <- myfunc()
ret$result
ret$numberOfIterations

补充

R里是否有预定义的变量

答案是有得如:
mtcars
Nile
iris
diamonds

如何连接两个strings

注意不能直接用“+”连接起来

paste("concatenate", "these", "strings")
paste("concatenate", "these", "strings", seq="")

也可以用paste0(…),他的效率比paste好一点点

如何标准输出

x <- 1:10
cat(sprintf("the sum of %d elements is %f\n", length(x), sum(x)))

如何生成随机数

hist(rnorm(1000))
hist(runif(1000))
hist(rbeta(1000,2,4))
hist(rbinom(1000,3,0.5))

Plotting

#histograms:
hist(rnom(1000))
#scatter plots:
plot(rnom(100), rnorm(100)
#line plots:
x <- seq(0, 2*pi, len=100)
plot(x, sin(x)^2+tan(x), type='l'

Numerical Measures

duration = faithful$eruptions
mean(duration)
median(duration)
quantile(duration)
quantile(duration,c(.37,.45,.99))
var(duration)   #variance

waiting = faithful$waiting
cov(duration,waiting)   #covariance

cor(duration, waiting)  #correlation coefficient
cov(duration, waiting)/(sd(duration)*sd(waiting))#standard deviations

概率分布

//待补

静态测试

//待补

R语言 基本数据分析

本文基于R语言进行基本数据统计分析,包括基本作图,线性拟合,逻辑回归,bootstrap采样和Anova方差分析的实现。不多说,直接上代码,代码中有注释。1. 基本作图(盒图,qq图)#basic p...
  • abcjennifer
  • abcjennifer
  • 2014年02月08日 23:52
  • 29174

R语言案例分析:财政收入的多元相关与回归分析

R语言案例分析:财政收入的多元相关与回归分析 数据集下载 (mvcase3.xls)中的表Case3。  y:财政收入  x1:国内生产总值  x2:能源消费总量  x3:从业人...
  • Lynette_bb
  • Lynette_bb
  • 2016年11月15日 19:01
  • 4898

R语言数据分析、展现与实例(05)

柱形图> library(RColorBrewer) > citysales barplot(as.matrix(citysales[,2:4]),beside = TRUE,legend.text...
  • u012150360
  • u012150360
  • 2017年03月17日 22:12
  • 721

用R语言进行关联分析

用R语言进行关联分析     关联是两个或多个变量取值之间存在的一类重要的可被发现的某种规律性。关联分析目的是寻找给定数据记录集中数据项之间隐藏的关联关系,描述数据之间的密切度。   几个基本概念 ...
  • kinglin_zy
  • kinglin_zy
  • 2015年04月16日 16:28
  • 6311

R语言-回归分析及实现

一、数据探索阶段 1、了解变量类型 做回归分析前,了解数据集是怎样的?那些是数值型变量,那些是分类变量,这一步是相当重要的。 r代码: > class(mydata$Middle_Price)...
  • qq_34941023
  • qq_34941023
  • 2016年06月29日 00:18
  • 3899

R语言主成分分析总结

简单总结R语言PCA相关函数 这里是数据集 year X1 X2 X3 1951 1 -2.7 -4.3 1952 -5.3 -5.9 -3.5 1...
  • Dylan_Frank
  • Dylan_Frank
  • 2017年07月10日 16:56
  • 1223

R语言︱情感分析—词典型代码实践(最基础)(一)

笔者寄语:词典型情感分析对词典要求极高,词典中的词语需要人工去选择,但是这样的选择会很有目标以及针对性。本文代码大多来源于《数据挖掘之道》的情感分析章节。本书中还提到了监督算法式的情感分析,可见博客:...
  • sinat_26917383
  • sinat_26917383
  • 2016年05月04日 12:29
  • 9605

R语言典型相关分析

参考资料《统计建模与R软件》典型相关的数学模型设 X=(X1,X2,…,Xp)T,Y=(Y1,Y2,…,Yq)TX=(X_1,X_2,\dots ,X_p)^T , Y=(Y_1,Y_2,\dots ...
  • Dylan_Frank
  • Dylan_Frank
  • 2017年07月11日 14:36
  • 737

R语言数据分析、展现与实例(06)

热力图> sales sales Month London NewYork Tokyo Paris 1 Jan 5064 3388 7074 8701 2 Feb ...
  • u012150360
  • u012150360
  • 2017年03月22日 23:09
  • 2504

R语言实用案例分析-1

在日常生活和实际应用当中,我们经常会用到统计方面的知识,比如求最大值,求平均值等等。R语言是一门统计学语言,他可以方便的完成统计相关的计算,下面我们就来看一个相关案例。 1. 背景 最近西安交大大...
  • tsyx163
  • tsyx163
  • 2017年01月23日 09:40
  • 1523
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大型数据库分析-R语言
举报原因:
原因补充:

(最多只允许输入30个字)