随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,想要快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对Python语言来说,比较传统的数据可视化模块是Matplotlib,但是Matplotlib存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化中的发展。为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。本书主要介绍Plotly在可视化各领域的应用,包括基础绘图、数据处理、网页开发、程序GUI、机器学习、量化投资等,方便读者对Plotly快速上手。
本书绝大部分代码用Python编写,同时也给出了Plotly在R语言、MATLAB和JavaScript中的应用案例。
本书绝大部分代码用Python编写,同时也给出了Plotly在R语言、MATLAB和JavaScript中的应用案例。
孙洋洋,《PyQt 5快速开发与实战》一书的作者之一,擅长网络爬虫、机器学习、量化投资与程序GUI开发设计。有多年量化投资实盘操作经历,现就职于某期货公司做量化研究员。
王硕,资深软件工程师,具有9年的Java企业应用开发经验和4年的教育培训经验,曾主持多个B/S项目开发,项目经验丰富,擅长Java EE(Struts2、Spring3、Hibernate3)项目开发、Python(程序GUI、数据分析、网络爬虫)项目开发,是极宽量化开源团队核心成员,也是《PyQt5快速开发与实战》一书的作者之一。
邢梦来,极宽量化开源团队发起人。擅长量化分析理论,深入研究多空对比分析,对多空趋势平衡有独特的见解,形成一套多空对比体系。同时对对交易心理状况、人工智能与区块链技术也有较深的研究,著有《深度学习框架PyTorch快速开发与实战》一书。
袁泉,哥伦比亚大学硕士,上海大学数学学士,擅长使用Python进行数据分析,以及各类机器学习与优化算法实现。
吴娜,电信数据挖掘工程师,上海交通大学计算机硕士。负责电信政府产品部门公检法项目,对智慧警务有独到理解,著有《游戏数据分析的艺术》,是极宽量化开源团队发起成员。
前言
Python是一门非常优秀的编程语言,其语法简洁、易学易用,越来越受到编程人员的喜爱;Python也是一门非常“人性化”的编程语言,其各种语法规则的设计符合人们的思维方式,开发人员可以用最简单的方式实现自己的编程目的,降低时间成本;同时,Python又是一门非常强大的编程语言,其在编程的各个领域都有非常不错的表现,比如在网页开发、程序GUI设计、网络爬虫、科学计算、数据可视化、机器学习与深度学习等领域,Python都有非常好的解决方案来解决现实中的业务问题。
互联网的快速发展为我们积累了庞大的数据,计算机硬件的创新为存储与分析这些数据创造了硬件条件,编程语言的发展为分析这些数据创造了软件条件。在数据分析这个领域,Python有着自己独有的优势,简单易用的特性与强大的开源模块的支持使其成为数据分析领域方便、好用的利器。
Python在数据分析领域的广泛应用离不开其强大的开源模块的支持,大名鼎鼎的NumPy、SciPy、StatsModels、Pandas等模块的建立与发展奠定了Python在数据分析领域中的重要地位。这些模块简单又好用,它们提供的解决方案能够满足绝大部分业务需求。在人工智能领域,Python也有非常棒的解决方案,如Sklearn、TensorFlow、MXNet、Theano、PyTorch、Caffe等都是非常好的开源模块。尤其在人工智能中最前沿的深度学习领域,Python几乎占据了霸主的地位。Python借助在数据分析领域中开源模块的优势,在量化投资领域逐渐占据了领头羊的地位。国内外主流量化投资网站大多支持Python语言,其在量化投资领域有一种逐渐淘汰其他语言,一统“江湖”之势。
对数据的分析离不开数据的可视化,相对于Python在数据分析、人工智能、量化投资等领域中的发展,在数据可视化方面的发展有些滞后。最经典的Python可视化绘图库莫过于Matplotlib了,Matplotlib就是MATLAB+Plot+Library,即模仿MATLAB的绘图库,其绘图风格与MATLAB类似。由于MATLAB的绘图风格有些偏古典,为了绘出更漂亮的图像,Python开源社区开发出了Seaborn绘图模块,它本质上是对Matplotlib的封装,绘图效果更符合现代人的审美观。尽管如此,由于Matplotlib是基于GUI的绘图模块,所以存在特有的缺陷。
就笔者使用的经验而言,Matplotlib主要存在两大缺陷:首先,Matplotlib是一个静态的绘图模块,即我们绘出的图像是静态的,就像用看图软件打开图片一样,没有网页绘图的交互式效果;其次,Matplotlib绘图结果的分享很不方便,在绘图结果分享给别人时只能以图片的方式分享,别人看到的绘图结果完全是静态的,分享体验很不好。Matplotlib一直以来都是Python可视化的主力军,但是确实存在无法克服的缺陷,并且其他的Python绘图模块如Ggplot、Bokeh、Pygal等都比较小众,绘图功能比较单一,完成不了对Matplotlib的替代。
为了解决Python在可视化中存在的问题,Plotly应运而生,它是一个基于JavaScript的动态绘图模块。Plotly的绘图效果与我们在网页上看到的动态交互式绘图效果是一样的,其默认的绘图结果是一个HTML网页文件,通过浏览器就可以查看。我们可以把这个HTML文件分享给其他人,对方看到的效果与我们在本机上看到的效果完全一样。
Plotly有着自己强大又丰富的绘图库,支持各种类型的绘图方案。Plotly是基于JavaScript的绘图库,所以其绘图结果可以与Web应用无缝集成。总之,Plotly在绘图模块上是Matplotlib强有力的竞争对手,Plotly绘图的种类丰富、效果美观、易于保存与分享,因而越来越受数据分析人士的喜爱,至少笔者对Plotly的喜爱胜于对Matplotlib的喜爱。
Plotly最初是一款商业化的绘图软件,在2015年11月12日,Plotly开发团队决定把该模块的核心框架plotly.js开源,由此Plotly得到了快速发展。虽然在2016年6月,Plotly开发团队才正式发布其Python-api文档,在2017年 1月,Plotly 1.0才正式发布,但是这些都阻止不了程序员对Plotly的喜爱。自plotly.js开源之后,我们可以使用本地的离线模式进行绘图,不依赖于官方的服务器,使得绘图速度更快,效果与在线绘图一样,这也是目前使用Plotly绘图的主流模式。
市面上有很多关于Matplotlib的可视化绘图教程,但是还没有Plotly的相关图书,作为一款非常优秀的可视化绘图模块,市面上急需一本科普性的图书。在本书创作之前,市面上就已经出现了电子版的对Plotly的简单翻译版本《Plotly中文说明1期》,这是极宽量化开源团队在2017年1月的作品。极宽量化开源团队是一群研究“Python量化投资”的爱好者自愿组成的一个团队,该团队成立的初衷是为国内量化投资领域做出自己的一份贡献,目前已经成功初步翻译PyAlgoTrade、Seaborn、StatsModels、Plotly等开源模块,并公开上传到网络上,《Plotly中文说明1期》正是该团队的一个作品。
我作为极宽量化开源团队《Plotly中文说明1期》项目的第一负责人,最初的想法只是单纯地把Plotly的基础内容简单翻译一下,以最简单、最快速的方式呈现给大家,方便大家使用。但是后来电子工业出版社的黄爱萍编辑找我沟通,请我编写一本Plotly数据可视化的相关图书,她认为Plotly发展很快,市场上需要一本Plotly的相关教材。经过一段时间的权衡,考虑到个人对Plotly的掌握程度、开源团队对Plotly的热情、个人在写《PyQt 5快速开发与实战》时与黄编辑建立的良好关系,以及《Plotly中文说明1期》存在的太多缺陷等,也为了能让更多的人接触Plotly这个优秀的绘图模块,于是决定再次抽出大量的时间来完成本书的创作,这就是本书的写作背景。
Plotly是一个非常优秀的顶级绘图模块,如此优秀的开源模块在国内的知名度却不是很高,这对国内开发人员来说是一个很大的遗憾。顶级模块在特定的领域达到家喻户晓的程度是一个必然的趋势,Plotly正是这种模块,它在可视化绘图领域的表现终会大放异彩。虽然目前Plotly在国内知名度不是很高,但其在可视化绘图领域做到家喻户晓是一个必然的趋势,只是需要有人加速这种趋势的演化过程,这就是本书存在的意义。
本书结构
本书的框架结构如下。
第1章是本书的快速入门部分,介绍Plotly的安装环境,对在线绘图与离线绘图做了简要的介绍。
第2章是基础绘图部分,对Plotly的一些常见的基础图形如线形图、柱状图、饼图、气泡图和直方图等做了一些介绍。
第3章是高级图形部分,对Plotly的时间序列绘图、表格绘图、多个坐标轴绘图、多子图绘图、SVG绘图等做了一些介绍,是Plotly绘图的高级应用。
第4章是Pandas部分,介绍Pandas这个顶级数据分析模块使用Plotly进行绘图的方法。
第5章是金融绘图部分,主要为金融领域的特殊图形尤其是K线图的绘制提供了解决方案。
第6章是Matplotlib部分,主要介绍如何把Matplotlib绘图迁移到Plotly中。
第7章是网页开发部分,主要介绍Plotly在Python网页开发框架Django和Flask中的应用。
第8章是GUI开发部分,主要介绍Plotly在GUI开发框架PyQt 5中的应用。
第9章是机器学习部分,主要介绍Plotly在机器学习框架Sklearn与PyTorch中的应用。
第10章是量化投资部分,主要介绍Plotly在量化投资领域中的可视化应用。
第11章是其他语言应用部分,主要对其他语言如R、MATLAB、JavaScript的Plotly绘图做了简要的介绍。
如果你仅仅对Plotly的基础绘图有兴趣,那么前两章的内容就能满足你的需求;如果你对Plotly更高级的绘图有兴趣,那么可以参考第3章的内容;对于本书其他章节的内容,可以根据自己的实际情况有选择地阅读,毕竟Plotly绘图所涉及的范围特别广泛,并不是每个人对这些领域都同时感兴趣。
本书代码与交流
本书的所有代码都将保存在GitHub上,后续代码更新也会以GitHub地址为准,网址是https://github.com/sunshe35/PythonPlotlyCodes,读者可自行下载。另外,为了方便读者交流、学习Plotly,笔者建立了QQ群(群号:72203080)。
致谢
Plotly虽然只是一个绘图模块,但是其应用场景非常广泛,除有Matplotlib的基本绘图功能外,其在Web开发、GUI开发、机器学习、量化投资等领域也有很好的应用场景。由于其应用场景特别广泛,结合笔者自身知识的局限性,所以写好一本书需要多个人的共同努力,非常感谢下面这些作者对本书的创作所付出的努力:王硕负责本书的Flask、PyTorch、JavaScript部分;邢梦来负责本书的Matplotlib部分;袁泉负责本书的基础绘图与Sklearn部分;吴娜负责本书的Pandas部分,其他都由本人孙洋洋负责。在Plotly的写作过程中,还有一些人为本书的顺利出版做出了贡献:首先,感谢《Plotly中文说明1期》的开源组成员们,你们的贡献是本书基础部分的雏形,相关人员的网名和QQ号分别是youngle sunny 1535327967、余勤441499022、华子32509167、啦啦啦505512828、禛948280670、L. 1248515039、Rikimaru 11766429、iris 704699640、信平759949947、吴娜2184934、周涛510548099、zw木子719735825、非洲兔85011284、十二月378258849、大朱775941748、我爱作文你信吗571171954。其次,感谢山西证券金融科技部的陈亦苏、成都数联铭品科技有限公司的刘赣,以及极宽量化开源组的梁勇对本书网页开发部分提供的帮助,感谢西南财经大学统计学院王彦锋博士对本书R语言部分提供的帮助,感谢北京大学汇丰商学院硕士研究生扶禄城对本书MATLAB部分提供的帮助。再次,感谢黄爱萍与戴新两位编辑对本书的出版所付出的努力。最后,感谢我的父母与兄弟姐妹对我的关心与照顾,我现在取得的成果离不开你们对我的付出。
与读者相识于Plotly是一种缘分,能够看到本书说明读者对Plotly是感兴趣的,感谢读者愿意花费时间阅读本书,希望每一位读者都能够通过阅读本书有所收获,真心祝愿你们都能够学习顺利、事业有成。
孙洋洋
2018年4月