数据科学的 Whole Game

从原始数据到洞察的完整旅程

什么是数据科学的 Whole Game?

在 Hadley Wickham 等人的著作《R for Data Science》中,“Whole Game” 是一个核心概念,指的是数据科学项目的完整生命周期。与传统的分章节教学方式不同,Whole Game 方法主张让学生先经历一个完整的小型数据科学项目,建立全局视野,然后再深入各个技术细节。

Whole Game 的六个核心环节

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

环节 核心任务 关键技能
数据导入 从各种来源获取数据 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[生成可交互报告]

通过这个案例,您将学习:

  1. GitHub 协作基础:Issue 的使用、Markdown 格式、GitHub Flow
  2. API 数据获取:理解 RESTful API、分页机制、认证方式
  3. 正则表达式:从非结构化文本中提取结构化信息
  4. 数据验证:建立数据质量检查机制
  5. 描述性统计:计数、频率、分布分析
  6. ggplot2 可视化:条形图、数据分层展示

案例二:Issue #2 —— AI 模型性能投票分析

flowchart TD
    A[学生对 AI 模型排序投票] --> B[获取 GitHub Issue 数据]
    B --> C[解析排序信息]
    C --> D[转换数据格式]
    D --> E[计算排名统计量]
    E --> F[多维度可视化]
    F --> G[解读模型偏好]

通过这个案例,您将学习:

  1. 排序数据分析:理解排序数据的特殊性
  2. 数据透视:长宽格式转换(pivot_longer / pivot_wider)
  3. 多维度可视化:热力图、箱线图、排名图
  4. 汇总统计:平均排名、频次分布、一致性检验
  5. 数据导出:生成结构化 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 的核心特性

  1. 文学编程(Literate Programming)
    • 将代码和叙述文本无缝融合
    • 代码块可以设置执行选项(如 echo: false 隐藏代码,只显示结果)
    • 支持条件执行和动态内容生成
  2. 多语言支持
    • 原生支持 R、Python、Julia
    • 可以在同一文档中混用多种语言
    • 语言间可以共享数据
  3. 多种输出格式
    • HTML 网页(本项目的输出格式)
    • PDF 文档(学术写作)
    • Word 文档(办公协作)
    • 演示文稿(beamer、reveal.js)
    • 交互式仪表盘
  4. 网站和书籍生成
    • 通过 _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 原则是数据整理的黄金标准:

  1. 每列是一个变量
  2. 每行是一个观测
  3. 每个单元格是一个值

整洁数据的优势:

  • 一致的格式便于使用相同的工具处理
  • 数据结构本身即携带语义信息
  • 便于进行分组、聚合、变换操作

本项目的数据整理示例:

原始数据(非整洁):

用户 投票内容
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 追踪:记录问题、讨论方案、追踪进度

学习路径建议

入门路径(完成本项目)

  1. 第一周:熟悉 GitHub 和 Markdown
    • 注册 GitHub 账号
    • 在 Issue #1 中回复,练习 Markdown 格式
    • 学习基本的 Git 操作
  2. 第二周:理解数据获取
    • 学习 API 基本概念
    • 了解 GitHub API 的用法
    • 运行代码获取 Issue 数据
  3. 第三周:数据处理和可视化
    • 学习 dplyr 基本操作
    • 理解 ggplot2 的图形语法
    • 修改代码生成自己的可视化
  4. 第四周:可复现报告
    • 学习 Quarto 语法
    • 修改 .qmd 文件
    • 渲染并发布自己的分析

进阶路径

  • 学习更多的 R 包(purrr、readr、lubridate 等)
  • 深入了解统计建模
  • 学习交互式可视化(plotly、shiny)
  • 探索机器学习工作流(tidymodels)

常见问题

Q: 为什么选择 R 而不是 Python?

R 和 Python 都是优秀的数据科学工具。选择 R 是因为:

  1. tidyverse 生态系统:dplyr、ggplot2 等包提供了优雅、一致的数据处理语法
  2. 统计分析传统:R 诞生于统计学社区,统计方法实现更全面
  3. Quarto 的原生支持:虽然 Quarto 支持多语言,但与 R 的集成最为成熟
  4. 学术出版优势:R Markdown/Quarto 在学术界被广泛采用

当然,Python 在深度学习、生产部署等方面有优势,两者并非互斥。

Q: 我需要什么先验知识?

基础要求:

  • 基本的计算机操作能力
  • 高中水平的数学和统计知识
  • 对编程有基本了解(不限语言)

不需要:

  • 深入的 R 语言经验(我们会逐步学习)
  • 统计学专业知识(本课程侧重实践)
  • 前端开发技能(Quarto 处理所有界面)

Q: 数据更新后,如何确保我的分析仍然有效?

这是可复现研究的核心问题。建议:

  1. 防御性编程:在代码中加入数据验证步骤
  2. 版本锁定:记录使用的包版本(使用 renv 包)
  3. 单元测试:对关键数据处理步骤编写测试
  4. 持续集成:使用 GitHub Actions 自动运行分析并检查错误

下一步

现在,您可以选择以下路径继续学习:

  1. 查看 Issue #1 分析:了解如何从 GitHub Issue 中提取和验证学生信息
  2. 查看 Issue #2 分析:学习排序数据的分析方法
  3. 查看成员名单:查看实时更新的学生信息表
  4. 阅读技术工具详解:深入了解各个 R 包的使用方法

“数据科学不仅仅是关于数据,更是关于提出正确的问题,并用数据来回答它们。” —— Hadley Wickham