案例上手 Python 数据可视化

课程亮点

  • 6 个常用的数据可视化工具使用方法
  • 20 个案例贯穿各个工具的学习过程
  • 基于 GUI / HTML / Web 网站多种绘图风格
  • 中、美、日三国不同思想的制图工具
  • 从静态到交互,满足不同需要的图示

课程背景

数据可视化是数据分析和机器学习的重要环节,比如数据清洗、特征工程、机器学习、数据分析(特别是报告)、评估等环节都会用到“数据可视化”技术。

数据可视化同时还广泛存在于各种商业、政务、教育等领域的业务表述之中。因为“图”才是喜闻乐见、通俗易懂的,也是最直观的。

不仅如此,数据可视化还是独立的业务,在现代社会中有各种引人注目的操作,比如将抽象的东西“可视化”、“直观化”等。

本课程主要向读者介绍了数据可视化中常用工具的使用方法,并且通过多个实战项目案例,让读者更深入地理解可视化的各种方法和技能。

作者介绍

齐伟,苏州研途教育科技有限公司 CTO,在 Web 开发、数据分析、机器学习领域有比较丰富的从业经验,并在大学开设过《机器学习实践》课程。曾出版书籍:《跟老齐学Python:轻松入门》《跟老齐学Python:Django实战》《跟老齐学Python:数据分析》和《Python大学实用教程》(大学教材)。

课程大纲

enter image description here

课程内容

开篇词:为什么学习可视化,应该怎么学

每一本书或每一个课程,都会有前言或开篇词,但是,很多学习者不喜欢阅读前言,这就大错特错了,因为在前言中往往会包含一些作者想要表达的核心观点。

我的日常工作就是写程序,业余时间也写了几本书,也有幸偶尔会与周边几所大学的一些学生分享某些技术。在与我交流的一些程序员、读者和学生中,会提出很多关于如何学习某项技能的问题——这里指的是软件开发或者大数据、机器学习方面,不包括诸如人际关系等技能。在这里,我把其中的重要问题和回答,整理出来,供读者参考。

跟谁学

这里的“谁”,不仅包括“人”,还包括“物”。

先说“物”。

早先学习的媒介比较简单,就是图书,要学习什么知识,没有其他选择,就是买本书。而现如今,选择就多了,除了印刷版的图书之外,还有电子版、音频和视频,甚至视频还分为微课、慕课和课堂实录等,可谓是五花八门。那么,应该选择什么媒介来学习呢?

很显然,上述问题有一个大前提,那就是“自学”,即自己控制学习过程的学习。如果选择这种学习方式,那就要检讨自我:“是否具有自我控制能力?”。判断标准也比较简单,那就是回头看看在自己的求学过程中,是否运用过这种能力?如果答案是肯定的,那么面对这次自学,就会有信心、有方法了;如果是否定的,并不意味着这次不能自学,而是要为自己的这个“第一次”好好谋划一番了。

检讨完自己,确立能够自学,就继续下面的操作;否则,请跳过,直接找一个老师,别吝惜多花钱,从长远来看,最好的投资是跟着老师去学。自学,并非适合任何人。

再回到刚才的问题,选择哪一种学习媒介?

我的回答是:要了解自己,根据自己的情况而定。

比如,自己比较擅长阅读,那么就可以选择借助书(包括印刷版和电子版)来学习;如果看书时间稍长,就犯困,建议还是选择视频媒介稍好一些。但是,即便如此,我也建议要有一本相关的书,因为它能够让我们随意翻阅,可以随时解决某些棘手问题——或许搜索引擎更适合?非也!对于一个初学者,搜索引擎给出的东西太庞杂了,难以找到答案。

“物”选好之后,就要选“人”了。

不论选择书还是线上或线下的课程,都有一些大师或名师,俗话说“名师出高徒”——更符合我们内心的应该是“大师出高徒”。因此,要找一个超级牛的人,比如在大厂工作过的顶级开发者、名校的名教授等,只要看了他们的书、听了他们的课,就能达到登峰造极之高度,再不济至少也要快速掌握。

这是很多人的想法,也能理解,谁不希望以最小的投入来获得最大的产出?最好是“不劳而获”。

只是残酷的现实不断地告诉我们,“大师”和“高徒”之间,不是正相关的。请看下面的思想实验

思想实验是指:使用想像力去进行的实验,所做的都是在现实中无法做到(或现实未做到)的实验。例如,爱因斯坦有相对运动的著名思想实验。思想实验需求的是想像力,而不是感官。

假设某名校,有一个宇宙级的大师教授人工智能课,每年听课的学生有 60 人,该大师在该校授课 10 年,累计有 600 名学生。如果“大师”与“高徒”正相关,那么新的宇宙级大师应该至少有几百名。

但,上述推论与事实不符合。

“名师(大师)出高徒”,只是听起来很好,符合个人的愿望罢了,但不是客观真理。

什么原因?

因为他们不是专门针对你的。

所以,选“人”的标准不是看其头衔,而是看其提供的学习内容是否适合自己。特别是“小白”,更要以通俗易懂的学习资料入手,跟着能“深入浅出”地讲述的“好老师”去学。

学什么

这个问题其实很难回答。因为就编程而言,可以学习的东西就很多了,现在又有大数据、机器学习、人工智能等领域。

