第 3 章 数据科学的计算机生态系统

  数据科学导论是应用统计学、数据科学与大数据技术专业非常重要的一门专业必修课,力图帮助新生了解、认知专业,对涉及专业知识、专业技能,以及专业能力与素养等方面,进行比较全面的引导和指导性介绍,目的是为今后的大学和专业学习奠定最基本的基础。总而言之,本课程希望帮助刚刚进入大学,即将开始专业学习的学生:

启蒙大学,启迪专业!
跳出舒适区,摆脱迷茫,重塑自我,开启正确的大学生活和专业学习模式!

  数据科学导论采用模块化教学,设定如下六个内容模块:

  • [ ]课程概述
  • [ ]专业介绍
  • [x]数据科学的计算机生态系统
  • [ ]数据科学与统计学
  • [ ]数据科学的思维
  • [ ]数据科学与人工智能

构建自己的知识体系,全方位提升自己,用自己确定的能力,应对未来的不确定性!

  这里围绕第三个模块,了解数据科学涉及到的计算机技术,并学习和掌握专业所需的、能够提升专业学习效率和质量的通用的计算机工具语言和软件。

  前面已经提到,数据科学是数学、统计学和计算机科学的交叉科学,计算机科学与技术无疑是数据科学的基石之一。特别是以数据科学为基础的大数据与人工智能,主要涉及数据处理和数据计算,计算机技术更是起着不可或缺的作用。计算机技术的发展,直接推动大数据和人工智能理论和技术的发展和进步,反之,大数据与人工智能的需求,也促进了相关计算机技术的更新和发展。

  在这一模块,着眼于大数据技术及应用场景,简要介绍数据科学的计算机生态系统(Computer Ecosystem),以及对应用统计学和数据科学与大数据技术专业学生而言,指导 大家学习两个目前最流行、也最为重要和通用的专业学习和报告写作工具——思维导图(Mind Maping)和 Markdown 语言。

3.1 数据科学的计算机技术体系

  Speechpad的联合创始人Dave Feinleib于2012年发布大数据全景图 (Big Data Landscape) ,首次比较全面地描绘了当时侧重计算机科学的大数据技术体系。后来,Data Driven NYC社区的发起人之一的Matt Turck 等组织研究人员,每年绘制一次当年的侧重计算机科学的大数据技术相关的全景图,这是 2021 年版,其链接在这里,还可以从该网站中,了解最近几年的全景图,从中研究每一年的不同和变化。

  这里还有另一个视角的全景图 值得研究和参考。

  纵览这些全景图所给出的数据科学相关的计算机技术体系,大致可分为以下六个方面:

  • 基础设施方面
  • 企业应用方面
  • 分析工具方面
  • 行业应用方面
  • 开源工具方面
  • 数据资源方面

  数据科学相关的计算机技术与传统数据分析技术相比,其主要特征有以下几个方面:

  • 数据管理角度:非结构化数据越来越多,越来越重要,分布式存贮与处理
  • 数据计算角度:基于集群或云技术,采用分布式计算
  • 开发应用工具:开源软件和工具越来越多,在体系和生态中具有重要地位和作用

作为即将开始进行专业学习的学生,从全貌的角度,大概了解这些,是有益处的.

3.2 如何学习相关计算机技术

  面对如此众多的计算机技术,作为初学者,应该如何学习呢?

  这里,我们绘制了数据科学最核心的计算机技术与软件,作为专业学生,应该了解。在接下来的时间里,会通过课程设置,帮助大家学习和掌握其中最为关键的工具、软件和编程语言。但需要指出的是,由于学时有限,有些工具和软件,无法通过课堂学习,而需要大家利用课余时间自己学习和实践。

  必须要说清楚的是,面对如此众多的数据科学计算机技术、软件及编程语言,加之计算机技术的日新月异,对于任何人,亦或专业的学生,不可能也没必要逐一学习和精通,而应该学习和掌握最核心的软件技术,更重要的是在学习过程中,注意体会和把握计算机技术的内在实现逻辑,通过学习和实践,提升自己对计算机技术的感悟能力,将来,能够根据需要,具备再学习和可持续学习的能力。

  作为刚刚开始专业学习的学生,大部分学生刚刚接触到计算机,计算机的基础知识十分匮乏,导致计算机不仅仅没有成为学习的有力工具,甚至成为学习的障碍,制约了专业学习。数据科学没有足够的计算机技术支撑,无疑于纸上谈兵,根本做不了任何事情,更不要说解决数据科学和人工智能的实际问题了。

  首先,我们了解一下计算机的基本常识性知识:

