查看原文
其他

cufflinks: 让pandas拥有plotly的炫酷的动态可视化能力

大邓 大邓和他的Python 2022-07-09

plotly是一款强大的基于javascript的可视化库,包括但不限于以下优点:

  • 可开发web版可视化界面

  • 相比matplotlib、R更加现代化

  • 支持3D可视化绘图

  • 有强大丰富的多语言生态,支持python、R、matlab、Jupyter、Excel

  • 与pandas可无缝衔接

pandas和plotly我们之前都分享过,但是plotly与pandas都这么优秀好用,而且还可以无缝衔接使用,这么重要的技巧没有分享是个遗憾。所以今天准备把刚学到的分享给大家。

粗暴的衔接

如果没有多了解无缝衔接,可能代码类似于下面这样,代码量虽然不少但也实现了炫酷的效果。这里就用比较简单的折线图为例

  1. from plotly.offline import init_notebook_mode, iplot, plot

  2. import plotly.graph_objs as go

  3. import pandas as pd

  4. import numpy as np


  5. #在notebook中需要初始化,py文件中不用

  6. init_notebook_mode()


  7. #产生500个数据点

  8. N = 500

  9. x = np.linspace(0, 1, N)#从0到1,产生500个数据点

  10. y = np.random.randn(N)

  11. df = pd.DataFrame({'x': x,

  12. 'y': y})


  13. data = [

  14. go.Scatter(x = df['x'],

  15. y = df['y'])

  16. ]


  17. #在py文件中使用 plot(data)

  18. iplot(data)

无缝衔接外挂库-cufflinks

开始之前我们需要先安装cufflinks库,该库可以很方便的生成实验数据,而且最吸引人的是可以让pandas真正实现无缝衔接plotly,在pandas语法中使用plotly的功能。但要注意目前cufflinks的支持仅限于jupyter notebook,在其他IDLE中无法使用。

  1. !pip3 install cufflinks

我们先看个简单的例子,再详细讲解cufflinks的常用功能。

  1. import plotly.plotly as py

  2. import cufflinks as cf


  3. #初始化,使用plotly离线绘图功能

  4. cf.set_config_file(offline=True)


  5. #生成dataframe类实验数据

  6. df = cf.datagen.scatter(n_categories=2)


  7. #查看数据类型

  8. print(type(df))


  9. #在dataframe类上使用iplot方法

  10. #散点图,模式为“标记点+折现”

  11. df.iplot(kind='scatter', mode='markers+lines')

运行

  1. <class 'pandas.core.frame.DataFrame'>

从上面的例子中我们直接在dataframe类型上使用plotly的绘图方法iplot。下面我们详细讲解上面涉及到的一些模块,如生成实验数据、绘图、自定义绘图等

生成实验数据

学习pandas等数据分析包的时候往往需要准备各种各样的数据集,或者使用一些数据生成包,cufflinks库可以帮助我们快速生成所需要的数据,不会因为纠结数据而耽误pandas的学习。

cufflinks.datagen是cufflinks封装好的生成pandas数据的模块,里面包含常见的如bar、pie、scatter、ohlc(美国折线图数据)等。使用前可以先使用help函数查看每种方法的文档

  1. import cufflinks as cf


  2. help(cf.datagen.scatter)

运行

  1. Help on function scatter in module cufflinks.datagen:


  2. scatter(n_categories=5, n=10, prefix='category', mode=None)

  3. Returns a DataFrame with the required format for

  4. a scatter plot


  5. Parameters:

  6. -----------

  7. n_categories : int

  8. Number of categories

  9. n : int

  10. Number of points for each category

  11. prefix : string

  12. Name for each category

  13. mode : string

  14. Format for each item

  15. 'abc' for alphabet columns

  16. 'stocks' for random stock names

现在我们生成数据

  1. import cufflinks as cf


  2. #生成散点图数据。三类,每类10个数据点

  3. df = cf.datagen.scatter(n_categories=3,

  4. n = 10)

  5. print(len(df))

  6. #仅随机显示5行

  7. df.sample(5)

