1. 初识R语言datasets包:数据分析师的百宝箱
刚接触R语言时,我最惊喜的发现就是datasets包。这个预装在R基础环境中的工具包,就像数据分析师的瑞士军刀,里面藏着72个经典数据集。记得第一次用data()命令调出完整列表时,那种感觉就像打开了阿里巴巴的宝藏库。
为什么说datasets是学习神器?这些数据集都是经过精心挑选的"干净数据",不需要花时间爬取或清洗,直接就能上手分析。比如著名的鸢尾花数据集(iris),150条记录包含花萼花瓣的完整测量数据,已经成为机器学习入门的"Hello World"。
新手最容易上手的三个数据集:
- mtcars:32辆汽车的11项性能指标,小身材大能量
- airquality:纽约1973年的每日空气质量,含NA值的真实案例
- Titanic:泰坦尼克号乘客的四维生存数据,故事性十足
小技巧:运行
?数据集名称(如?iris)可以查看数据字典,这对理解字段含义特别有帮助
2. 数据探索实战:从描述统计到可视化
2.1 快速掌握数据全貌
拿到数据集第一步,我习惯用组合拳快速扫描:
# 查看数据结构 str(iris) # 获取统计摘要 summary(iris) # 查看前6行 head(iris)最近分析mtcars数据集时,发现一个有趣现象:32辆车里只有7辆是手动挡(am=1)。用table(mtcars$am)验证时,更发现自动挡车的平均油耗比手动挡高出24%——这个发现后来成了我第一个博客案例。
2.2 可视化探索技巧
散点图矩阵是我的秘密武器,3行代码就能看透变量关系:
pairs(iris[1:4], col = iris$Species, pch = 19)在分析airquality时,我用热图发现了臭氧和温度的夏季峰值:
heatmap(as.matrix(airquality[,1:4]), Colv = NA, scale = "column")3. 数据清洗实战:处理NA值的五种策略
3.1 识别缺失值
airquality数据集有44个NA值,用这招快速定位:
colSums(is.na(airquality)) # Ozone Solar.R Wind Temp Month Day # 37 7 0 0 0 03.2 我的NA值处理工具箱
- 直接删除:
na.omit()当缺失少于5%时 - 均值填充:
airquality$Ozone[is.na(airquality$Ozone)] <- mean(airquality$Ozone, na.rm=TRUE) - 回归预测:用其他变量预测缺失值
- 插值法:时间序列用
zoo::na.approx() - 标记法:新增缺失标识变量
警告:直接删除可能引入偏差,特别是当NA非随机出现时
4. 可视化进阶:ggplot2与内置数据的完美结合
4.1 基础图形语法
用mtcars演示ggplot2的核心逻辑:
library(ggplot2) ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point(aes(color=factor(cyl))) + geom_smooth(method="lm") + labs(title="车重与油耗关系")4.2 高级可视化案例
分面图揭示物种差异:
ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point() + facet_wrap(~Species)动态交互用plotly实现:
library(plotly) ggplotly( ggplot(airquality, aes(Temp, Ozone)) + geom_point(aes(color=Month)) )5. 建模实战:从线性回归到决策树
5.1 线性回归示范
用cars数据集建立车速与刹车距离模型:
model <- lm(dist ~ speed, data=cars) summary(model) # 预测30mph时的刹车距离 predict(model, newdata=data.frame(speed=30))5.2 分类模型实战
鸢尾花种类预测:
library(rpart) tree_model <- rpart(Species ~ ., data=iris) plot(tree_model) text(tree_model)6. 时间序列分析:从股票数据到空气质量
6.1 欧洲股市分析
EuStockMarkets数据集包含1860天的四大指数:
plot(EuStockMarkets) # 转换为时间序列对象 ts_data <- ts(EuStockMarkets, frequency=260)6.2 季节性分解
用airquality演示月趋势:
library(stats) decomp <- stl(ts(airquality$Temp, frequency=30), s.window="periodic") plot(decomp)7. 高维数据操作技巧
7.1 三维数组处理
操作HairEyeColor三维表:
margin.table(HairEyeColor, margin=2) # 按眼睛颜色汇总 # 蓝眼睛占总人数比例 prop.table(margin.table(HairEyeColor, margin=2))["Blue"]7.2 数据透视技巧
用ftable实现智能排版:
ftable(HairEyeColor, row.vars=c("Hair", "Sex"))8. 效率提升:自定义函数批量处理
8.1 自动化分析函数
创建通用分析模板:
analyze_data <- function(df){ cat("=== 基本统计 ===\n") print(summary(df)) cat("\n=== 缺失值统计 ===\n") print(colSums(is.na(df))) if(ncol(df)>2){ cat("\n=== 相关性分析 ===\n") print(cor(df, use="complete.obs")) } }8.2 批量可视化
自动生成所有数值变量的直方图:
plot_histograms <- function(df){ numeric_cols <- sapply(df, is.numeric) par(mfrow=c(3,3)) for(col in names(df)[numeric_cols]){ hist(df[[col]], main=col, xlab="") } }9. 避坑指南:我踩过的五个坑
- 忽略数据尺度:mtcars中mpg和hp单位不同,直接比较会出错
- 过度依赖summary:分类变量要用table查看分布
- 误用矩阵运算:as.matrix转换因子变量会得到数字编码
- 时间格式陷阱:airquality中的Month是数值而非因子
- 可视化失真:Titanic数据用条形图而非饼图展示比例
10. 创意应用:用数据讲故事
10.1 动态报告
在Rmarkdown中交互展示:
```{r} library(DT) datatable(iris, options=list(pageLength=5)) ```10.2 教育案例
用anscombe四重奏演示统计陷阱:
par(mfrow=c(2,2)) for(i in 1:4){ plot(anscombe[,i], anscombe[,i+4], main=paste("Dataset", i)) abline(lm(anscombe[,i+4] ~ anscombe[,i])) }这些实战经验让我深刻体会到,datasets包不仅是学习工具,更是创意的试验田。从简单的数据描述到复杂的多变量分析,这些经典数据集总能带来新的发现。最近我在用state.x77研究各州经济指标时,意外发现文盲率与谋杀率的相关性高达0.7——这个发现后来成了我数据分析课的经典案例。