第1章 快速开始
1.1 Plotly简介
Pandas(潘达思)数据分析软件和Plotly互动式绘图模块可以称为Python数据分析和Python量化分析两大重量级模块库。
事实上,这两者的影响力早已超越Python语言领域。
●Pandas目前已经被业界公认是大数据工程一线最好的解决方案。
●Plotly被称为史上最好的绘图工具之一,是GitHub开源网站最“火”的两大新项目之一(另外一个是Netflix的Spinnaker云计算项目)。
为了更好地展示金融数据的复杂性,下面首先介绍Plotly绘图模块。如图1-1所示是Plotly网站截图,网址是https://plot.ly。
图1-1 Plotly网站截图
Python量化的关键是金融数据可视化,无论是传统的K线图,还是现在的互动策略分析,都需要大量的可视化图表。具体到编程代码,就是各种Python绘图模块库,传统Python绘图模块库有Matplotlib、Ggplot、Seaborn、Bokeh等。
Plotly绘图底层使用的是plotly.js, plotly.js基于D3.js、stack.gl(WebGL组件库,由Plotly团队的Mikola Lysenko带领开发)和SVG,用JavaScript在网页上实现类似MATLAB和Python Matplotlib的图形展示功能,支持数十种图形,包括2D和3D图形,交互流畅,可以满足一般科学计算的需要。该项目成功后,开始向其他语言移植,目前已经有Python、MATLAB、R语言、Jupyter等多种版本的API接口。
Plotly项目的创始人是Alex Johnson,是哈佛大学物理博士,曾经做过燃料电池。该项目的参与者中有一位华裔女生,叫Baobao Zhang(张宝宝),是耶鲁大学政治学博士。Fernando Perez(IPython Notebook创始人)是该项目的顾问。
Plotly项目团队在2013年就已经拿到数百万美元的投资,并在加拿大蒙特利尔注册了公司,公司名称是科学数据云服务公司,号称是“首个科学数据平台”,提供线上和联机服务,方便用户使用分享、评论等功能,其投资商有MHS资本、西门子风险资本、Rho Ventures、Real Ventures和硅谷银行等。
Plotly公司有很多大牌客户,如西门子、Google、美国国家航天局(NASA)、美国空军、华盛顿邮报、美国国家卫生研究院等。
Plotly公司的联合创始人Jack Parmer这样说过:对于开发者来说,绘制出漂亮的、交互式的图表并将之分享是一件很容事的事,但是对于一般的用户则很困难。Plotly改变了这种局面,借助互联网的媒介、利用世界级的绘图分析工具,每个人都可以参与其中。
Hacker News(极客新闻)网站曾经专门讨论过各种图形模块库,如Matplotlib、MPLD3、Bokeh、Highcharts、Flotcharts、MetricsGraphics、Vega、Chartjs、FusionCharts和JSXGraph。相比而言,Plotly功能齐全,性能显著超过其他同类产品。
Plotly原本是收费的商业软件,幸运的是,2016年6月,Plotly绘图模块库提供了免费的社区版本,并新增了Python等多种编程语言的接口,以及离线模式支持,这对于广大中国用户而言,获得了现实的技术支持。
Python绘图模块库数不胜数,其中经典的有数十个。目前,Plotly作为新一代互动型量化绘图库,基本上可以说一统天下。如图1-2所示是Plotly绘图模块库部分内置的图形类型。
图1-2 Plotly绘图模块库部分内置的图形类型
笔者在编写本书时,特别针对多种Python绘图模块库进行了测试,测试结果表明,Plotly绘图模块库的确是新一代Python绘图模块的王者之选,也是各种Web平台的优先选择绘图模块。
以笔者个人的测试感觉而言,Plotly绘图模块库既有Matplotlib绘图模块库的强大与灵活,又有Seaborn统计绘图模块库的现代配色组合与优雅报表形态。
Plotly绘图模块库可直接生成PNG等图像文件,与Bokeh绘图模块库和各种基于Web的JavaScript图表模块库类似,生成的是一个内置JavaScript脚本的HTML网页文件,虽然文件比Bokeh绘图模块库生成的文件略大,但在互动性方面,Plotly绘图模块库强大得多。
在3D图表方面,虽然笔者没有实际测试,但基于Plotly网站的案例可以看出,相对传统Python 3D图表模块库,无论在图表种类格式,还是色彩组合方面,Plotly绘图模块库都显得更加灵活和强大。
图1-3所示是Plotly绘图模块库绘制的K线图,支持互动功能,读者可以参考Top极宽量化社区的演示网页(http://www.ziwang.com/zwdemo.htm)。
图1-3 Plotly绘图模块库绘制的K线图
请注意,案例中没有使用任何图片,是纯JavaScript脚本函数,所有的图形、数据和互动都是通过JavaScript函数完成的,这些JavaScript函数全部是通过Python自动生成的。
图1-3虽然是静止的,但在浏览器中,其实是纯JavaScript脚本的函数图形,支持各种互动功能,读者可以好好体会一下,并且看看网页源码。
Plotly原本是基于JavaScript的数据图表分析绘制模块库,在编程的灵活性和图表的丰富性方面非常强大,优点数不胜数。
●Plotly本身是一款独立的Web版数据可视化工具,界面友好,提供强大的互动性操作。
●基于现代的配色组合和图表形式,相比Matplotlib、R语言的图表,更加现代和绚丽。
●具有简单且强大的3D图表绘制功能,支持多种格式。
●对图形参数的修改十分简单、直观,便于初学者使用。
●有Python、R、MATLAB、Jupyter、Excel等多种版本的接口。
●与Pandas(潘达思)数据分析软件无缝集成,并提供了专门的Plotly绘图模块库,设计的图表非常吸引人,而且具有高度互动性,这得益于其完善的文档和简单的Python API,用户入门也很容易,
目前,Plotly绘图模块库支持的图表格式如下。
●基本图表:20种。
●统计和海运方式图:12种。
●科学图表:21种。
●财务图表:2种。
●地图:8种。
●3D图表:19种。
●报告生成:4种。
●连接数据库:7种。
●拟合工具:3种。
●流动图表:4种。
随着Plotly绘图模块库软件的升级与更新,未来会增加更多的图表格式。
Plotly底层使用的是plotly.js,支持Python、R、MATLAB、JavaScript这四种语言的扩展,由于Python正处于数据分析领域的领先地位,并且其重要性呈日渐上升之势,所以本书介绍Plotly时以Python语言(Python 3)为主,同时也会给出Plotly在其他语言中的一些应用。
Plotly发展很快,其应用的领域也非常广泛,不但应用在传统意义上的数据分析与处理上,而且在网页开发、程序GUI、机器学习等多个方面也有重要的应用。由于这个原因,本书涉及的内容很广,除Plotly基础知识外不会做太多深入的介绍,仅进行入门介绍,读者可以结合基础知识部分进行更深入的研究,这对于绝大部分读者来说并不是什么难事。
对于本书前半部分的基础知识内容,并不需要读者对Python有太多的了解,没有学过Python的读者只需要花费两个小时了解Python的基础语法就可以了。本书后半部分的内容,读者可以按照自己的实际需求阅读相关的章节,然后稍微修改一下就可以进行实战,通过这种方式快速掌握这些技能。