Run

  1. 30

我们也可以自定义数据源,如定义好数据的字段名和长度。如果对讲解过程中的方法参数不懂,可以使用help函数,如 help(cf.datagen.lines)

  1. #3条轨迹,每个轨迹的名字分别为one、two、three,每个轨迹拥有10个数据点

  2. cf.datagen.lines(n_traces=3,

  3. columns=['one', 'two', 'three'],

  4. n = 10)

自定义图主题样式

cufflinks为我们提供了丰富的主题样式,使用cufflinks.getThemes()可以得到当前cufflinks支持的所有主题

  1. import cufflinks as cf


  2. cf.getThemes()

Run

  1. ['ggplot', 'pearl', 'solar', 'space', 'white', 'polar', 'henanigans']

上面的运行结果表明目前cufflinks支持包括polar、pearl、henanigans、solar、ggplot、space和white等7种主题。

  1. import plotly.plotly as py

  2. import cufflinks as cf


  3. #初始化,主题是space

  4. cf.set_config_file(offline=True,

  5. theme='space')


  6. df = cf.datagen.scatter(n_categories=2)

  7. df.iplot(kind='scatter', mode='markers+lines')

  1. import plotly.plotly as py

  2. import cufflinks as cf


  3. #初始化,主题是space

  4. cf.set_config_file(offline=True,

  5. theme='white')


  6. df = cf.datagen.scatter(n_categories=2)

  7. df.iplot(kind='scatter', mode='markers+lines')


自定义绘图

cufflinks绘图函数df.iplot参数很多,我们讲解常用的一些参数

  • kind: 图的种类,如scatter、pie、bar、spread等

  • mode: lines、markers、lines+markers,分别表示折线、点、折线和点

  • colors: 轨迹对应的颜色

  • dash:轨迹对应的虚实线,solid、dash、dashdot三种

  • width:轨迹的粗细

  • xTitle:横坐标名称

  • yTitle: 纵坐标的名称

  • title: 图表的标题

下面我们看一个例子

  1. import plotly.plotly as py

  2. import cufflinks as cf

  3. import pandas as pd


  4. #初始化

  5. cf.set_config_file(offline=True)


  6. df = cf.datagen.lines(n_traces=3,

  7. columns=['A', 'B', 'C'])


  8. colors = ['yellow', 'purple', 'green']

  9. dashes = ['dash', 'solid', 'dashdot']

  10. widths = [3, 4, 6]


  11. df.iplot(kind='scatter',

  12. mode='lines',

  13. colors=colors,

  14. dash = dashes,

  15. width=widths,

  16. xTitle='日期',

  17. yTitle='涨跌比率%',

  18. title='股价涨跌图')

一行作图

上面的例子都是使用十几行做图,实际上cufflinks可以只用一行就能做出很酷的图表

  1. cf.datagen.bubble(prefix='industry').iplot(kind='bubble',x='x',y='y',size='size',categories='categories',text='text',

  2. xTitle='Returns',yTitle='Analyst Score',title='Cufflinks - Bubble Chart')

  1. cf.datagen.heatmap(20,20).iplot(kind='heatmap',colorscale='spectral',title='Cufflinks - Heatmap')


从上面的例子中会发现cufflinks非常简单易用,大家如果对此感兴趣,可以关注cufflinks项目 https://github.com/santosjorge/cufflinks

推荐阅读

【视频教程】python爬虫|文本分析|机器学习快速入门  

flashtext:大规模文本数据清洗利器

学习编程遇到问题,该如何正确的提问?

100G 文本分析语料资源(免费下载) 

seaborn在金融数据可视化中的应用

中文数据可视化你需要知道的一个库

手把手教你学会LDA话题模型可视化pyLDAvis库

如何用Google Colab高效的学习Python

如何用Python找到投资时的最佳组合比例

大神kennethreitz写出requests-html号称为人设计的解析库

少有人知的python数据科学库

如果想要获取更多例子,可以关注本公众号,

后台回复'20190505'获得本教程及扩展教程的notebook代码下载方式


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存