1.1 语言抉择
行业内可以做统计分析和建模的软件汗牛充栋,比较顶级的收费产品有 SAS 和 SPSS,在科学计算领域的 Matlab 和 Mathematica 也有相当强的统计功能,而用户基数最大的是微软 Excel,抛开微软公司的商业手段不说,Excel 的市场份额却是既成事实。 Brian D. Ripley 20 多年前的一句话很有意思,放在当下也是适用的。
Let’s not kid ourselves: the most widely used piece of software for statistics is Excel.
— Brian D. Ripley [6]
有鉴于 Excel 在人文、社会、经济和管理等领域的影响力,熟悉 R 语言的人把它看作超级收费版的 Excel,这实在是一点也不过分。事实上,我司就是一个很好的明证,一个在线教育类的互联网公司,各大业务部门都在使用 Excel 作为主要的数据分析工具。然而,Excel 的不足也十分突出,工作过程无法保存和重复利用,Excel 也不是数据库,数据集稍大,操作起来愈发困难,对于复杂的展示,需要借助内嵌的 VBA,由于缺乏版本控制,随着时间的推移,几乎不可维护。所以,我们还是放弃 Excel 吧,Jenny Bryan 更在 2016 年国际 R 语言大会上的直截了当地喊出了这句话2。Nathan Stephens 对 Excel 的缺陷不足做了全面的总结3。
Some people familiar with R describe it as a supercharged version of Microsoft’s Excel spreadsheet software.
— Ashlee Vance 4
另一方面,我们谈谈开源领域的佼佼者 — R (https://cran.r-project.org/),Python (https://www.python.org/) 和 Octave (http://www.gnu.org/software/octave/)。Python 号称万能的胶水语言,从系统运维到深度学习都有它的广泛存在,它被各大主流 Linux 系统内置,语言风格上更接近于基数庞大的开发人员,形成了强大的生态平台。 Octave 号称是可以替代 Matlab 的科学计算软件,在兼容 Matlab 的方面确实做的很不错,然而,根据 Julia 官网给出的各大编程语言的测试 https://julialang.org/benchmarks/,性能上不能相提并论。
R 提供了丰富的图形接口,包括 Tcl/Tk , Gtk, Shiny 等,以及基于它们的衍生品 rattle(RGtk2)、Rcmdr(tcl/tk)、radiant(shiny)。更多底层介绍,见 John Chamber 的著作《Extending R》。
Eviews 时间序列和计量经济模型,相比于 Eviews, Stata 是综合型的统计软件,提供丰富的统计模型, SPSS 同 Stata 类似,Minitab, JASP 是开源的软件, Octave 是对标 Matlab 的工程计算软件, 有丰富的优化功能,是一门编程语言兼软件,为求解统计模型的参数提供了广泛的基础能力。Tableau 提供强大的分析和打造数据产品的能力。TikZ 在绘制示意图方面有很大优势,特别是示意图里包含数学公式,这更是 LaTeX 所擅长的方面。
JASP https://jasp-stats.org 是一款免费的统计软件,源代码托管在 Github 上 https://github.com/jasp-stats/jasp-desktop,主要由阿姆斯特丹大学 E. J. Wagenmakers 教授 https://www.ejwagenmakers.com/ 领导的团队维护开发,实现了很多贝叶斯和频率统计方法,相似的图形用户界面使得 JASP 可以作为 SPSS 的替代,目前实现的功能见 https://jasp-stats.org/current-functionality/,统计方法见博客 https://www.bayesianspectacles.org/。
国内可视化分析平台,比如 hiplot 基于 R 语言实现可视化分析,各类图形的介绍见文档,极大地降低数据分析人员探索分析的门槛,节省了时间,同时非专业内的人也可借助其完成分析探索的过程,只需明白各类图形的含义即可。美团也建设了自己的可视化分析平台帮助运营人员,详见文档
Patrick Burns 收集整理了 R 语言中奇葩的现象,写成 The R Inferno 直译过来就是《R 之炼狱》。这些奇葩的怪现象可以看做是 R 风格的一部分,对于编程人员来说就是一些建议和技巧,参考之可以避开某些坑。 Paul E. Johnson 整理了一份真正的 R 语言建议,记录了他自己从 SAS 转换到 R 的过程中遇到的各种问题 http://pj.freefaculty.org/R/Rtips.html。Michail Tsagris 和 Manos Papadakis 也收集了 70 多条 R 编程的技巧和建议,力求以更加 R 范地将语言特性发挥到极致 [7],Martin Mächler 提供了一份 Good Practices in R Programming。
Python 社区广泛流传着 Tim Peters 的 《Python 之禅》,它已经整合进每一版 Python 软件中,只需在 Python 控制台里执行 import this
可以获得。
- Beautiful is better than ugly.
- Explicit is better than implicit.
- Simple is better than complex.
- Complex is better than complicated.
- Flat is better than nested.
- Sparse is better than dense.
- Readability counts.
- Special cases aren’t special enough to break the rules.
- Although practicality beats purity.
- Errors should never pass silently.
- Unless explicitly silenced.
- In the face of ambiguity, refuse the temptation to guess.
- There should be one– and preferably only one –obvious way to do it.
- Although that way may not be obvious at first unless you’re Dutch.
- Now is better than never.
- Although never is often better than right now.
- If the implementation is hard to explain, it’s a bad idea.
- If the implementation is easy to explain, it may be a good idea.
- Namespaces are one honking great idea – let’s do more of those!
— The Zen of Python
总之,编程语言到一定境界都是殊途同归的,对美的认识也是趋同的,道理更是相通的,Python 社区的 Pandas https://github.com/pandas-dev/pandas 和 Matplotlib https://github.com/matplotlib/matplotlib 也有数据框和图形语法的影子。Pandas https://github.com/pandas-dev/pandas 明确说了要提供与 data.frame 类似的数据结构和对应统计函数等,而 Matplotlib 偷了 ggplot2 绘图样式 https://matplotlib.org/3.2.2/gallery/style_sheets/ggplot.html。