计算机组成及原理

图 3.1: 计算机组成及原理

  • 计算机系统由硬件(Hardware)和软件(Software)组成,软件由操作系统(Operation System)和为了各种不同目的而开发的应用软件(Application Software,APP)组成。计算机硬件性能决定了其软件的效率,对计算机硬件、组成、原理和运行机制有较好的理解,会促进和增强计算机的使用技能。
计算机运行逻辑

图 3.2: 计算机运行逻辑

  • 对使用者而言,计算机技术可以分为基本操作层面,包括操作系统使用、平台搭建调试和软件安装卸载,另一方面属于深度应用层面,涉及程序设计、软件开发和产品研制。
  • 高手的经验之谈:
    • 电脑主要靠自悟、自学
    • 一定要勤动手,但切记既要动手,更要动脑
    • 在实践中,要注意总结经验、教训
    • 要学会到网上搜索到你需要的信息,但一定要想方设法自己解决遇到问题,时间是必须要花的,“学费”是必须要交的,高手是”玩儿”出来
    • 要特别体会计算机操作、软件运行的内在的逻辑,有果必有因,学会从计算机逻辑角度思考问题的可能解决途径和办法,这是成为高手的很重要的一个因素。
    • 不要轻易放过出现的问题和你的疑惑,尝试自己解决它,弄清楚它
  • 新手的”武林秘籍”:
    • 不熟悉的情况下,要清楚你的每一步操作的目的,要仔细阅读和理解各种”弹窗”信息,要知道如何”回退”到前一个状态
    • 要逐渐养成良好的计算机保养、管理和使用习惯,如同我们的房间,需要及时清洁、整理
    • 尽量保证主系统的安全,即在你的计算机中安装一个虚拟机.

  简而言之,高手是自己练成的,不是别人教出来的!

  就计算机技术而论:

问题是最好的老师
偷懒是进步的阶梯

  最后,要特别补充和强调的是:在互联网和计算机技术高度发达的今天,在分享、共享、协作的理念和精神的推动下,人们制定了开源协议(Open Source Licence),并在遵从开源协议的基础上,大量的开源软件层出不穷,极大地推动了计算机应用。特备是在大数据与人工智能领域,人们选择相关软件时,优先使用开源、免费的系统、平台和软件。

  详细了解开源软件相关信息请参阅百度百科

3.3 学习几个通用的软件工具

接下来,我们介绍并学习几个数据科学流行、通用的软件工具.

3.3.1 虚拟机

  虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统.也就是在你的计算机宿主系统中,通过虚拟机安装另一个操作系统.这样,你就可以在虚拟机中的计算机及其操作系统中,进行各种尝试,而不用担心宿主系统受到破坏;虚拟机中的计算机及其操作系统可随时删除、重新建立.

  推荐免费的虚拟机软件VirtualBox,特别是最新的版本 7.0 ,已推出可以适配 Apple Silicon ARM64 M 芯片的 Beta 版,这对使用苹果电脑的同学是一个好消息!

  大家可以下载与宿主系统匹配的版本,参考百度资源,安装调试!