至于学什么,拷问的应该是自己,而不是问别人。检视自己擅长什么、喜欢什么,未来有什么规划,根据这个来确定学什么。

有的人也列出了一些非常简明扼要的判断标准,比如:

  • 什么方向工资高,就学什么
  • 现在媒体上宣传什么,就学什么
  • 大师说学什么,就学什么
  • 招聘网站上什么岗位多,就学什么

是否可以据此确定学习内容,此处不置可否。还是做一个思想实验。

假如时光倒退 20 年。在 20 年前,用上面的标准看一看,应该学什么?什么也不需要学,专门买房子(得有好爹)就可以了!

选择学什么的确很困难。高考报志愿的时候,众多家长都纠结于孩子要学什么专业的问题。

除了上帝,谁都不晓得未来什么样,与其纠结某个具体的专业,不如学“万人敌”。

籍曰:“书足以记名姓而已,剑一人敌,不足学,学万人敌。”

——《史记·项羽本纪》

每个领域,都会有一些沉淀下来的基础知识和技能,这是要学的。此外,更重要的是“学习能力”,学习内容是增长学习能力的载体,学习能力就是“万人敌”。

因此,本课程从始至终,会贯彻一个宗旨:提升学习能力,不是唠唠叨叨地诉说知识点。

怎么学

关于学习方法问题,很多书中都有所论述,此处不详述,因为方法都差不多,关键是能不能执行的问题。

学习是一个苦差事,我们从本性上是排斥的。

因此,古人云“书山有路勤为径,学海无涯苦作舟”。

有了“肯吃苦”的思想准备之后,如下具体操作方案,供读者参考:

  • 认真阅读书中的每句话,并且反问自己是否理解了,如果没有理解立刻 Google 相关的信息,这就是把书读厚的理念。
  • 要理解书中的程序示例,逐行理解,甚至于逐行注释,并且,一定要自己亲自敲代码,千万不要复制代码。
  • 在上面的基础上,独立地把示例程序写出来,并进行调试。如果遇到了问题,比如报错了,此时应该“闻过则喜”,因为这是进步的阶梯,务必对照书上的讲解,反思自己写的代码。
  • 要阅读有关技术文档,不论它是中文的还是英文的——这点很重要,千万不要因为语言问题而放弃阅读。
  • 用 Google 搜索(这里不是在做广告,我也不是‘美分’什么的,只是介绍个人的经验),并且不限于使用中文作为搜索关键词。

如果有条件,还建议多参加一些有关技术的专题活动,比如社区活动等,不仅能扩展自己的视野,还能结交很多同道中人。

为什么学“数据可视化”

说的有点多了,现在才回到正题。

如果有志于在大数据、机器学习、人工智能领域从业的话,“数据可视化”是必不可少的,因此说不得不学。

接下来就会有另外一个问题:为什么要选择本达人课作为学习资料?

那就要了解本达人课为读者做了什么。

  • 深入浅出阐述有关知识点和技能,同时“授人以渔”,这是核心目标。

  • 介绍目前常用的几种工具,当然不可能穷尽所有工具,挑选了部分具有代表性的。

    • Matplotlib
    • Seaborn
    • Plotnine
    • Plotly
    • Pyecharts
    • Bokeh
  • 在讲解的过程中,配以丰富的示例。

其他说明

本达人课的所有程序都是基于 Python 语言(Python 3.x 版)来写的,需要做好如下准备。

  • 准备一台适合开发用的计算机,不论是台式机还是笔记本均可。但是,它是否适合开发?只要不是太古老的机器,硬件方面都差不多,关键是操作系统。本达人课中的所有演示都不是基于 Windows 操作系统(也算是我的偏执吧),我不习惯把 Windows 操作系统列位于适合开发的环境,倒是在日常办公方面比较适合,在开发方面我习惯使用 Linux 或者 Mac OS 操作系统。读者可根据自己的喜好选择。本达人课的所有代码,是跨平台的,跟用什么操作系统无关。
  • 已经能够使用 Python 语言编程。
  • 掌握 Numpy 和 Pandas 的基本知识。

这是学习本达人课内容的前置条件。

这些都准备好之后,就开始学习。

课程大纲

本课程分为七大部分,共计 28 篇(含开篇词和结尾)。

  • 准备部分(磨刀不误砍柴,第 0-1 ~ 0-3 课),介绍数据科学工程师的工作流程以及数据可视化的必要性,并且指导学习者安装有关工具。通过这部分的学习,能够对数据科学以及从业者的工作有个总体认识,晓得数据可视化的地位,并在本地计算机安装有关工具。

  • 第一部分(开山鼻祖:Matplotlib,第 1-1 ~ 1-6 课),介绍 Python 语言生态中虽然古老但依然被使用的数据可视化工具 Matplotlib。通过这部分的学习,能够掌握 Matplotlib 的应用思想和方法,并能够绘制常用的统计图。

  • 第二部分(后起之秀:Seaborn,第 2-1 ~ 2-5 课),介绍基于 Matplotlib 发起而来的一种常用的可视化工具 Seaborn。通过这部分的学习,能够掌握 Seaborn 的特点,并熟悉常用统计图的绘制方法。

  • 第三部分(另立门派:Plotnine,第 3-1 ~ 3-3 课),Plotnine 是根据图层概念制图的工具,不同于前面两部分的工具。通过这部分的学习,能够理解图层的概念以及在制图中的应用,掌握 Plotnine 灵活制作个性化图示的方法。

  • 第四部分(特立独行:Plotly,第 4-1 ~ 4-4 课),Plotly 是一款能够“两栖作战”的工具,既能得到静态图片,也能生成动态交互的图示,即从这部分开始,制图工具进入“交互”阶段。通过这部分的学习,能够掌握常用统计图(具有交互功能)的绘制,并可以生成 HTML 文件。

  • 第五部分(中华武功:Pyecharts,第 5-1 ~ 5-2 课),Pyecharts 是非常好的国产工具——中文文档,非常可亲近。Pyecharts 提供的工具和色彩渲染上,都比前述工具有所突破。通过这部分的学习,能够掌握 Pyecharts 的使用方法,特别是利用它实现地理信息可视化和基于 Web 项目发布可视化图示。

  • 第六部分(岛国薄纱:Bokeh,第 6-1 ~ 6-3 课),这是一款来自岛国日本的可视化工具,除了完成通常的操作之外,在交互功能上,比 Plotly 和 Pyecharts 更有特色。通过这部分的学习,能够掌握 Bokeh 的使用方法,特别是 Bokeh 自带服务,能发布基于网络的图示。

