http://www.financecomputing.net/wordpress/?p=1047
Seaborn
Matplotlib是Python主要的绘图库。但是,我不建议你直接使用它,原因与开始不推荐你使用NumPy是一样的。虽然Matplotlib很强大,它本身就很复杂,你的图经过大量的调整才能变精致。因此,作为替代,我推荐你一开始使用Seaborn。Seaborn本质上使用Matplotlib作为核心库(就像Pandas对NumPy一样)。我将简短地描述下seaborn的优点。具体来说,它可以:
- 默认情况下就能创建赏心悦目的图表。(只有一点,默认不是jet colormap)
- 创建具有统计意义的图
- 能理解pandas的DataFrame类型,所以它们一起可以很好地工作。
虽然anaconda预装了pandas,却没安装seaborn。可以通过conda install seaborn轻松地
安装。
具有统计意义的图
In [5]:
1
|
%
matplotlib
inline
# IPython magic to create plots within cells
|
In [7]:
1
2
3
4
5
6
|
import
seaborn
as
sns
# Load one of the data sets that come with seaborn
tips
=
sns
.
load_dataset
(
"tips"
)
sns
.
jointplot
(
"total_bill"
,
"tip"
,
tips
,
kind
=
'reg'
)
;
|
如你所见,仅通过一行代码,我们就创建了一个漂亮复杂的统计图,其中包含拥有置信区间的最拟合回归直线、边界图,以及相关系数。使用matplotlib重新绘制这幅图的话需要相当多的(丑陋)代码,包括调用scipy执行线性回归并手动利用线性回归方程绘制直线(我甚至想不出怎么在边界绘图,怎么计算置信区间)。上面和下面的例子都摘自教程“
the tutorial on quantitative linear models”。
与Pandas的DataFrame很好地工作
数据有自己的结构。通常我们感兴趣的包含不同的组或类(这种情况下使用pandas中groupby的功能会让人感到很神奇)。比如tips(小费)的数据集是这样的:
In [9]:
1
|
tips
.
head
(
)
|
Out[9]:
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
我们可能想知道吸烟者给的小费是否与不吸烟的人不同。没有seaborn的话,这需要使用pandas的groupby功能,并通过复杂的代码绘制线性回归直线。使用seaborn的话,我们可以给col参数提供列名,按我们的需要划分数据:
In [11]:
1
|
sns
.
lmplot
(
"total_bill"
,
"tip"
,
tips
,
col
=
"smoker"
)
;
|
很整洁吧?
随着你研究得越深,你可能想更细粒度地控制这些图表的细节。因为seaborn只是调用了matplotlib,那时你可能会想学习这个库。然而,对绝大部分工作来说我还是喜欢使用seaborn