flowchart LR
A[数据导入<br/>Import] --> B[数据整理<br/>Tidy]
B --> C[数据转换<br/>Transform]
C --> D[数据可视化<br/>Visualize]
D --> E[数据建模<br/>Model]
E --> F[结果沟通<br/>Communicate]
F -.-> A
数据科学的 Whole Game
从原始数据到洞察的完整旅程
什么是数据科学的 Whole Game?
在 Hadley Wickham 等人的著作《R for Data Science》中,“Whole Game” 是一个核心概念,指的是数据科学项目的完整生命周期。与传统的分章节教学方式不同,Whole Game 方法主张让学生先经历一个完整的小型数据科学项目,建立全局视野,然后再深入各个技术细节。
Whole Game 的六个核心环节
| 环节 | 核心任务 | 关键技能 |
|---|---|---|
| 数据导入 | 从各种来源获取数据 | API 调用、文件读取、数据库连接 |
| 数据整理 | 将数据转换为整洁格式 | 理解 tidy 数据原则、数据重塑 |
| 数据转换 | 清洗、筛选、汇总数据 | 条件筛选、分组聚合、数据变换 |
| 数据可视化 | 创建图表探索数据 | 图形语法、审美设计、交互式图形 |
| 数据建模 | 构建统计或机器学习模型 | 模型选择、参数估计、模型评估 |
| 结果沟通 | 报告发现并分享洞察 | 可复现报告、演示技巧、数据故事化 |
本课程的两个 Whole Game 案例
本课程通过两个真实的 GitHub Issue 数据分析案例,带您完整体验数据科学的工作流程。
案例一:Issue #1 —— 学生信息采集与分析
flowchart TD
A[学生在 GitHub Issue 回复] --> B[通过 GitHub API 获取数据]
B --> C[解析非结构化文本]
C --> D[验证学号格式]
D --> E[统计学生信息]
E --> F[可视化研究方向分布]
F --> G[生成可交互报告]
通过这个案例,您将学习:
- GitHub 协作基础:Issue 的使用、Markdown 格式、GitHub Flow
- API 数据获取:理解 RESTful API、分页机制、认证方式
- 正则表达式:从非结构化文本中提取结构化信息
- 数据验证:建立数据质量检查机制
- 描述性统计:计数、频率、分布分析
- ggplot2 可视化:条形图、数据分层展示
案例二:Issue #2 —— AI 模型性能投票分析
flowchart TD
A[学生对 AI 模型排序投票] --> B[获取 GitHub Issue 数据]
B --> C[解析排序信息]
C --> D[转换数据格式]
D --> E[计算排名统计量]
E --> F[多维度可视化]
F --> G[解读模型偏好]
通过这个案例,您将学习:
- 排序数据分析:理解排序数据的特殊性
- 数据透视:长宽格式转换(pivot_longer / pivot_wider)
- 多维度可视化:热力图、箱线图、排名图
- 汇总统计:平均排名、频次分布、一致性检验
- 数据导出:生成结构化 CSV 文件
技术栈详解
本项目的核心技术栈基于 R 语言和 Quarto 文档系统,这是现代可复现研究的标准工具组合。
核心工具链
| 工具/包 | 用途 | 在本项目中的应用 |
|---|---|---|
| Quarto | 可复现计算文档 | 整合代码、输出和 narrative,生成网站 |
| httr | HTTP 请求 | 调用 GitHub API 获取数据 |
| gh | GitHub API 封装 | 更便捷的 GitHub 数据获取 |
| jsonlite | JSON 处理 | 解析 API 返回的 JSON 数据 |
| dplyr | 数据操作 | 筛选、分组、聚合、变换 |
| tidyr | 数据整理 | 长宽格式转换、数据清理 |
| stringr | 字符串处理 | 正则表达式匹配、文本提取 |
| ggplot2 | 数据可视化 | 创建各种统计图形 |
| DT | 交互式表格 | 生成可搜索、可排序的数据表格 |
| showtext | 字体渲染 | 解决中文显示问题 |
Quarto:可复现研究的利器
Quarto 是 RStudio(现 Posit)开发的下一代科学和技术出版系统,它解决了传统数据分析工作流中的一个核心问题:如何确保分析结果可以被完全复现?
Quarto 的核心特性
- 文学编程(Literate Programming)
- 将代码和叙述文本无缝融合
- 代码块可以设置执行选项(如
echo: false隐藏代码,只显示结果) - 支持条件执行和动态内容生成
- 多语言支持
- 原生支持 R、Python、Julia
- 可以在同一文档中混用多种语言
- 语言间可以共享数据
- 多种输出格式
- HTML 网页(本项目的输出格式)
- PDF 文档(学术写作)
- Word 文档(办公协作)
- 演示文稿(beamer、reveal.js)
- 交互式仪表盘
- 网站和书籍生成
- 通过
_quarto.yaml配置多页面网站 - 自动处理导航、交叉引用
- 内置搜索功能
- 通过
_quarto.yaml 配置解析
project:
type: website # 项目类型:生成网站
output-dir: _site # 输出目录
website:
title: "D2RS-2026spring 数据分析" # 网站标题
navbar: # 导航栏配置
left:
- href: index.qmd # 页面链接
text: 首页 # 显示文本
- href: issue1_students.qmd
text: 学生名单
# ... 更多页面
format:
html:
theme: cosmo # 使用 cosmo 主题数据科学的核心原则
1. 可复现性(Reproducibility)
可复现性是科学研究的基石。在数据科学中,这意味着:
- 代码可运行:他人可以在他们的环境中运行您的代码
- 环境可重现:记录所有依赖包及其版本
- 数据可获取:提供数据获取途径或包含数据
- 随机性可控:设置随机种子,确保随机结果可重复
本项目的可复现性实践:
- 使用 Quarto 文档整合代码和说明
- 通过 GitHub API 直接获取原始数据
- 所有数据处理步骤透明可见
- 网站自动部署,结果实时更新
2. 数据整洁原则(Tidy Data)
Hadley Wickham 提出的 tidy data 原则是数据整理的黄金标准:
- 每列是一个变量
- 每行是一个观测
- 每个单元格是一个值
整洁数据的优势:
- 一致的格式便于使用相同的工具处理
- 数据结构本身即携带语义信息
- 便于进行分组、聚合、变换操作
本项目的数据整理示例:
原始数据(非整洁):
| 用户 | 投票内容 |
|---|---|
| user1 | 1. GPT-4o. Claude. Gemini |
| user2 | 1. Claude. GPT-4o. Kimi |
整理后(整洁):
| 用户 | 排名 | 模型 |
|---|---|---|
| user1 | 1 | GPT-4o |
| user1 | 2 | Claude |
| user1 | 3 | Gemini |
| user2 | 1 | Claude |
| user2 | 2 | GPT-4o |
| user2 | 3 | Kimi |
3. 版本控制与协作
Git 和 GitHub 是现代数据科学工作流的标配:
- 版本回退:随时可以回到之前的代码状态
- 分支开发:新功能在独立分支开发,不影响主分支
- 协作审查:通过 Pull Request 进行代码审查
- Issue 追踪:记录问题、讨论方案、追踪进度
学习路径建议
入门路径(完成本项目)
- 第一周:熟悉 GitHub 和 Markdown
- 注册 GitHub 账号
- 在 Issue #1 中回复,练习 Markdown 格式
- 学习基本的 Git 操作
- 第二周:理解数据获取
- 学习 API 基本概念
- 了解 GitHub API 的用法
- 运行代码获取 Issue 数据
- 第三周:数据处理和可视化
- 学习 dplyr 基本操作
- 理解 ggplot2 的图形语法
- 修改代码生成自己的可视化
- 第四周:可复现报告
- 学习 Quarto 语法
- 修改
.qmd文件 - 渲染并发布自己的分析
进阶路径
- 学习更多的 R 包(purrr、readr、lubridate 等)
- 深入了解统计建模
- 学习交互式可视化(plotly、shiny)
- 探索机器学习工作流(tidymodels)
常见问题
Q: 为什么选择 R 而不是 Python?
R 和 Python 都是优秀的数据科学工具。选择 R 是因为:
- tidyverse 生态系统:dplyr、ggplot2 等包提供了优雅、一致的数据处理语法
- 统计分析传统:R 诞生于统计学社区,统计方法实现更全面
- Quarto 的原生支持:虽然 Quarto 支持多语言,但与 R 的集成最为成熟
- 学术出版优势:R Markdown/Quarto 在学术界被广泛采用
当然,Python 在深度学习、生产部署等方面有优势,两者并非互斥。
Q: 我需要什么先验知识?
基础要求:
- 基本的计算机操作能力
- 高中水平的数学和统计知识
- 对编程有基本了解(不限语言)
不需要:
- 深入的 R 语言经验(我们会逐步学习)
- 统计学专业知识(本课程侧重实践)
- 前端开发技能(Quarto 处理所有界面)
Q: 数据更新后,如何确保我的分析仍然有效?
这是可复现研究的核心问题。建议:
- 防御性编程:在代码中加入数据验证步骤
- 版本锁定:记录使用的包版本(使用
renv包) - 单元测试:对关键数据处理步骤编写测试
- 持续集成:使用 GitHub Actions 自动运行分析并检查错误
下一步
现在,您可以选择以下路径继续学习:
- 查看 Issue #1 分析:了解如何从 GitHub Issue 中提取和验证学生信息
- 查看 Issue #2 分析:学习排序数据的分析方法
- 查看成员名单:查看实时更新的学生信息表
- 阅读技术工具详解:深入了解各个 R 包的使用方法
“数据科学不仅仅是关于数据,更是关于提出正确的问题,并用数据来回答它们。” —— Hadley Wickham