课程寄语

最后送上励志名言:

努力面前,忘记背后,向着标杆直跑。

当遇到貌似无法克服的困难时,当怀疑自己是否能够学会时,当受到其他诱惑想放弃时,请来读一读这句话。

开始!

第0-1课:数据科学工作流程

每门学科,都会有一些前置的信息,这里还要再继续唠叨唠叨,最好别引起你的反感呦。

愚见,下面的信息,是需要首先明晰的。

  • 数据分析、人工智能等与数据相关的工作,其工作流程是什么?
  • “数据可视化”,在数据科学中占有什么位置?
  • 为了学会数据可视化的各种技能,都需要哪些前置知识和能力?

拙作《跟老齐学 Python:数据分析》一书中,列出了数据科学的发展简史,从中能体会到人类对数据的研究和应用。随着技术的发展,本质上是社会生产力的发展,数据驱动决策的观念越来越深入人心(此处推荐观看电影《点球成金》)。

都在谈论“数据科学”,那么什么是数据科学?需要有一个明确的说明。

对于概念性的东西,推荐参考“维基百科”或者某些经典著作。

下面的定义来自“维基百科”中的“数据科学”词条。

数据科学(英语:Data Science),又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

阅读了词条的解释,算是对数据科学有了初步的感性认识。

根据经验,对于专有名词的英文词条解释与其对应的汉语说明,还是有差异的。因此,特别建议再阅读“数据科学”的英文词条:Data science

Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from data in various forms, both structured and unstructured, similar to data mining.

Data science is a "concept to unify statistics, data analysis, machine learning and their related methods" in order to "understand and analyze actual phenomena" with data. It employs techniques and theories drawn from many fields within the context of mathematics, statistics, information science, and computer science.

显然,中文“数据科学”和英文的“Data Science”两个词条的内容,从信息量上看,还是有差别的。

根据 Data Science 中的说明,数据科学所处理的数据包括“Structured”和“Unstructured”(即“结构化的”和“非结构化的”)。数据科学中有一个重要环节,名曰“特征工程”,就是要将一些非结构化的数据转变成通常算法能够处理的结构化的数据。当然,这不是本课程要讲述的内容,本课程中使用的数据都是“结构化的”数据。

通常,科学是基础理论部分,它不直接产生价值,它的价值会通过工程体现出来。因此,对应着“数据科学”的应用,就是“数据工程”。那么“数据工程”是怎样的实施流程呢?

下图是综合了一些书籍所述和个人工作经验而来的。

Data science workflow

图 数据工程流程

图的优势是能够把很多信息集中显示在眼前,给人以直观视觉化的体验,这也是“可视化”的优势。但是,图示也有明显的劣势,那就是表述上不严谨,容易产生歧义。比如面对一幅山水画,可能会有各种不同的理解;但是面对 F = ma 这个牛顿第二定律的表达式时,就只能有一种理解,不能仁者见仁智者见智。

因此,通常图示都要配说明。

理解商业问题

这是“数据工程”的开始,从业者——数据工程师,必须对相应的业务有所了解,这也是数据工程师特有的市场价值之一(高工资是有道理的)。

理解商业问题,并非是成为业务高手,而是要能够从业务中梳理出与数据工程项目有关的环节,特别是将业务中某些问题转化为数据问题。

比如,某公司打算开发一套能够评价学生学习情况的软件系统,其中应用了所谓“过程性评价”的学习发展评价方式,要实现这种评价方式,就需要用到数据分析、机器学习的有关技能。

面对这个项目,首先问如下几个问题:

  • 哪些类型的数据能够支持“过程性评价”?
  • 通过什么渠道可以获取这些数据?
  • 所获得的数据可靠程度如何?

以上问题获得了明确答复之后,再考虑后续的工作,否则项目就成为了空中楼阁。

通过理解商业问题,把通常的业务人员习惯用的描述性语言,转变为具体的科学性语言,才能对某些环节作出“数据性”回复,实现“数据驱动决策”目标。

还是用前面的例子来说明,通常的教育工作者或者业务人员,会对“过程性评价”的结果这样描述:过程性评价能够对学生的成长发展提供指导,而不是一考定终身。