3.3.2 思维导图

  思维导图又叫心智导图或脑图,是一种模仿人类大脑的神经元自然机理和发散性自然思考方式,表达发散性思维的有效图形思维工具,它简单却又很有效,是一种革命性的思维工具。思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像、颜色等建立记忆链接。思维导图充分运用左右脑的机能,利用记忆、阅读、思维的规律,协助人们在科学与艺术、逻辑与想象之间平衡发展,从而开启人类大脑的无限潜能。

  托尼·博赞(Tony Buzan),他因创建了“思维导图”而以大脑先生闻名于世。

托尼·博赞和思维导图由来

图 3.3: 托尼·博赞和思维导图由来

  思维导图将思维形象化,大部分的思维导图具有如下特征:

  • 一个明确的中心
  • 以中心为基础,向四周发散分支
  • 分支是由一个关键词/图形等组成

  也就是说,思维导图是聚焦某个中心话题,逐步向外发散思考的一种工具。而其他一些概念图、路线图等图形,不能称为思维导图。

  思维导图可以用手画,更推荐使用专门的计算机软件制作,便于保存、交流和发布。推荐以下免费、功能强大的思维导图制作工具:

  • Zhimap —— 具有网页版和 可本地安装的APP,可插入富文本,能用LaTeX 插入数学公式
  • ProcessOn —— 具有网页版和可本地安装的 APP,能用LaTeX 插入数学公式,免费账户有文件数量限制
  • Freeplane —— 只有用于本地安装的 APP,能用 LaTeX 插入数学公式,功能强大

  需要指出的是,思维导图的质量取决于大脑思维的质量,大脑思维的质量决定了思维导图的质量!至于使用哪个思维导图软件,可以以功能为导向,重在熟练。

你的目的:Upgrade your brain!
你的目标:清晰、醒目、漂亮!

  大家今后要养成用思维导图学习、复习和总结知识,用思维导图分析问题的习惯.

3.3.3 Markdown 轻量标记语言

  Markdown 是一种可以使用纯文本格式编写的轻量级标记语言,通过简单的标记语法,它可以使普通纯文本具有一定的格式,其文档后缀名为 .md 或 .markdown。基于 markdown 的源文本,可以转换导出 PPT、LaTeX、HTML、Word、PDF、Epub、JPG 等多种格式的文档。目前,在数据科学、计算机、互联网等学界和业界,广泛用于技术文档的写作和交流。

  • Markdown 的由来

  John Gruber在2004年创造了Markdown语言,在语法上有很大一部分是跟亚伦·斯沃茨(Aaron Swartz)共同合作的,也有称 Markdown 语言是 Aaron Swartz 发明的。

亚伦·斯沃茨(Aaron Swartz)是年少成名的计算机天才,著名社交网站Reddit联合创始人,web.py的设计者。他亦是数字时代的罗宾汉,致力于网络信息开放,却因涉嫌非法侵入麻省理工学院(MIT)和JSTOR(全称Journal Storage,存储学术期刊的在线系统)被指控,将受到最高35年监禁和100万美元罚款。该案在认罪辩诉阶段的时候,亚伦·斯沃茨于2013年1月11日在其纽约布鲁克林的寓所内自杀,年仅26岁。

——摘自百度百科

  发明 Markdown语言的目的是希望每个人都能使用“易于源代码阅读、易于撰写的纯文字格式,用最少量的、最简洁的、最易懂的以及最容易使用的标记代码,控制最常用到的格式,并选择性的转换成有效的XHTML(或是HTML),使得利用电子邮件和网页进行写作、交流和发布内容变得轻而易举”。

  • Markdown 的发展

  刚开始,Markdown追求最简单的格式化文本方法,满足最经常性的需要,它不会做任何花哨的事情,比如改变字体大小、颜色或类型等等,只是着眼于最基本的,使用你已经知道的键盘符号。

  Markdown逐渐成为典型的转换为HTML的非正式规范和重要实现。随着时间的推移,出现了许多Markdown扩展。人们开发这些主要是由于在基本语法之上需要额外的功能(例如表格,脚注,列表等)。其中一些行为偏离了最开始的初衷。与此同时,非正式规范中的一些含糊不清引起了人们的注意。

  这些问题促使Markdown的标准化工作(有兴趣者请点击了解)。

  • Markdown 的语法

  如前所述, Markdown 语法的标准化工作基本告一段落, 但使用者必须要知道, Markdown 标记语言的产生有着强烈和明确的目的,其本质并不是独立的,而是中间的、过渡性的语言,因为最终是要转换为其它格式。 因此,目前关于Markdown 语法一般分为三个层次:

