一、数据科学
数据科学:计算和统计技术的综合应用,用于解决一些真实世界中的问题。
计算:获得结果
统计:分析和建模
真实世界:机器学习、AI
数据科学Data Science = 统计+数据处理+机器学习+科学探究+可视化+商业分析+大数据
数据科学:数据收集-提出初始问题-解决问题-阐释方案
数据科学不是统计学。
统计学:包括更多数学和理论领域的内容,偏向算法。
数据科学:更偏向实践应用。数据可视化、数据分析预测、图像处理、自然语言处理。
数学基础:概率论、统计学、线性代数。
R语言:开源免费、顶尖的统计+可视化、超过1W个支持packages、强大扩展功能可以自己修改代码块、跨平台运行、支持交互式、支持并行计算。
R语言是交互式命令,按行运行命令的。
R语言基于内存计算的数据分析语言,计算很快。
R不用声明变量的类型。
在输入命令时按上下键,可快速选择前面输入过的命令。
RStudio是R的IDE,即集成开发环境。
二、Rstudio介绍
RStudio介绍:
Console工作台
Workspace
新建:
1、R Script脚本
2、R notebook演示代码
3、R Markdown
4、Shiny Web App创建网站应用
5、Text File文本
6、C++ File
运行:Run,按行运行
导入数据:workspace中的import dataset,增加package可以导入更多类型数据
帮助:help(“函数名称”) 或者 help(函数名称) 或者 ?函数名称
三、快捷键操作
快捷键操作:
1、添加和取消代码注释【Ctrl+Shift+C】
2、入赋值符号【Alt + -】
3、块代码执行【Ctrl+Enter】
4、全部代码执行【Ctrl+Shift+Enter】
5、列模式操作【Alt+Shift+鼠标左键选择】
6、RStudio界面字体方法缩小【Ctrl 和 + -】
四、R代码常见命令
赋值:<-
查看变量个数和名称:ls()
清除变量:rm(变量名)
等价(赋值):=
关系运算符:==
输出:变量名 或者 print(变量名)
语法:
1、公式
例如 用求根公式求解
2、数据集调用
data()
3、语法
变量:对应于常量,用于存储临时数据,可被更改。每次使用数据时,通过变量名即可调用该数据。
变量/对象名称:易读、易理解。
命名力求简洁易懂,避免使用已存在的公式和变量名。
R语言区分大小写,因此大写Apple和小写apple代表不同变量。
R语言中命名时,变量和公式需使用小写字母,使用下划线在名称中分开词语,变量名需为名词,公式名需为动词。
在中缀操作符,例如= + - <- 两端加入Space空格,
方程调用时,使用同样规则。
始终在逗号,后面加一个空格。
一行中键入多个空格键,也是可以的。此时空格用于代码格式排版/对齐
花括号:{}
左花括号{不可以自成一行,它下面还需要跟着一个新行
右花括号} 独立一行作为结尾,后面跟有else除外,则可以合并为一行
当使用代码缩进时,双击两次空格键,不要使用tab或者tab+Space
五、包Packages
包Packages
安装包:导航栏-tools-install packages
R语言中的函数、方法、数据集以包的形式实现,包类似于软件中的插件概念,用来实现某一功能或算法。
#安装单个包Install.packages(“包名称”)#安装多个包Install.packages(c(“包1”,”包2”))#调用包Library(包名)#查看目前已经安装了哪些包Installed.packages()
六、数据类型
1、data frame数据框
2、Vectors: numeric、character、logic
Numeric 数值型向量:各项元素均为数值
Character 字符型向量:带引用符号的文本
Logical 逻辑型向量:TRUE 或 FALSE(常用于数据筛选)
3、Factors机器学习以及回归分类中常用
Factors是R独有的数据类型,类似字符类型但不是。它是因子类型数据,用于存储分类数据,区别于字符型数据一个很明显特征是在数据的维度中以重复形式反复出现。
将数据设置为factors类型而不是字符类型,能更方便的对分类数据分别进行处理。
在处理分类模型,例如回归、机器学习,factors类型的数据对于此类面向分类的模型意义非凡。
#查看参数类型
class()
#查看数据对象的结构
str()
#查看数据的前6行
head()
#提取数据集中的某一列
【数据集名称】KaTeX parse error: Expected 'EOF', got '#' at position 10: 【列的变量名称】 #̲获取数据集中各列名称 name…【列的变量名称】)
代码:
data("iris")class(iris)str(iris)head(iris)iris$Sepal.Lengthnames(iris)length(iris$Sepal.Length)a <- "hello"class(a)z <- 3==2class(z)class(1)#将它设置为整数类型class(1L)class(iris$Species)levels(iris$Species)
七、类型(向量等)
向量
向量和矩阵在数据科学中起到核心作用,在机器学习和算法分析中,是常见的数据类型。理解和掌握非常重要。
向量是R中数据存储和数据处理的基础结构,它是一维数组,加减乘除均基于向量类型数值。
使用函数c创建向量,c是concatenate的缩写,它能将数值合并为一个向量。将这个向量看为一个列向量。
例:num <- c(20,20,20)
使用引用符号””创建character类型数据,单引号也行。
例:fruit <- c(“apple”,“banana”,“orange”)
查看数据各项名称:names()
创建等差向量:seq()
例:seq(1,10)
Seq(1,10,2)
方括号[]来获取向量中指定元素;
转换为字符型数据:as.Character( )
R中对于automatic类型的数据,提供了一种coercion强制转换的机制,coercion能帮助R灵活的处理数据,这类函数的特点是as.开头,后面跟有目标函数类型。
如果一个向量同时有数值型和文本型,结果会强制将数值型转换为文本型,这也是R中coercion可能存在的诸多被遗漏报错的原因之一。
NA:Not Available,数据不可用。也是一种logic类型向量,它产生的原因:数据丢失、数据格式转换错误。
当试图使用函数将一种类型的数据转换为另一种数据类型时,可能会遇到以下情况就是not available。
代码:
#创建向量num <- c(20,20,20)num#判断是否为向量is.vector(num)fruit <- c("apple","banana","orange")scores <- c(Chinese = 90, English = 90, Math = 90)scoresclass(scores)names(scores)#如果想用引号来写字符串,可以用下面形式scores <- c("Chinese" = 90, "English" = 90, "Math" =90)scores#另种方式scores <- c(90, 90, 90)decline <- c("Chinese", "English", "Math")names(scores) <- declinescoresseq(1,10,2)1:50class(2:10)class(seq(2,3,0.2))scores[2]scores[c(1,3)]scores[1:2]scores["Chinese"]scores[c("Chinese", "English")]#corecionis.logical(TRUE)#如果向量中有两种类型,R会自动按照coercion方式处理,默认你输入的是同一种类型向量num1 <- c(1==2, 1)class(num1)num2 <- c(1, "123")num2class(num2)x <- 1:5y <- as.character(x)y#Not Availableclass(NA)TFz <- c(1, "b", 2)as.numeric(z)
数据排序(映射)
Sort(): 将数值升序排序
Order(): 将数值作为输入,返回值为数值排序的索引。排序的是索引值
Rank(): 返回数据的排序序号。
向量运算:
规则:向量的每一个元素都进行相应的运算;进行运算的向量长度可以不同。结果向量长度等于参与运算的最长向量的长度。其中,较短的数据将重复循环进行运算。
R中一个容易被忽略的error错误是recycling
代码:
#数据排序data()CO2head(CO2)str(CO2)class(CO2$uptake)sort(CO2$uptake)x <- c(32, 90, 1, 42, 9, 3)sort(x)index <- order(x)#数值排序的索引,因为第3个最小,所以第一个是3indexx[index]#可以按数值对名称进行排序。首先使用order获得CO2的排序索引,然后将这个索引关联到地名。#根据引索的信息,可知道每个地方的二氧化碳排放数值。co2 <- c(CO2$uptake)sort(co2)index <- order(co2)CO2$Type[index]#which.max()用于索引向量中的最大值,相当于一个标签可以在其他维度中对数据进行定位。max(CO2$uptake)CO2max <- which.max(CO2$uptake)CO2$Type[CO2max]x <- c(3,24,2,50,120)rank(x)x <- c(2,3,5)y <- c(10,20,30,40)z <- x+yz
条件判别筛选
逻辑运算符& 仅在两边同时成立时,关系式成立。
Which() 返回一个logical值,用于筛选出匹配对象。精确检索。将返回的逻辑值转变为对应的引索找到数据就很方便。
Match() 返回一个引索。用于指明所要查找的数据项在该列中的序号。
%in% :如果不是想获取数据提取引索,仅仅确认观测值是否在某一列中,使用%in%,将返回一组logical值,判断数据是否存在。
代码:
data()CO2index <- CO2$conc < 200indexCO2$conc[index]sum(index)#逻辑测试TRUE & FALSETRUE & TRUEcity <- CO2$Type == "Mississippi"output <- CO2$uptake <= 30index <- city & outputindex#whichindex <- which(CO2$Type == "Quebec")index#matchindex <- match(c(7.7, 16, 34.8),CO2$uptake)indexCO2$Plant[index]#%in%c("Boston","Quebec","Tokyo") %in% CO2$Type
基础绘图
分布图
基础绘图函数plot(),通过设置参数绘制出不同图形。
Plot(x,y)
或者plot(y~x)
With() :with(数据集,公式) 将公式绑定于数据集中,无需使用$符号
Hist() :直方图
Boxplot() :箱线图
Image() :可以在矩阵中显示颜色,创建彩色或者灰度的网格,可用于显示三维或空间信息。
代码:
#基础绘图head(BOD)x <- BOD$Timey <- BOD$demandplot(x,y)require(stats)head(cars)plot(cars$speed,cars$dist)plot(cars$speed~cars$dist)#绘制正弦函数plot(sin,-pi,2*pi)with(BOD,plot(Time,demand))#直方图x <- with(BOD,Time)hist(x)BOD$demand[which.max(x)]#箱线图boxplot(decrease~treatment,data = OrchardSprays, log = "y", col = "bisque")#网格图x <- matrix(1:120, nrow = 12, ncol = 10)image(x)image(t(volcano)[ncol(volcano):1,])#也可通过增加参数绘制出等高线,进一步完善图像x <- 10*(1:nrow(volcano))y <- 10*(1:ncol(volcano))image(x,y,volcano,col=terrain.colors(100),axes=FALSE)contour(x,y,volcano,levels=seq(90,200,by=5),add = TRUE,col="peru")axis(1,at = seq(100,800,by = 100))axis(2,at = seq(100,600,by = 100))box()
编写函数
Function()
Function_name(,,_,…)
函数用于实现一个特定功能,例如绘制箱线图、求和
函数也属于objects
可以将函数名使用<- 赋值给变量名称
条件表达式
If(布尔表达式){
Statements
}
代码:
#if elsescores <- 70if(scores > 60){print("通过考试");}else{print("不通过考试");}#else ifa <- 85if(a > 90){print("A");}else if(a > 80){print("B");}else if(a > 70){print("C");}#ifelsea <- 50ifelse(a > 60, "通过", "不通过")#条件控制将缺失值都替换为0x <- c(1, 50, 36, NA, 345, 120)test <- ifelse(is.na(x),0,x)testsum(is.na(test))#any() all()a <- c(0,125,32,NA,20)test <- any(is.na(a))testa <- c(10,20,50,120)test <- all(a>0)testsum(is.na(test))
For循环
重复循环一段代码
代码:
#for循环for(i in 1:5){print(1:i)}for(i in 1:5){print(i)}for(i in 1:5){print(i:5)}a = 0for(i in 1:50){a = a + iprint(a)}
数据向量化操作
R语言中,所产生或处理的元素都叫做对象(object)
操作对象:变量、字符串、方法函数
Sapply函数能对模型向量化,即数据向量化
Apply函数族:apply、lapply、sapply、tapply、mapply、vapply
代码:
#向量化操作x <- 1:5cos(x)x <- 1:5sapply(x,cos)#练习a <- c(1,2,3)b <- c(2:4)y <- c(a,b,a)ys <- 3*a + b +1ssin(a)
数据导入
数据:
R自带的数据
外部数据:MySQL、Office(word、excel、ppt)、PDF、txt
路径读取数据:
Getwd(): 获取工作路径
Setwd(“ ”): 设置工作路径
Data frame 数据框
处理这个数据前需要安装tidyverse包。相当于是一个整合的工具。
Tidy data(整洁格式数据):
tidy data的特征
每一个变量都有自己独立的一列
每一个观测值都有自己独立的一行
每一个数据都是独立的单元格
拥有tidy的特征是使用dplyr中mutate, summary等函数的基础
dplyr包:数据处理高效操作1
使用dplyr包对data frame进行增删、合并、筛选、拆分
Dplyr提供了大量的函数和常见操作
Mutate(): 向数据集增加一列
Filter(): 按条件筛选。行操作,删除序号2所在的行,使用!=命令
select(): 选择列,如果列有很多,只想看其中几列,可使用该命令
代码:
#dplyr操作library(dplyr)#mutatescores <- mutate(scores, total = Chinese + English + Math)#view()View(scores)#filterfilter(scores, total > 400)dele_2 <- filter(scores, name != "Cindy")#selectstem <- select(scores, Science, Math, Computer)
dplyr包:数据处理高效操作2
以上需要中间变量作数据传递,使用pipe %>% 操作符的情况下,可省略中间变量。使用 %>% 后,select和filter参数将不再包括原始数据集。
代码:
#example64 %>% sqrt()log2(sqrt(64))#练习1024 %>% sqrt() %>% log2()
描述性统计分析
Dplyr包中的summarize()可用于描述性统计分析
参数包含描述性统计分析,summarize()将结果存储为table类型,每个参数只允许返回一个值。
代码:
#使用鸢尾花数据为例library(dplyr)data(iris)View(iris)s <- iris %>% filter(Species == "setosa") %>% summarize(x1=mean(Sepal.Length),x2=sd(Sepal.Length))sSetosa <- iris %>% filter(Species == "setosa")summarize(Setosa,x3=median(Sepal.Length),x4=min(Sepal.Length),x5=max(Sepal.Length))
数据排序
使用dplyr包对表格进行排序
Arrange(data,列名)按照该列指标对数据集进行升序排列
如果要降序排列,在arrange()中添加desc()
嵌套排序
筛选排序:按要求筛选指定行:top_n(data,n,列名)
代码:
#数据排序library(dplyr)data(CO2)CO2 %>% arrange(uptake) %>% head()CO2 %>% arrange(desc(uptake)) %>% head()#嵌套排序CO2 %>% arrange(Type,uptake) %>% head()#按要求筛选指定行top_n(CO2,3,uptake)
八、实例
1、
#创建变量apple <- 20price <- 5#计算总价sum_price <- apple*price#显示结果sum_pricec <- 1:5plot(c)#文本型数据slogan <- "i love math"
2、
#获得帮助#函数帮助文档help("log")help(log)?log#使用参数名可改变args默认顺序,args可查看参数信息,example获得代码示例args(log)example(log)log(8)log(8, base=2)log(base=2,x=8)#保留字或操作符help("+")?"+"#获得与weight mean有关的文档help.search("weight mean")#扩展包的帮助文档help(package="ggplot2")#获取R的Html形式的帮助文档help.start()
3、
a <- 1b <- 1c <- -1abcls()x1 <- (-b+sqrt(b^2-4*a*c))/(2*a)x2 <- (-b-sqrt(b^2-4*a*c))/(2*a)x1x2
看公棕号【R语言数据分析与实践】所做笔记。
后面若有其他补充,会持续更新本篇文章。
感兴趣的可以关注@统计布迪!!
如果觉得《R语言基本介绍 | 数据科学 Rstudio介绍 快捷键操作 R代码常见命令 数据类型 示例代码等等》对你有帮助,请点赞、收藏,并留下你的观点哦!