这种说法貌似容易理解,但里面充满了歧义,列出几项(包含但不限于):

  • 学生成长发展的指标是什么?是考试成绩?心理发展?身体状况?
    • 如果是考试成绩,是周考试成绩?月考试成绩?学期末考试成绩?
    • 如果是心理发展,用什么量表测量?还是凭借主观观察?
    • 如果是身体状况,又要测量哪些项目?
  • 衡量学生发展的周期是多长?学年?学期?月?周?日?小时?每次作业?

显然,要落实所谓的“素质教育”,需要解决的问题真的太多、太复杂,绝非几句口号和几篇文章就能解决的。

若要从数据层面解决上述问题,就必须把有关数据的问题提炼出来,用准确的语言表述,然后考查业务是否能够支持这些问题。

数据收集

数据收集和前述理解商业问题,两者之间是一个互动关系。研究收集数据的方法,也是对商业问题的再度理解。

此外,数据收集还包含着从某个数据集中获得数据的含义。这里所说的数据集,包括但不限于:

  • 数据库,包括关系型和非关系型
  • 数据接口(API)
  • 保存数据的文件,比如 Excel、CSV 文档等

以上这些是常用的数据集。如何从这些数据集中读取到数据?需要的技能应该是:

  • 熟练使用 SQL
  • 熟练使用某种编程语言(本达人课使用的是 Python 语言)

数据清洗和特征工程

假设已经通过某种合法的方式“不作恶”的途径得到了某些数据,接下来要做的是了解这些数据,主要通过以下两种方式:

  • 对数据进行简单的描述性统计
  • 对数据实行可视化,直观地了解数据概况

这里就用到了“数据可视化”的技能。

然后就是“数据清洗”和“特征工程”,这是另外两个重要工作了,由于本课程聚焦在“数据可视化”上,这里就不详述了。但是,即便在这两个工作过程中,也会用到“数据可视化”的操作技能。

两个分支

有了“训练好”的数据之后,根据商业问题的目标,可以从事两个方面的具体工作。

(1)数据分析

应用各种数据分析的方法,最终得到一份分析报告。

分析结果,除了用数字表达之外,可视化是不可避免的(又见“数据可视化”)。

(2)机器学习

机器学习是另外一个专门领域,目前正火热中。

通过机器学习算法,实现对数据的分类、预测和聚类等操作,在这个过程中,也难免要用“数据可视化”表达某种结论。

评估

不论是机器学习,还是数据分析,其结果都要进行评估。

对于机器学习而言,有专门的模型评估方式。即便如此,用可视化的方式把结果表达出来,也是一种重要的手段。

根据评估结果,确定是否采用机器学习所获得的模型,亦或数据分析的报告是否被采纳。

以上是数据工程项目的基本流程,从中可知,“数据可视化”并不是流程中的一个独立环节,它是几个环节中必不可少的实现手段

在实际中,做可视化工作的,除了数据科学从业者,还有美工,甚至还有其他人员,显然实现可视化的途径是多样的。那么,我们将学习什么类型的可视化呢?

请看下一课的内容。

总结

本课介绍了“数据科学”的基本概念,并简述了“数据工程”项目的基本流程,从此工作流程可知,本课程的主题 “数据可视化”是数据分析和机器学习等方面的重要手段,在这些环节中都占据了一定的位置。

第0-2课:数据可视化的类别

走在大街上,满眼都是广告——说明市场经济发达,这是好事情。再观察一下广告,多是以各种样式的图形呈现,而不是简简单单地把数字呈现出来——即使是数字,也想办法把数字搞得像图一样。这样做的目的是要吸引人的注意,并且能够让人一眼就能看到想要看的。

别以为这是广告商的策略,其实,他们只是顺应了大脑的特点(具体请参考有关心理学和脑科学的研究成果)。

因为大脑的这种喜好,所以才非常有必要“数据可视化”,即用某种适合的图形来表示某些数据。

数据可视化的类别

通常有两种可视化数据的方式——这是我提出的分类,如有雷同,纯属巧合:

  • 艺术性可视化
  • 数学性可视化

以 2018 年的中美“贸易战”为例,美国的媒体为了向美国老百姓说明中国经济发展的情况,特别是对美国经济的威胁,一定要使用到中国经济和美国经济相关数字,那么这些数字怎么展示?

de12efa0-331a-11e9-bff5-05638cbe7e78

