引言
R语言是一种用于统计分析、数据挖掘和数据可视化的开源编程语言和软件环境。自1993年由Ross Ihaka和Robert Gentleman开发以来,R语言凭借其强大的统计计算能力和丰富的可视化功能,已成为数据科学家和统计学家不可或缺的工具。
学习目标:
- 理解R语言的基本语法和数据结构
- 掌握数据导入、清洗和变换的方法
- 能够使用R进行数据可视化和统计分析
- 熟悉常用的R扩展包,提高数据处理效率
- 通过实践项目巩固所学知识
环境搭建
安装R
R语言支持多种操作系统,包括Windows、macOS和Linux。
各操作系统安装步骤:
-
Windows:
- 访问R的CRAN镜像站点下载最新的Windows安装包。
- 运行安装程序,按照提示完成安装。
-
macOS:
- 访问CRAN的macOS页面下载适合您系统的安装包。
- 双击安装包,按照指引完成安装。
-
Linux:
- 使用包管理器安装,如Ubuntu下执行:
sudo apt-get update sudo apt-get install r-base
- 使用包管理器安装,如Ubuntu下执行:
安装RStudio
RStudio是一款强大的R语言集成开发环境,提供了友好的用户界面和丰富的功能。
安装步骤:
- 访问RStudio官网下载适合您操作系统的安装包。
- 运行安装程序,按照提示完成安装。
RStudio界面简介
RStudio主要由以下几个区域组成:
- 脚本编辑器:编写和编辑R脚本。
- 控制台:直接输入R命令并立即执行。
- 环境/历史:查看当前工作空间中的变量和命令历史。
- 文件/图形/包/帮助:管理文件、查看绘图结果、安装和加载包、查看帮助文档。
基础语法
注释
-
单行注释:以
#
开头。# 这是一个单行注释
数据类型与数据结构
原子向量
R中的基本数据类型都是向量,分为以下几种:
数据类型 | 描述 | 示例 |
---|---|---|
数值型 | 实数,例如整数和小数 | x <- 42 |
整数型 | 整数,加后缀L 表示 |
y <- 42L |
字符型 | 文本字符串 | name <- "Alice" |
逻辑型 | 布尔值,TRUE 或FALSE |
flag <- TRUE |
复数型 | 复数 | z <- 1+2i |
数据结构
数据结构 | 描述 | 示例 |
---|---|---|
向量 | 同一类型的元素集合 | v <- c(1, 2, 3) |
因子 | 分类数据,存储为整数并有标签 | f <- factor(c("男", "女", "男")) |
列表 | 可包含不同类型元素的集合 | lst <- list(name="Alice", age=25) |
矩阵 | 二维的同类型元素集合 | m <- matrix(1:6, nrow=2, ncol=3) |
数据框 | 表格形式的数据集 | df <- data.frame(id=1:3, score=c(85,90,95)) |
数组 | 多维的同类型元素集合 | arr <- array(1:8, dim=c(2,2,2)) |
基本运算符
算术运算符
运算符 | 描述 | 示例 |
---|---|---|
+ |
加法 | 2 + 3 |
- |
减法 | 5 - 2 |
* |
乘法 | 2 * 3 |
/ |
除法 | 6 / 2 |
^ |
幂 | 2 ^ 3 |
%% |
取模 | 5 %% 2 (结果为1) |
%/% |
整除 | 5 %/% 2 (结果为2) |
比较运算符
运算符 | 描述 | 示例 |
---|---|---|
== |
等于 | x == y |
!= |
不等于 | x != y |
> |
大于 | x > y |
< |
小于 | x < y |
>= |
大于等于 | x >= y |
<= |
小于等于 | x <= y |
逻辑运算符
运算符 | 描述 | 示例 |
---|---|---|
& |
元素级与 | x & y |
` | ` | 元素级或 |
! |
非 | !x |
&& |
短路与 | x && y (仅检查第一个元素) |
` | ` |
常用函数
-
赋值:
<-
或=
x <- 10 y = 20
-
查看对象类型:
class()
class(x) # 输出 "numeric"
-
求长度:
length()
length(c(1, 2, 3)) # 输出 3
-
删除对象:
rm()
rm(x) # 删除变量x
数据操作
数据导入
读取CSV文件
data <- read.csv("data.csv", header=TRUE, sep=",")
读取Excel文件
需要先安装并加载readxl
包:
install.packages("readxl")
library(readxl)
data <- read_excel("data.xlsx", sheet=1)
连接数据库
以连接MySQL为例:
install.packages("RMySQL")
library(RMySQL)
conn <- dbConnect(MySQL(), dbname="dbname", host="host", user="user", password="password")
data <- dbGetQuery(conn, "SELECT * FROM tablename")
数据清洗
处理缺失值
-
检查缺失值:
is.na()
sum(is.na(data)) # 统计缺失值数量
-
删除缺失值:
na.omit()
data_clean <- na.omit(data)
-
填充缺失值
data[is.na(data)] <- 0 # 将缺失值替换为0
数据类型转换
-
转换为因子:
data$gender <- as.factor(data$gender)
-
转换为数值型:
data$age <- as.numeric(data$age)
数据变换
使用dplyr
包对数据进行操作。
安装并加载dplyr
install.packages("dplyr") library(dplyr)
常用函数
函数 | 描述 | 示例 |
---|---|---|
filter() |
筛选行 | filter(data, age > 30) |
select() |
选择列 | select(data, name, age) |
arrange() |
排序 | arrange(data, desc(age)) |
mutate() |
添加新列 | mutate(data, age_group = ifelse(age > 30, "老年", "青年")) |
summarise() |
汇总 | summarise(data, avg_age = mean(age)) |
group_by() |
分组 | data %>% group_by(gender) %>% summarise(count = n()) |
数据可视化
基础绘图
使用R的基础绘图系统进行简单的绘图。
绘制散点图
plot(data$x, data$y, main="散点图", xlab="X轴", ylab="Y轴", col="blue")
绘制直方图
hist(data$age, breaks=10, main="年龄分布直方图", xlab="年龄", col="green")
高级绘图:ggplot2
ggplot2
是R中最流行的绘图包,基于语法层次的绘图理念。
安装并加载ggplot2
install.packages("ggplot2") library(ggplot2)
基本用法
ggplot(data, aes(x=age, y=income)) + geom_point()
常用图形
图形类型 | 函数 | 示例 |
---|---|---|
柱状图 | geom_bar() |
ggplot(data, aes(x=gender)) + geom_bar() |
折线图 | geom_line() |
ggplot(data, aes(x=year, y=sales)) + geom_line() |
箱线图 | geom_boxplot() |
ggplot(data, aes(x=group, y=value)) + geom_boxplot() |
密度图 | geom_density() |
ggplot(data, aes(x=variable)) + geom_density() |
自定义图形
-
添加标题和标签
ggplot(data, aes(x=age, y=income)) + geom_point() + ggtitle("年龄与收入关系图") + xlab("年龄") + ylab("收入")
-
调整主题
ggplot(data, aes(x=age, y=income)) + geom_point() + theme_minimal()
统计分析
描述性统计
常用指标
指标 | 函数 | 示例 |
---|---|---|
均值 | mean() |
mean(data$age) |
中位数 | median() |
median(data$income) |
众数 | 自定义函数 | 见下方示例 |
方差 | var() |
var(data$age) |
标准差 | sd() |
sd(data$income) |
四分位数 | quantile() |
quantile(data$age) |
计算众数的示例
get_mode <- function(v) { uniqv <- unique(v) uniqv[which.max(tabulate(match(v, uniqv)))] } mode_age <- get_mode(data$age)
推断性统计
t检验
用于比较两个样本均值是否有显著差异。
t.test(data$score ~ data$group)
卡方检验
用于检验分类变量之间的独立性。
chisq.test(table(data$gender, data$purchase))
方差分析(ANOVA)
用于比较多个组的均值差异。
anova_result <- aov(score ~ group, data=data) summary(anova_result)
回归分析
简单线性回归
model <- lm(income ~ age, data=data) summary(model)
多元线性回归
model <- lm(income ~ age + education + experience, data=data) summary(model)
回归模型诊断
plot(model)
实践项目
案例一:数据探索性分析(EDA)
目标:
- 对
mtcars
数据集进行探索性分析 - 了解不同变量之间的关系
- 可视化数据特征
步骤:
-
加载数据集
data <- mtcars
-
查看数据结构
str(data) summary(data)
-
计算描述性统计量
mean_mpg <- mean(data$mpg) median_mpg <- median(data$mpg) sd_mpg <- sd(data$mpg)
-
绘制相关矩阵图
pairs(data)
-
使用
ggplot2
绘制散点图ggplot(data, aes(x=wt, y=mpg)) + geom_point() + geom_smooth(method="lm") + ggtitle("汽车重量与油耗关系图") + xlab("重量") + ylab("每加仑英里数")
案例二:建立回归模型预测房价
数据集:
使用波士顿房价数据集(Boston
),需要先安装并加载MASS
包。
步骤:
-
加载数据集
library(MASS) data <- Boston
-
查看数据结构
str(data) summary(data)
-
分割训练集和测试集
set.seed(123) index <- sample(1:nrow(data), 0.7 * nrow(data)) train <- data[index, ] test <- data[-index, ]
-
建立线性回归模型
model <- lm(medv ~ ., data=train) summary(model)
-
模型评估
predictions <- predict(model, newdata=test)
actuals <- test$medv
mse <- mean((predictions - actuals)^2)
print(paste("均方误差(MSE):", round(mse, 2))) -
可视化结果
plot(actuals, predictions, main="实际值 vs 预测值", xlab="实际房价", ylab="预测房价", pch=16, col="blue") abline(0, 1, col="red", lwd=2)
扩展内容
创建Shiny应用
Shiny是R中的一个包,用于构建交互式Web应用。
安装并加载Shiny
install.packages("shiny") library(shiny)
简单的Shiny应用示例
# 保存为app.R library(shiny) ui <- fluidPage( titlePanel("Hello Shiny!"), sidebarLayout( sidebarPanel( sliderInput("bins", "选择柱状图的分箱数:", min = 1, max = 50, value = 30) ), mainPanel( plotOutput("distPlot") ) ) ) server <- function(input, output) { output$distPlot <- renderPlot({ x <- faithful$eruptions bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = "darkgray", border = "white", xlab = "喷发持续时间(分钟)", main = "老忠实泉喷发持续时间直方图") }) } shinyApp(ui = ui, server = server)
运行应用
runApp("app.R")
使用R Markdown生成报告
R Markdown是一种基于Markdown的文档格式,支持嵌入R代码,自动生成报告。
安装并加载rmarkdown
install.packages("rmarkdown") library(rmarkdown)
创建R Markdown文件
在RStudio中,选择File -> New File -> R Markdown,按照提示创建。
编写内容
--- title: "数据分析报告" author: "Your Name" date: "`r Sys.Date()`" output: html_document --- # 简介 这是一个使用R Markdown生成的报告示例。 # 数据加载 ```{r} data <- mtcars summary(data)
绘图
library(ggplot2) ggplot(data, aes(x=wt, y=mpg)) + geom_point()