Python可视化工具概述

介绍

在Python中,有不少数据可视化途径。由于这种多样性,形成很难选择。本文包括一些比较常见的可视化工具的样例,并将指导如何利用它们来建立简单的条形图。我将采用下面的工具来建立绘图数据示例:html

Pandaspython

Seabornweb

ggplotapi

Bokeh浏览器

pygal服务器

Plotlysvg

在实例中,咱们利用pandas来操做数据,驱动可视化。大多数状况下,这些工具的使用是不须要pandas的,但我以为混用pandas和可视化工具比较常见,也是很好的起点。工具

Matplotlib是什么?

python 可视化工具包起源于Matplotlib。它很是强大,也很复杂。你可使用它作几乎全部的事情,然而,它并非很易于学习。我不打算讲述纯 Matplotlib实例,由于不少工具(尤为是Pandas和Seaborn)都对它进行了封装。若是你须要更多的了解,请参考个人simple graphing相关文章: http://pbpython.com/simple-graphing-pandas.htmlpost

我对Matplotlib抱怨最多的就是,要获得合理的图表,须要付出不少。在练习下面这些例子中,我发现不须要不少代码,就能够获得很好看的 可视化效果。若是你须要一些较小例子,用来学习matplotlib详细特征,能够在ggplot post中找到相关的实例:http://pbpython.com/simple-graphing-pandas.html性能

关于方法

本文中是我所提到的方法。我相信你们在阅读时,也会想到更好的使用这些工具的方法。个人目标,不是在每一个示例中去建立彻底一致的图表,而是关注,在每一个例子中以大体相同的方式对数据进行可视化,以及大体相同的时间的研究方案。

在学习过程当中,碰到的最大的挑战,就是格式化x轴和y轴,使用大的标签使数据看起来合理。一样还须要时间弄清楚每一个工具须要格式化的数据。一旦搞清楚这些,其它的就相对简单了。

另外一个须要考虑的地方,条形图多是一种比较简单的类型。这些工具容许你使用数据建立各类各样的图形。个人实例更多关注的是格式化相关的易用 性,而不是可视化创新。另外,由于标签,一些图占用更多的空间,因此,我已进行处理,以便文章长度适中。最后,图片大小也修改了,缩放后有些模糊,但不影 响学习。

最后,我试着使用另外一个工具代替Excel。我想让个人例子能更直观地显示在报告,展现,邮件或者是静态页面。若是你正在评估工具的实时数据可视化或经过其它方式的共享机制,以及这些工具更多的功能,我在本文中暂时不做介绍。

数据集