图 1 中美 GDP 比较(图片来源

这是一张预测中美 GPD 走势的图示,看此图,我想,美国人也没有什么太被刺激的感觉,因为看看两条线,未来即使有高低之别,但差别也没有那么吓人,况且,预测还可能不准确呢。

这就是数学性可视化,虽然比较理智的反映了数据。但是,给人的印象不是很深刻,或者没有让人感到受刺激。

再对比图 2。

32a92430-331b-11e9-ae61-ab46ecd2ee1c

图 2 艺术性地表示 GDP(图片来源

虽然这张图中也包含了数字,但是,它同时配置了表示数字的图示,并且都很形象,人的视觉无形中就被图示所吸引了。把数字本来的抽象意义,用直观的方式表达出来,更刺激人的大脑。

这就是将原本的数据通过“艺术性可视化”的方式进行了表达。目的无非是要从视觉的维度让人感受到一种震撼。

“艺术性可视化”,它通常不会科学、准确地反映数据的含义,而是为了某个目的追求感官刺激,比如图 3。

75efbc90-331b-11e9-ae61-ab46ecd2ee1c

图 3 预测 GDP 变化 (图片来源

在本达人课中所要介绍的“数据可视化”,肯定不是那种蛊惑人心的可视化,而是本着科学精神的“数学性可视化”,虽然它可能不如“艺术性的可视化”好看,但是,更趋真实地反映了对象的本质。

常见图像和用途

“数学性可视化”,就是要将数据用图像的方式表达。从数学角度来看,不同的图像有不同的用途或目的,下面依次简要说明(此处姑且讨论二维图像)。

散点图

还记得高中物理课学过的折射定律吗?也称为斯涅尔定律,假设不知道,我们就探索一下。用实验的方式分别测量光线入射某透明介质的入射角和折射角大小,测量多次,于是就得到了入射角和折射角的数据集,分别用 alpha 和 belta 表示。

有了这两组数据,怎么研究入射角和折射角之间的关系呢?它们之间符合什么函数关系?

一种常用的方法是:

  • 建立一个坐标系,横坐标表示入射角,纵坐标表示折射角;
  • 将入射角及其对应的折射角,作为坐标系中的一个坐标点,在此坐标系中把点标记出来。

这样就在坐标系中“散落”了很多点,如图 4 所示:

e7fdbc10-331b-11e9-bff5-05638cbe7e78

图 4 入射角和折射角散点图

接下来的任务就是观察这些点在坐标系中的分布,猜测它们应该符合什么函数关系,比如可能符合某个一次函数关系等(看起来像符合正比例函数的关系,人类曾经很长时间都这么认为,直到伟大的物理学家斯涅耳揭示了其中的奥秘为止)。

通过这个例子,可以总结如下:

  • 绘制散点图,要有对应的两组数据(二维图);
  • 两组数据所对应的两个变量是连续变量;
  • 散点图的用途在于发现变量之间的关系。

在实际业务中,散点图的样式可能具有多种,而且也不一定都是用来寻找某种函数关系。比如在地图上用色彩深浅画出各个城市的 PM2.5 指数,这也是一种散点图,通过这种散点图就能够看到污染城市的地理分布规律。

柱形图

柱形图(也称为:柱状图),适用于二维数据集,但是有一个维度的数据需要具有比较意义。比如下面的数据:

省份GDP(10 亿元)
广东省8,987.92
江苏省8,590.09
山东省7,267.82
浙江省5,176.80
河南省4,498.82
四川省3,698.02
湖北省3,652.30
河北省3,596.40
湖南省3,459.06
福建省3,229.83
上海市3,013.39
北京市2,800.04

对于这份数据,就比较适合用柱形图进行可视化。

58b0f110-331d-11e9-ae61-ab46ecd2ee1c

图 5 部分省 GDP 柱形图

图中所示的柱子高度,表示数据表中各省的 GDP 值。

通过柱形图,非常明显地反映了各省 GDP 数据的差异。

但是注意,柱形图不适合大数据,在横坐标上如果排满了柱子,看着多眼晕呀。

条形图

条形图,貌似就是柱状图横过来,对于数值都是大于 0 的数据而言,画出来的条形图可以这样理解。但是,下面这种类型的数据也是比较常见的。

城市1 月份最低气温(℃)
哈尔滨﹣31
北京﹣2.9
郑州﹣4
济南﹣5
南昌3
长沙2
广州10
台北14

从数据表中可以看出,我国部分城市 1 月份最低气温,有的在 0℃ 以上,有的在 0℃ 以下。对于这类数据,用条形图显示,结果是这样的。

bbe22920-331d-11e9-b3a9-4f8760d3237f

图 6 部分城市最低温

当然,这份数据也可以用前面的“柱形图”实现可视化。

折线图

下面这份数据,是 1961 ~ 2017 年我国的 GDP 年度增长率。显然,如果用条形图、柱形图来实现可视化,效果都不是太好,因为数据量有点大了。

年份中国 GDP 年度增长率
2017 年6.90%
2016 年6.70%
2015 年6.90%
......
1962 年﹣5.58%
1961 年﹣27.27%

注:因为数据量比较多,所以显示部分。

对这份数据实现可视化,比较好的选择是绘制折线图。

ff641cd0-331d-11e9-b59c-dfe60266e7ff

图 7 我国理念 GDP 增长

从图示结果中,可以看出 GDP 的发展变化趋势。

折线图最典型的应用应该算是在股票方面了,范围大一点可以说是“金融数据分析”方面。

直方图

直方图貌似“柱形图”,但两者有很大区别。

直方图是以各个矩形的面积描述各组的频数,所有矩形的面积之积为各组频数的和。

例如,使用下面的程序构造了一批随机数。

import numpy as npmu, sigma = 100, 15x = mu + sigma * np.random.randn(1000)

想直观地了解这个数据集中数字分布的特征,就可以利用直方图。

4a06b5e0-331e-11e9-ae61-ab46ecd2ee1c

图 8 正态分布

从图中可以看出,虽然是随机生成的,但是数据的分布还是有规律的,这就是统计学中的正态分布。

饼图

饼图常用于表达某些量所占比例的情况。例如:

6d384330-331e-11e9-ae61-ab46ecd2ee1c

图 9 饼图

图中显示了不同量占据总量的百分比,通过饼状图就能够对比分类数据的数值大小。当然,如果类别太多,会把“饼”分成太多的小份,不美观,也不易于观察。

箱形图

箱形图又称盒须图、盒式图或箱线图。

图 10 显示了通常的箱形图的形状:

ccf67490-331e-11e9-bff5-05638cbe7e78

图 10 箱线图

通过箱形图,可以观察到如下信息:

  • 数据的统计值为中位数、最大值、最小值等
  • 数据集中是否存在异常值,以及异常值的具体数值
  • 数据是否是对称的
  • 数据的分布是否密集、集中
  • 数据是否有偏向性

还要提到股票,如果仔细观察,里面也用到了箱形图。

以上列出的几种图形,是常见的,也是基本的。在这个基础上,还有很多变形,这些变形可能综合了多种含义,比如堆积柱状图,能比较不同量之间的大小,也能部分显示分布情况。此外,还有一些专用图形,例如股票中常用的 K 线图,地理信息中常用的分级统计地图等。

此外,根据不同的用途,还可以创造性地开发新的图像。

为了便于检索,把一些图形的名称列在下面,供参考:

  • 柱形图
  • 堆积柱形图
  • 条形图
  • 气泡图
  • 直方图
  • 箱形图
  • 热力图
  • 散点图
  • 雷达图
  • 环形图
  • 饼图
  • 折线图
  • K 线图
  • 仪表盘
  • 词云

对数据进行可视化的时候,要根据数据特征、绘图目的选择适合的图像。

总结

本课将“数据可视化”分为“艺术性可视化”和“数学性可视化”两类,本达人课主要讲述的是“数学性可视化”,即基于统计学基本知识,运用编程技能实现数据可视化。这种方式特别适用于大数据的问题中。

本课还列出了常用的统计图,生成这些统计图的数学原理及其所表达的含义,请参阅有关统计学的知识。

第0-3课:做好启动准备

本达人课不是针对零基础的学习者,需要具备以下知识。

(1)Python 基础知识,包括但不限于:

  • 掌握 Python 内置的基本对象类型,如数字、字符串、列表、字典、元组等
  • 掌握 Python 的基本语法规则,如引入模块的方法、for 循环语句等
  • 掌握 Python 中函数的编写方法
  • 掌握 Python 中类的基本概念和了解面向对象的思想

这里推荐《Python 快速入门》达人课来学习。

(2)NumPy 和 Pandas 的基本知识,包括但不限于:

  • 利用 NumPy 创建数组,以及数组相关的方法(或者 Numpy 的函数)
  • 利用 Pandas 创建 Series 和 DataFrame 对象,以及相应的操作和方法

以上知识,在拙作《跟老齐学 Python:轻松入门》《跟老齐学 Python:数据分析》图书中均有详细介绍,可供参考。

有了以上知识作为基础,接下来要做的是安装数据可视化相关的包(模块)。在 Python 中,基本安装方法是使用 pip 安装,但是在数据科学方面,有两个可供使用的环境。

Anaconda

官方网站:https://www.anaconda.com/

874ef6e0-3320-11e9-b3a9-4f8760d3237f

上图是官方网站界面的截图,其中只凸显了 Anaconda 的作用,它是一个数据科学的平台,而且宣称是最流行的,此言绝非虚妄。之所以如此受欢迎,就是因为 Anaconda 已经融汇了很多常用的工具,比如前面提到的 Numpy、Pandas 等已经集成在里面了。所以,只需要下载这个网站的 Anaconda,然后安装,通常使用的模块就都包括了——一次安装,终生受用。

流行,就是因为简单。

但是,它也绝非十全十美,或者说世界上就没有十全十美的东西吧。

因为 Anaconda 高度集成化,也会让你失去对模块的控制,比如你有强迫症,非要把程序文件安装到某个指定位置,这就难度大了。

但是,依然推荐。

pip

这是我喜欢的,所有在本达人课中的安装演示,都是使用 pip。

除了上面两个之外,还可以直接下载源码安装,源码通常会在 github.com 这样的代码托管网站上。

接下来,就要演示安装本达人课所用工具的过程了。

特别声明

  • 本达人课中的所有操作和程序,是在 MacOS 操作系统中进行的
  • 完全照搬以下安装方法,在你的计算机上不一定成功,届时请多用 Google 找方法

安装工具之前,先要了解通常的命令:

  • 如果使用 anaconda,安装命令是 conda install modulename
  • 如果使用的 pip,安装命令是 pip install modulename

Jupyter

这是一个网页版的编辑器。

在 Python 中,有一个“交互模式”,如下所示:

>>> print("Life is short, you need Python.")Life is short, you need Python.

这种模式非常方便,但是,写过的代码难以保存。因此,它不是一个好的“编辑器”(根本就不是编辑器)。

于是乎,IPython 就应运而生了(不用着急安装 IPython,在此处它只是一个过程)。后来,在 IPython 基础上,发展出了一个基于浏览器的 Notebook,用于文本文件编辑,它兼顾了交互模式的优点,那就是即时运行,并且能够如同 IDE 一样,对代码实施保存、传播、再运行等操作。这个编辑器就是这里推荐的 Jupyter。

Jupyter 也是开源免费的。2014年, Fernando Pérez 发明了它,除了支持 Python 之外,它还可以支持 Julia 和 R,并且可以用于编写 Markdown 文件。

安装

pip3 install jupyter

注意,后面的所有安装,我都使用 pip3,表示安装适用于 Python 3 的版本。

运行

打开终端,到某一个工作目录,执行以下命令:

$ jupyter notebook

通常,会自动打开默认浏览器,并呈现下图所示的界面。

enter image description here

在图示中可以看到一些扩展名为 ipynb 的文件,这些都是已经创建的 Jupyter 文件,里面都是一些相关代码,如果点击某个文件,就可以在当前环境中打开。

再观察上图的右上角,有“新建”下拉菜单,通过它,可以创建一个全新的编辑界面。

Jupyter 与通常的 GUI 软件差不多,用鼠标点来点去就可以了。当然,它有一些快捷键,如果想了解,可以在网上搜一下。

Matplotlib

Matplotlib 是基于 NumPy 的、Python 语言环境中的绘图工具包。它可以用于绘制类似 GUI 软件的图像,并且这些绘图工具的 API 都是基于“面向对象”思想开发的,与 Python 语言的开发思想一致(这也是现代编程语言都秉承的思想)。

Matplotlib 的发明者 John D. Hunter,继承了 Python 一贯的开源思想。目前 Matplotlib 已经由一个委员会来负责,发明者 John Hunter 于 2012 年 8 月被上帝接走了。

必须向这位伟大的发明者致以崇高的敬意。

自从 Matplotlib 1.2 之后,就开始支持 Python 3 了。因此,现在所安装的 Matplotlib 如果没有特别的版本指定,默认都是适合于 Python 3 的了。

Matplotlib 有一个重要的子模块,也是我们制图经常用的,名为:pyplot,它是一个类似于 Matlab 的接口(如果学习过 Matplab,就可以直接把其中的用法搬过来了)。其实,Matplotlib 也是参考了 Matlab 中的绘图功能而设计的专门用于 Python 中的绘图工具。

Matplotlib 的官方网站:https://matplotlib.org/

安装

标准方法:pip install matplotlib

理论上讲,如果本地缺少某些依赖程序,执行上面的命令后,会自动地将依赖的程序安装上。

在实际中,总会遇到意想不到的,因此,如果遇到安装不成功的事情,也不要气馁,慢慢找办法,一定能成功的。

最基本的条件,计算机要联网,并且网络情况别太差了。

检测是否安装成功

安装之后,用下面的方式测试是否安装好。

在工作目录中运行 Jupyter,新建一个页面,并且命名为“chapter0-3”。

然后按照下图的方式输入代码:

enter image description here

为了方便,后面演示的时候,就把每个代码块写成如下的形式,上图中显示的是一个代码块。书写的这个代码块的方法就是:每写完一行,回车,然后写下一行。请不要复制代码,而是要自己一个一个字母地敲。

%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 100, 1000)y = np.sin(x)plt.plot(x, y)

写完这个代码块之后,按组合键“Shift + Enter”,即执行这个代码块中的程序。执行结果如下图所示:

d8590c90-3322-11e9-bff5-05638cbe7e78

从图中可以看到,在前述代码块的下面显示了执行结果。得到的函数曲线图,也呈现在了当前的页面中,这是因为代码块中的第一行的设置。如果没有 inline,只写 %matplotlib,你会在另外一个窗口看到画出来的图。

上述代码的其他部分,先不用理解,后面会详细介绍。

执行上述代码,如果能够得到跟图中显示一样的,就说明 Matplotlib 安装无误。如果出现错误,请特别认真阅读报错信息,然后根据报错信息到网上搜索有关解决方案。比如常见的一种错误是说缺少 backend,这是因为本地计算机没有安装 GUI 的支持框架(推荐阅读:What is a backend?,可以根据官方文档中的说明,安装一个 backend,比如安装 tk)。

Seaborn

Seaborn 是基于 Matplotlib 的一个可视化工具,它提供了一些更高级的接口,让绘图过程更简洁。

官方网站:https://matplotlib.org/glossary/index.html#term-tk

有了前面的基础,安装 seaborn 就比较简单了:

pip3 install seaborn

安装完毕,如果要检验是否安装成功,直接使用 import seaborn 命令,不报错,说明就没问题了。

Plotnine

Plotnie 是在 ggplot2 的基础上发展而来的,这个模块的绘图思想和前面两个有所不同,不过这些现在不需要掌握,只需要安装它就可以了。

官方网站详见这里

官方网站给的安装方法是:pip3 install plotnine

如果安装过程没有那么顺利,可以参考我的经历,因为我按照这个官方网站的方法操作也没有成功。

以下安装步骤是针对 Python 3.7 的环境。

  • Pandas 要先升级,顺便把 Numpy 也升级吧:
pip3 install --upgrade pandaspip3 install --upgrade numpy
  • 安装 Cython:
pip3 install cython
  • 安装最新的 Pyproj。如果这个不安装或者不适用于 Python 3.7,则会报出 gcc 错误:
pip3 install git+https://github.com/jswhit/pyproj.git#egg=pyproj

这里是下载源码来安装的,理论上用 pip3 install pyproj 也行,但是因为源程序的服务器在境外,经常性的出现访问超时现象。

  • 如果 geppandas 没有安装,也要安装:
pip3 install geopandas
  • 最后安装 plotnine:
pip3 install 'plotnine[all]'

经历以上过程之后,如果还没有安装好,就只能 Google 了。

完成了坑爹的过程之后,plotnine 安装完毕。

Plotly

Plotly 是一款能够实现基于网页作图的工具软件,其底层是 plotly.js,基于 D3.js、stack.gl 和 SVG,因此能够实现用 JavaScript 在网页上绘制类似于 Matplotlib 的各种统计图形。

官方网站:https://plot.ly/

Plotly 原本是收费的软件,但自 2016 年 6 月开始,提供免费的社区版。

它能够实现在线发布制图结果,为了实现这个目的,还需要到该网站进行注册。

注册完毕,登录网站,并在界面的右上角用户名的下拉菜单中选择“setting”项目,再从左侧栏选择“API Keys”,设置 Username 和 API KEY,记录下来,以备后用。

安装方法:pip3 install plotly

Pyecharts

Pyecharts 是国产的可视化工具包。

官方网站:http://pyecharts.org/

难得有中文文档。

为了获得更好的效果,先安装如下依赖:

$ sudo npm install -g phantomjs-prebuilt --upgrade --unsafe-perm

而后,使用下述方式安装:

pip3 install pyecharts

在后续操作中,还要用到其他的模块,比如主题模块,可以参考官方文档进行安装。因为是中文的,而且文档内容非常详细,相信读者一看便知。

Bokeh

Bokeh 也是当前使用量日益提升的制图工具,它的核心特点在于能够基于服务器发布各种具有强交互性的图示。

官方网站:https://bokeh.pydata.org/en/latest/

安装方法:

pip3 install bokeh

经过上面的一系列折腾,应该已经把自己的计算机开发环境配置好了。

不过,要说明的是,本达人课所介绍的几种可视化工具,仅仅是我选择的,其实还有很多可视化工具没有纳入到本达人课的范畴。我相信,读者学习这几种各具特色的工具之后,可以非常快速地掌握任何一种新的工具。

总结

本课主要是为后续的正式学习做好准备,特别是开发环境的配置。在 Python 生态环境中做开发,难免还要安装其他各类包和模块。

  • 通常使用 pip 即可,并且会自动安装有关依赖。
  • 如果出现“访问超时”这类问题时,可能是网络不太好,解决方法有两个:一是换一个速度更快的网络环境;二是找个“梯子”(自备,不要询问我哦)或许就解决问题了。
  • 下载相应模块的代码(通常官方网站或者 github.com 上都有)直接安装(比如执行:python3 install setup.py)。
  • 还有一个重要的解决问题途径,就是使用 Google 找一找其他人是怎么解决的,参考一下。
结束语:在学习中应用,在应用中学习

本达人课介绍了各具特点的多种实现数据可视化的工具,读者应该根据自己的需要,有重点地掌握,特别是结合实际的项目需要。

不论哪一个工具,都有完善的官方文档,那么本达人课充其量是引领入门,要向对该工具有较深入的理解,还需要阅读官方文档。

学习和应用是两个不同的过程。学习某项技能,必须从一招一式开始,或许感到枯燥,但这是基础;应用则是要根据实际需要灵活地综合运用所有技能了。

那“独孤九剑”中的“破剑式”虽只一式,但其中于天下各门各派剑法要义兼收并蓄,虽说“无招”,却是以普天下剑法之招数为根基。

实际项目中的每一行代码背后,都是对基础知识和基本技能的深刻理解,因此,非常有必要掌握。只有这样才能面临项目时随机应变。

独孤求败如若复生,又或风清扬亲临,能遇到这样的对手,也当欢喜不尽。使这“独孤九剑”,除了精熟剑诀剑术之外,有极大一部分依赖使剑者的灵悟,一到自由挥洒、更无规范的境界,使剑者聪明智慧越高,剑法也就越高,每一场比剑,便如是大诗人灵感到来,作出了一首好诗一般。

程序亦如此!

答疑与交流

为了让订阅课程的读者更快更好地掌握课程的重要知识点,我们为每个课程配备了课程学习答疑群服务,邀请作者定期答疑,尽可能保障大家学习效果,同时帮助大家克服学习拖延问题!

入群请到第1-1课末尾查看入群二维码,如果群满,请添加 GitChat 小助手伽利略的微信,ID 为 GitChatty6,注明「数据可视化」,并将支付截图发给她,谢谢。

第1-1课:Matplotlib 初体验
第1-2课:重新认识坐标系
第1-3课:如何分区和绘图
第1-4课:多样化的图像
第1-5课:绘制柱形图和条形图
第1-6课:绘制箱线图、饼图和直方图
第2-1课:Seaborn 初体验
第2-2课:分类特征统计图
第2-3课:关系统计图和回归统计图
第2-4课:数据分布统计图和热图
第2-5课:实战练习
第3-1课:绘图新概念
第3-2课:几何对象和美学映射
第3-3课:案例剖析
第4-1课:Plotly 初体验
第4-2课:绘图类的应用
第4-3课:3 种统计图及示例
第4-4课:高级制图案例剖析
第5-1课:Pyecharts 初体验
第5-2课:地理信息可视化及扩展应用
第6-1课:Bokeh 初体验
第6-2课:常用图形
第6-3课:重在交互

阅读全文: http://gitbook.cn/gitchat/column/5c6cd09e7fa9074fde9c8909

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页