以数据分析为中心的全场景生态建设探索
华东师范大学
2024-11-18
从教40年(1985-现在)
研究兴趣
R 与\TeX的深度玩家与推广者,中国 R 会议(上海)的发起人之一
管理二本期刊
我们在学习、教学、科研过程中会
与各类知识打交道,浏览许多资料
与数据打交道,查看图表
与程序打交道,做可视化和数据分析
目标: 完成各类任务
用什么工具?
怎么提高生产率?
目标: 赋能教学与科研
通过标准化与个性化的权衡
建立教学与科研的生态
提升教学与科研的效率
标准化,要?
个性化,怎么做?
标准化基础上个性化,可落地?
答案:文学化统计编程
编程与写作融合 (knitr)
编程(code)
写作(prose)
标准化定制
CSS/SCSS 定制
\TeX 定制
通过Quarto平台
使编程与写作融为一体
建立作者与出版社的桥梁
为读者提供良好的阅读场景
多格式出版
HTML
ePub
Word
极易入门(基本功能简单)
费用低廉(免费)
代码开放/开源(共享)
无平台限制(共享)
求助方便
良好生态与社区
数据分析高效(工具包)
可视化容易而强(工具包)
编程能力强(可扩展性)
有卓越的IDE
Excel
SAS (好贵,好重)
Matlab
SPSS
Minitab
Fortran
Eviews
Stata
R
Python
Julia
Shiny/Observable—动态可视化
图 1: 编程语言性能比较(相对于C=1.0)
R: - 倚天剑
Python: - 屠龙刀
\LaTeX
一种轻量级标记语言
目标:实现“易读易写”
转换成结构化的HTML(超文本标记语言)
语法简单易懂易学
主流的平台几乎都使用/支持
ChatGPT/Kimi/ChatGLM/…
Github
Jupyter Notebook
Typora (推荐使用)
… …
\TeX的鼻祖
美国科学院院士, 美国工程院院士, 英国、法国、挪威和德国科学院的外籍院士. 斯坦福大学荣誉退休教授
通常写作与编程是分离的,整个过程会涉及大量繁琐的复制和粘贴
观点: 文章应该是由文本与代码(chunks)组成的流构成
IDE: Rstudio/VS Code/Jupyter nootbook
R/Quarto Markdown
knitr
R
, Python
, Julia
, Observable
TeX
, HTML
, Markdown
图 2: Rstudio到Posit
开源免费,优秀的代码编辑器
可成倍成倍提高数据分析的效率
最好的跨平台IDE
集成多个R/Quarto Markdown文档类型/模板
Visual 与 Source 两种编辑模式自由切换
开源免费,优秀的跨平台IDE
可.red[成倍成倍]提高编程的效率
优秀的跨平台TeX/R/Python/… IDE
海量的插件
灵活方便的个性化定制
Visual 与 Source 两种编辑模式自由切换
根据 Posit (前身为 RStudio):
全新打造: 下一代的RMarkdown,与R Markdown类似, 于2021年1月开始开发,2022年12月发布第一版
基于 Pandoc 构建的开源的出版系统
功能更加强大和灵活: 适用于数据分析和机器学习等领域
支持代码块执行: R, Python,Julia,JavaScript Observable 等
支持多格式输出: PDF、HTML、\LaTeX、Word等
支持自定义: CSS、JavaScript和\LaTeX模板
支持优秀的IDE: VS Code, Rstudio (具备可视化编程)及Jupyter notebook
从技术的角度来看 (Mock, 2022):
一个命令行界面(CLI),将混合格式文件(
.ipynb
/Jupyter 笔记本)或纯文本文件(.qmd
、.rmd
、.md
)以不同的格式(PDF/Word/HTML等)渲染(render)成不同的输出(报告、书籍、网站、演示文稿等).
通过\TeX/MathJax/KaTeX 实现
$$
\frac{\partial C}
{ \partial t}
+ \frac{1}{2}\sigma^2 S^2
\frac{\partial^2 C}
{\partial C^2}
+ r S
\frac{\partial C}
{\partial S}
\ = r C
$$ {#eq-black-scholes}
\frac{\partial C} { \partial t} + \frac{1}{2}\sigma^{2} S^{2} \frac{\partial^{2} C} {\partial C^2} + r S \frac{\partial C} {\partial S} \ = r C \tag{1}
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5.0 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
4.6 | 3.4 | 1.4 | 0.3 | setosa |
5.0 | 3.4 | 1.5 | 0.2 | setosa |
选项 | 取值 | 含义 |
---|---|---|
eval | TRUE; FALSE | 执行或不执行代码 |
echo | TRUE; FALSE | 显示/隐藏源代码 |
warning | TRUE; FALSE | 显示/隐藏警告文本 |
error | TRUE; FALSE | 错误消息 |
emssage | TRUE; FALSE | 是否保留message()给出的消息 |
tidy | TRUE; FALSE | 代码重排, 由formatR包支持 |
prompt | TRUE; FALSE | 是否在R代码中添加代码 |
comment | ‘##’; 字符串 | 在R代码前添加注释符 |
fig.width | 数字, 英寸 | 设置图形的宽度与高度 |
fig.height | 数字, 英寸 | 设置图形的宽度与高度 |
图 7: Quarto 文学化统计编程流程
Quarto工作原理
# Define a server for the Shiny app
function(input, output) {
# Fill in the spot we created for a plot
output$phonePlot <- renderPlot({
# Render a barplot
})
}
更多参见:Syntax Highlighting
# Define a server for the Shiny app
function(input, output) {
# Fill in the spot we created for a plot
output$phonePlot <- renderPlot({
# Render a barplot
barplot(WorldPhones[,input$region]*1000,
main=input$region,
ylab="Number of Telephones",
xlab="Year")
})
}
更多参见:Code Animations
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.plot(theta, r)
ax.set_rticks([0.5, 1, 1.5, 2])
ax.grid(True)
plt.show()
更多参见:Line Highlighting
更多参见:HTML Code Blocks
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
---|---|---|---|---|---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 |
Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 |
Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 | 22.90 | 1 | 0 | 4 | 2 |
Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.30 | 1 | 0 | 4 | 4 |
Merc 280C | 17.8 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.90 | 1 | 0 | 4 | 4 |
Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 4.070 | 17.40 | 0 | 0 | 3 | 3 |
Merc 450SL | 17.3 | 8 | 275.8 | 180 | 3.07 | 3.730 | 17.60 | 0 | 0 | 3 | 3 |
Merc 450SLC | 15.2 | 8 | 275.8 | 180 | 3.07 | 3.780 | 18.00 | 0 | 0 | 3 | 3 |
Cadillac Fleetwood | 10.4 | 8 | 472.0 | 205 | 2.93 | 5.250 | 17.98 | 0 | 0 | 3 | 4 |
Lincoln Continental | 10.4 | 8 | 460.0 | 215 | 3.00 | 5.424 | 17.82 | 0 | 0 | 3 | 4 |
Chrysler Imperial | 14.7 | 8 | 440.0 | 230 | 3.23 | 5.345 | 17.42 | 0 | 0 | 3 | 4 |
Fiat 128 | 32.4 | 4 | 78.7 | 66 | 4.08 | 2.200 | 19.47 | 1 | 1 | 4 | 1 |
Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 1.615 | 18.52 | 1 | 1 | 4 | 2 |
Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 1.835 | 19.90 | 1 | 1 | 4 | 1 |
Toyota Corona | 21.5 | 4 | 120.1 | 97 | 3.70 | 2.465 | 20.01 | 1 | 0 | 3 | 1 |
Dodge Challenger | 15.5 | 8 | 318.0 | 150 | 2.76 | 3.520 | 16.87 | 0 | 0 | 3 | 2 |
AMC Javelin | 15.2 | 8 | 304.0 | 150 | 3.15 | 3.435 | 17.30 | 0 | 0 | 3 | 2 |
Camaro Z28 | 13.3 | 8 | 350.0 | 245 | 3.73 | 3.840 | 15.41 | 0 | 0 | 3 | 4 |
Pontiac Firebird | 19.2 | 8 | 400.0 | 175 | 3.08 | 3.845 | 17.05 | 0 | 0 | 3 | 2 |
Fiat X1-9 | 27.3 | 4 | 79.0 | 66 | 4.08 | 1.935 | 18.90 | 1 | 1 | 4 | 1 |
Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 2.140 | 16.70 | 0 | 1 | 5 | 2 |
Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.90 | 1 | 1 | 5 | 2 |
Ford Pantera L | 15.8 | 8 | 351.0 | 264 | 4.22 | 3.170 | 14.50 | 0 | 1 | 5 | 4 |
Ferrari Dino | 19.7 | 6 | 145.0 | 175 | 3.62 | 2.770 | 15.50 | 0 | 1 | 5 | 6 |
Maserati Bora | 15.0 | 8 | 301.0 | 335 | 3.54 | 3.570 | 14.60 | 0 | 1 | 5 | 8 |
Volvo 142E | 21.4 | 4 | 121.0 | 109 | 4.11 | 2.780 | 18.60 | 1 | 1 | 4 | 2 |
Palmer Penguins 数据集,观察企鹅体重随性别和物种的不同而变化.
viewof bill_length_min = Inputs.range(
[32, 50],
{value: 35, step: 1, label: "Bill length (min):"}
)
viewof islands = Inputs.checkbox(
["Torgersen", "Biscoe", "Dream"],
{ value: ["Torgersen", "Biscoe"],
label: "Islands:"
}
)
Quarto 支持多种格式来创建演示文稿,包括:
revealjs — reveal.js (HTML), 本演讲稿
pptx — PowerPoint (MS Office), 华东师范大学模板
beamer — Beamer (LaTeX/PDF), 华东师范大学模板
这些格式各有优缺点。
Beamer 广为使用,特别适合数学类报告
revealjs 功能最强大,可以作为HTML幻灯片展示,也可以打印为PDF以便于分发
pptx 经模板定制后更亲民
名称 | 效果 |
---|---|
fade-out |
开始可见,淡出 |
fade-up |
向上滑动的同时淡入 |
fade-down |
向下滑动的同时淡入 |
fade-left |
向左滑动的同时淡入 |
fade-right |
向右滑动的同时淡入 |
fade-in-then-out |
先淡入,然后在下一步淡出 |
fade-in-then-semi-out |
淡入,然后在下一步变为半透明 |
grow |
放大 |
semi-fade-out |
淡出至半透明 |
shrink |
缩小 |
strike |
划掉 |
highlight-red |
文本变为红色 |
highlight-green |
文本变为绿色 |
highlight-blue |
文本变为蓝色 |
highlight-current-red |
文本变为红色,然后在下一步恢复原样 |
highlight-current-green |
文本变为绿色,然后在下一步恢复原样 |
highlight-current-blue |
文本变为蓝色,然后在下一步恢复原样 |
将内容按不同宽度分列展示
Motor Trend汽车道路测试
数据摘自1974年的《Motor Trend美国》杂志,包含了32款汽车的燃油消耗和10个设计及性能方面的数据.
更多参见:Multiple Columns
列表可以通过incremental
环境逐步显示
插入停顿(三个分开的点. . .
),也可以实现逐步显示
更多参见:Incremental Lists
淡入
向上滑动的同时淡入
向左滑动的同时淡入
先淡入,然后半透明淡出
Quarto提供10个内嵌的页面更换主题 (也可 自建合适的页面)
更多参见:Themes
background
或background-color
可用于改变页面的背景颜色 (支持CSS设定的颜色)background-transition
实现通过auto-animate
实现动画自动匹配
更多参见:Auto-Animate
通过auto-animate
实现动画自动匹配
更多参见:Auto-Animate
页面切换参数 | 描述 |
---|---|
none |
不切换 (默认) |
fade |
淡出到淡入 |
slide |
水平切换 |
convex |
以外凸的角度展示 |
concave |
以凹进的角度展示 |
zoom |
从中心开始放大 |
更多参见: Slide Transitions
Quarto Books,新一代bookdown, 将多个文档以章节形式组合起来,并以不同的形式呈现出来
HTML和PDF是两种主要的形式, 支持章节、公式、图形、表格、参考文献等的交叉引用. 个性化定制分别通过CSS和\LaTeX实现. 可通过quarto publish
命令发布到:
更多参见:Quarto Gallery
期刊论文创建需要标准化与个性化的协调与统一, 以极大地方便期刊的集约化管理与作者针对不同期刊快速完成论文的创建.
Quarto支持创建自定义格式,以扩展基本格式(如pdf、html和docx), 从而灵活地适应各类专业期刊论文的创建.
Quarto支持“单一来源发布”,即相同的Quarto文档源能够生成HTML和\LaTeX输出,还能够创建适合多个期刊所需的\LaTeX输出。实现此功能的关键功能包括:
配合Pandoc,能够灵活地适应期刊提供的本地\LaTeX模板;
实现针对HTML输出通过CSS进行定制,针对PDF输出通过LaTeX宏/环境进行定制;
根据各种期刊所需的样式自动格式化作者和隶属关系的标准化模式;
借助引文样式语言(CSL),根据各种期刊所需的样式自动格式化引文和参考文献.
更多参见:Quarto Journals
Quarto 团队已经建立的期刊模板
Thank you!
Stanley Tang (汤银才)
github: tangyc8866
Homepage: Homepage
Email: yctang@stat.ecnu.edu.cn
Wechat: tangyincai
本幻灯片由 Quarto revealjs 制作
在不打断演讲流程的情况下导航到超链接
使用 preview-links
选项可以在幻灯片上方打开链接
点击右上角的X
关闭预览
示例(点击打开):
更多参见:Preview Links
使用菜单按钮(幻灯片左下角)切换幻灯片菜单,以访问其他幻灯片和演示工具
m
键来打开和关闭菜单更多参见:Navigation
使用幻灯片左下角的黑板(chalkboard)按钮来切换黑板的显示, 也可使用按钮b
来切换黑板
使用幻灯片左下角的笔记画布(notes canvas)按钮来切换在当前幻灯片上的绘图功能, 也可使用按钮c
来切换笔记画布
更多参见:Chalkboard
按 o
键切换到概览模式:
按住 Alt
键(或在Macbook中按 Ctrl
键),然后点击放大对应的幻灯片
按 s
键(或使用演示菜单)打开演讲者视图
更多参见:Speaker View