- **Markdown 基本语法**:通常是指Markdown核心语法,为所有编辑器和环境所支持
- **Markdown 语法扩展**:也称为 Markdown 方言。是指开发Markdown编辑器的开发者们在 Markdown 核心语法的基础上自定义的扩展功能,这部分Markdown语法可能只适用于特定的编辑器或环境。
- **Markdown 功能扩展**:为了某些环境下的特定需要,在 Markdown 语法中,可以使用LaTeX、 HTML、CSS甚至 JavaScript 等进行特殊控制和实现。

  关于 Markdown 语法,网上资源很多,本文不再赘述,大家可以上网搜索学习。但对于应用统计学和数据科学与大数据技术专业的学生,这要强调两种使用 Markdown 的环境:

  1. 使用 LaTeX 进行数学符号和公式的输入 —— 完全与 LaTeX 一致
  • 行内公式(inline mode)

  用一对美元号`$ $`框在一起,例如`$ ax^2 + bx +c$`,显示结果为 \(ax^2 + bx +c\)

  • 行间公式(display mode)

  用一对双美元号`$$ $$`框在一起,则公式单独另起一行居中显示,例如代码`$$I_{xx}=\iint_Ry^2e^{2x^2}f(x,y)\sin x\cdot{}dydx$$`,显示为