在上一篇文章中(http://pbpython.com/web-scraping-mn-budget.html),描述了咱们用到的数 据。在数据抓取例子中,更深刻点,在每一个类别中肯定详细的支出项。数据集包括125行支出项,但我只须要关注top10,这样能够简单些。你能够在此找到 详细的数据集:http://pbpython.com/extras/mn- ... 4.csv

Pandas

我将使用pandas的DataFrame来开始画各类图形。幸运的是,pandas提供内置的图表功能,它封装了matplotlib。我将使用它来做为基线。

首先,导入咱们的模块,将数据读入设定的DataFrame。咱们还须要对数据排序,并限制在top10中。

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

咱们将在全部实例中,使用一样的设定,下面是查看到的top5状况

Python可视化工具概述

    如今能够创建display,使用更好的defaults,建立条形图:

?

1
2
3
4
pd.options.display.mpl_style = 'default'
budget_plot = budget.plot(kind = "bar" ,x = budget\[ "detail" \],
                       title = "MN Capital Budget - 2014" ,
                       legend = False


    这使用"default"列建立的图表,显示标题,去掉了图例。
    再加上下面的代码,能够将图片保存为png格式文件 。

?

1
2
fig = budget_plot.get_figure()
fig.savefig( "2014-mn-capital-budget.png" )


    看看生成的效果:

Python可视化工具概述

基本上,看起来很好了。想一想,还能够在y轴上作更多的格式化处理,但这样,就须要了解matplotlib了。好了,就这样,仅经过pandas,咱们不能作更多的定制了。

Seaborn

Seaborn是一个可视化库,基于matplotlib。它会使用数据看起来更具备吸引力,还能够很简单地建立更复杂的图表,也能够和pandas集成。

个人seaborn例子不能搞得太差别化了。有一件事,我喜欢seaborn各类内置的样式,你能够快速地改变调色板,这样看起来更好一些。不然,对于简单图形,seaborn不能作更多了。

先import以及读入数据:

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

我发现一件事情,就是须要使用x_order设置x轴上各项的顺序。

下面的代码设置顺序,并设置图表样式和条形图颜色:

sns.set_style("darkgrid")

bar_plot = sns.barplot(x=budget["detail"],y=budget["amount"],

palette="muted",

x_order=budget["detail"].tolist())

plt.xticks(rotation=90)

plt.show()

Python可视化工具概述

你能够看到,我使用matplotlib旋转x轴标题,这样能够看到它们。看起来,确实不错了。再想一想,我还想格式化一下,在y轴上的点,在不使用matplotlib的plt.yticks的状况下,但我不知道如何作。

ggplot

ggplot与seaborn类似,也是基于matplotlib,用于简化matplotlib可视化,并改善可视化效果。与seaborn不一样的是,它是R语言ggplot2的移值。所以,一些API对于python不太友好,但它确实很是强大。

我没有在R中使用过ggplot,因此,这有点学习曲线。但我能够开始了解下ggplot的魅力。这个库还处在活跃的开发期,但愿它一直发展下 去,慢慢成熟,我以为它将会是一个真正强大的工具。我花了些时间学习使用它,在看了代码和google所需后,我可以解决大部分问题。

开始吧!导入并读取数据:

import pandas as pd

from ggplot import *

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

如今能够构造一些情节让几个ggplot命令一块儿运行:

p = ggplot(budget, aes(x="detail",y="amount")) + \

geom_bar(stat="bar", labels=budget["detail"].tolist()) +\

ggtitle("MN Capital Budget - 2014") + \

xlab("Spending Detail") + \

ylab("Amount") + scale_y_continuous(labels='millions') + \

theme(axis_text_x=element_text(angle=90))

print p

 

Python可视化工具概述

 

Bokeh

Bokeh与前3个库不同,它不依赖matplotlib,而是在浏览器中生成可视化。这意味着能够产生交互的web可视化,这样个人实例有点简单了。

Import,而后读取数据:

import pandas as pd

from bokeh.charts import Bar

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

bokeh不一样的方面,在于,我须要明确地列出,咱们须要绘图的值。

?

1
details = budget[ "detail" ].values.tolist()amount = list (budget[ "amount" ].astype( float ).values)

如今能够画图了。下面的代码能够在浏览器中显示HTML页面,包括图表。能够保存为png文件,用于其它目的。

bar = Bar(amount, details, filename="bar.html")

bar.title("MN Capital Budget - 2014").xlabel("Detail").ylabel("Amount")

bar.show()

png图以下:

 

Python可视化工具概述

能够看到图片,很好,很清晰。尚未找到更易于格式化y轴的方式。Bokeh还有不少功能,在本例中不能一一列举,请参考相关文档。

Pygal

Pygal用来建立svg图表。把依赖包都安装好后,你也能够保存图表为png文件。svg文件对于建立交互图表很是有用。我一样发现用这个工做,能够很容易建立个性化的,视觉体验很好的图表。

下面导入,并读取数据:

import pandas as pd

import pygal

from pygal.style import LightStyle

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

咱们须要创建图表类型,并设置一些基本参数:

bar_chart = pygal.Bar(style=LightStyle, width=800, height=600,

legend_at_bottom=True, human_readable=True,

title='MN Capital Budget - 2014')

一个有趣的地方:human_readable 能够很好地格式化数据,很管用。

再加些数据到图表中。这个地方,与pandas的集成不是很紧密,但我发现它能很好的处理数据量小的状况。对于大数据量的状况,性能可能会是个问题。

for index, row in budget.iterrows():

bar_chart.add(row["detail"], row["amount"])

如今能够渲染到svg和png文件中去了:

bar_chart.render_to_file('budget.svg')

bar_chart.render_to_png('budget.png')


Python可视化工具概述



我以为svg演示,至关不错,并且,我喜欢图表拥有独立,视觉愉悦的风格。我也发现用这个工具,哪些可作,哪些不可作,都比较容易了解。我建议你下载svg文件,在浏览器中查看图表的交互效果。

Plotly

Plotly做为在线工具,用来作数据分析和可视化,有点特别。它拥有健状的API,包括python版本。去网上查查,就知道,它有很丰富的,交互的图表。感谢这些文档,建立条形图至关简单多了。

按照文档,获取API key。而后全部工做,都很容易进行了。须要注意的一点是,全部东西,都将发到web上,因此,请确保你对付web没有问题。有一个选项,可让图表私有,这样,你能够在这方面进行控制。

Plotly能很好地与pandas集成。有问题的时候,能够向开发方发邮件,能很快收到回复。对他们的答复很满意。
好了,Import并读入数据:

?

1
2
3
4
5
6
7
import plotly.plotly as py
import pandas as pd
from plotly.graph_objs import *
 
budget = pd.read_csv( "mn-budget-detail-2014.csv" )
budget.sort( 'amount' ,ascending = False ,inplace = True )
budget = budget[: 10 ]


设置数据和图表类型:

?

1
2
3
4
5
6
data = Data([
Bar(
     x = budget[ "detail" ],
     y = budget[ "amount" ]
)
])


再加上layout信息:

?

1
2
3
4
5
6
7
8
9
10
11
layout = Layout(
title = '2014 MN Capital Budget' ,
font = Font(
     family = 'Raleway, sans-serif'
),
showlegend = False ,
xaxis = XAxis(
     tickangle = - 45
),
bargap = 0.05
)


最后,显示图表数据。这会打开浏览器,显示已完成的图表。我原本没有看这些,但可使用py.image.save_as 保存为图像的。很酷吧!你不但能够看到基于web的报告,还有能够嵌入到文档中的本地版本。

?

1
2
3
fig = Figure(data = data, layout = layout)
plot_url = py.plot(data,filename = 'MN Capital Budget - 2014' )
py.image.save_as(fig, 'mn-14-budget.png' )


Python可视化工具概述


打开这个连接,能够在线看一下效果:https://plot.ly/~chris1610/12,还有其它更多例子在这个网站。

所见所得的图表,很是吸引人,并且高度互动。得益于文档和python API,起步入门是很容易的,我喜欢这个最终产品。总结 在Python生态系统中绘图,既有优势,也有缺点。好处是,有不少工具可用。缺点也是,有不少工具可用。找到适合本身的,取决于你需达到的目标。有时候,你须要试用这些工具后,才知道哪一个适合你。咱们不能判定哪一个好,哪一个很差。 下面是我总结的见解: 一、Pandas对于简单绘图,能够随手用,但你须要学习定制matplotlib。 二、Seaborn能够支持更多复杂的可视化方式,但仍然须要matplotlib知识,上色功能是个亮点。 三、ggplot有不少功能,但还须要发展。 四、bokeh是一个有效的工具,若是你想创建一个可视化的服务器,这几乎是杀鸡用牛刀的事情。 五、pygal独立运行,可用来生成交互的svg图表和png文件。它没有基于matploglib的方案那样灵活。 六、Plotly可生成大多数可交互图表。你能够保存为离线文件,而后创建丰富的基于web的可视化。

相关文章
相关标签/搜索