\[I_{xx}=\iint_Ry^2e^{2x^2}f(x,y)\sin x\cdot{}dydx\]

  1. 代码段排版 —— 高亮显示关键字,可读性好
  • 行内代码(inline code)

  使用` `把代码包围起来,例如 print(i) 与 print(i),看出不同了吗?

  • 代码区块(block code)

  使用```js ...code... ```把JavaScript 代码包围起来,开头的``` 左边 js 是语言的类型标记,例如一段JavaScript 语言代码显示效果如下:

(function() {
  var quotes = document.getElementsByTagName('blockquote'), i, quote;
  for (i = 0; i < quotes.length; i++) {
    quote = quotes[i];
    var n = quote.children.length;
    if (n === 0) continue;
    var el = quote.children[n - 1];
    if (!el || el.nodeName !== 'P') continue;
    // right-align a quote footer if it starts with ---
    if (/^—/.test(el.textContent)) el.style.textAlign = 'right';
  }
})();

  最难的不是语法,而是带着问题,有目的地去使用、去实现……

  • 为什么使用 Markdown

    1. 是目前互联网上最流行的写作语言
    2. 纯文本格式(无格式)、文件体积小,简洁高效,兼容性极强,可以用任何文本编辑器打开、阅读和写作;
    3. Markdown 标记语法有清晰的排版格式和极好的可读性,让你专注于写作而不是排版
    4. 用Markdown 你可以轻松将文本输出为 html、pdf等格式,制作网站、电子书、写博客等。许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。例如:GitHub、简书、reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge等。
    5. 与 R 或 Python 结合,形成动态报告写作系统

    你的目的:让用 Markdown 写作成为自己的习惯! 你的目标:让自己成为用 Markdown 写作的高手!

  • 推荐的 Markdown 编辑器

  为了提高编辑的效率和质量,人们开发了众多的 Markdown 编辑器,这些编辑器各有千秋,功能大同小异.这里给出三个最流行的编辑器

  初学者和专门用Markdown 做笔记,推荐 Joplin,从程序员的角度,推荐使用 VSCode结合Markdown All in One、Markdown Preview Enhanced、Marpit等插件使用)构建Markdown 编辑器

3.3.4 绘图软件

  在学习、工作中,经常需要整理学习笔记、撰写分析报告,以及制作用于展示和交流的投影片等。在这个时候,往往需要画流程图、时序图、类图、神经网络图等图形,用于丰富和精炼报告或投影片。学习并熟练掌握一款功能强大的绘图软件是十分必要的,为此,推荐以下三个免费的绘图软件,虽然免费,但功能却十分强大又简单易用,应该可以满足绝大多数情况下的绘图需求。

  • Draw.io

  Draw.io支持多平台(网页/Win/Mac/Linux),开源免费,支持快速画各种类型的图形,且有在线和离线两种版本,绘图是通过拖拽的方式完成绘图。

  • PlantUML

  PlantUML也是一个开源项目,支持快速绘制时序图、用例图、类图、活动图、组件图、状态图、对象图、部署图等。同时还支持非 UML 图的甘特图、架构图等,绘图是通过写代码的方式完成。

  • Gnuplot

  与前两个绘图软件有所不同,Gnuplot 是一个小巧而强大,开源、免费的跨平台(Windows,Mac,Linux)的科研绘图工具。官网是gnuplot 。其特点在于绘图质量高且快,易学易用,仅需少量代码,就可得到用于发表的高质量图片,中英文参考文档丰富。

  2D、3D函数绘图是Gnuplot的强项,甚至可做简单的数据处理和分析,比如统计和多参数函数拟合等。

  Gnuplot更多使用其离线版本,但现在也有了一个基于 Jupyterhub 的在线版本Gnupyter。其绘图方式是通过专有命令(代码)实现。

绘制各种图形时,大家要注意以下几个原则:

  • 简洁:清晰、明了、准确表达你要表达的含义和内容,越简单越好;

  • 规范:图形的种类很多,绘制时要注意每种图形、以及所使用的绘图符号元素的规范要求,否则,其它人无法理解,自己也容易产生混乱;例如今后常用的的流程图是有基本规则和规范的,以下符号和意义供大家参考.

3.3.5 LaTeX 科技排版系统

  LaTeX(/ˈlɑːtɛx/,常被读作/ˈlɑːtɛk/或/ˈleɪtɛk/,写作“LaTeX”),是一种基于TeX的排版系统,由美国计算机科学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式系统的处理,即使使用者没有排版和程序设计的知识也可以充分发挥由TeX所提供的强大功能,不必一一亲自去设计或校对,能在几天,甚至几小时内生成很多具有书籍品质的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学、物理文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。

  LaTeX使用TeX作为它的格式化引擎,集成了大量的基于 TeX 的宏命令,使得 TeX更易于使用。

  LaTeX遵循呈现与内容分离的设计理念,以便作者可以专注于他们正在编写的内容,而不必同时注视其外观。在准备LaTeX文档时,作者使用章(chapter)、节(section)、表(table)、图(figure)等简单的概念指定文档的逻辑结构,并让LaTeX系统负责这些结构的格式和布局。LaTeX系统与前面介绍的 Markdown 语言一样,是一种可以处理排版和渲染文本的标记语言.

  LaTeX 支持各国语言,现在对中文支持的最流行的做法是通过 CJK 包和 XeTeX系统。XeLaTeX则是为了支持Unicode和现代字体,直接使用本地计算机安装的字体的LaTeX 扩展系统之一,XeLaTeX大大降低了使用LaTeX处理双字节语言文字(中日韩文)的难度。

  要使用 LaTeX 排版系统,需要了解LaTeX的一些基本知识和相关命令,通常需要使用专门的编辑器来编写命令和代码,这方面的网络资源十分丰富,大家可随用随查,对于初学者,从一个模版开始是必须的和必要的!

  两个专业的毕业论文模版就是由 LaTeX 制作的,LaTeX 的学习曲线比较陡峭,需要持久的耐心和持续的使用.

3.4 拓展学习与思考

  1. 思维导图学习视频资源

  2. Markdown 学习视频资源

  3. 百度百科:开源软件

  4. 各种开源协议介绍

  5. 观看下面的视频,请写下你的思考!