Seaborn教程(2)可视化数据集的分布

本教程对seaborn官方教程的理解性翻译,在原教程的基础上有适当的删减,调整。仅供参考交流

可视化数据集的分布.png

. 可视化数据集的分布

  • 单元分布
  • 双元分布
  • 可视化数据集中的pairwise relationship

1. 单元分布 sns.distplot()

  • 直方图(hist)+内核密度函数(kde)

在seaborn中最简便查看单元分布的函数是distplot().该函数默认绘制直方图并拟合内核密度估计。通过调整参数可以分别绘制直方图,拟合内核密度图,地毯图等。

x = np.random.normal(size=100)
sns.distplot(x);
单元分布
  • 直方图

sns.distplot(x,kde=False) / plt.hist()

当绘制直方图时,你需要调整的参数是bin的数目(组数)。displot()会默认给出一个它认为比较好的组数,但是尝试不同的组数可能会揭示出数据不同的特征。
sns.displot(x,bins=20,kde=False,rug=True)

图片.png

当绘制直方图时,最重要的参数是bin以及vertical,以确定直方图的组数和放置位置
sns.distplot(x, bins=20, kde=False, rug=True);

图片.png
  • 核密度估计

sns.distplot(x,hist=False) / sns.kdeplot(x)

核密度估计图使用的较少,但其是绘制出数据分布的有用工具,与直方图类似,KDE图以一个轴的高度为准,沿着另外的轴线编码观测密度。

sns.displot(x,hist=False,rug=True)
图片.png

绘制KDE图比绘制直方图要复杂得多,每个观测值首先要以该值为中心的正(高斯)曲线代替。然后各个点在加起来,计算支持网格点中每个点的密度值,然后将得到的曲线归一化,使其面积小于,即得到核密度估计图

在seaborng中也有一个函数kdeplot(),使用这个函数,我们可以得到同样的曲线,这个函数在distplot()中也被调用,但是他提供了更多更方便的借口,来进行可视化调整。
sns.kdeplot(x,shae=Ture)

图片.png

参数bw(binwidth)同直方图的bin一样,控制了估算与数据间的紧密程度。与我们之前提到的内核宽度一致,默认情况下,函数会直接猜一个数据,但尝试更大或更小bw情况的,或许会更有帮助。

sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend();
图片.png

使用cut参数,可以控制曲线绘制多远的极限值。然而这仅仅只是影响曲线如何绘制,并不会影响曲线本身

sns.kedplot(x,shade=True,cut=0)
sns.rugplot(x)
图片.png
  • 拟合参数分布

sns.distplot(x,kde=False,fit=stats,gamma)

你也可以通过使用distplot()来拟合出一个数据集的参数分布,直观上来评估其余观测数据是否关系密切。

x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma);
图片.png

2. 二元变量分布 sns.jointplot()

seaborn也能用来可视化二元变量的分布,最简单的方法是使用jointplot(),这个函数能够产生一个多面板的图像,在图像上包括两个变量之间的关系,在单独的坐标中还绘制出了各个变量的分布。

mean,cov=[0,1],[(1,.5),(.5,1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
  • 散点图

sns.jointplot(x='x',y='y',data=df)

可视化二元分布最常见的方式是绘制散点图。散点图通过散点位置来代表x,y值。这和地毯图绘制在二维上类似。你可以通过matlibplot中的plt.scatter绘制散点图,当然你也可以直接使用sns.jointplot来绘制。

sns.jointplot(x="x", y="y", data=df);
sns.jointplot.png

通过调节参数kind={scatter,hex,reg,resid,kde}可绘制不同种类的图。

  • Hexbin图

sns.jointplot(x=x,y=y,data=df,kind='hex')

一个直方图的二维模拟被称为“Hexbin”图,因为这类图通过六角箱颜色的深浅来表示落于六角箱类观测值的数目。因此这类图比较适用于观察较大的数据集。该图可以使用plt.hexbin绘制,当然也可以调参使用jointplot()绘制,当使用时最好设置为白色背景,图像效果最佳。

x,y=np.random.mutivariate_normal(mean,cov,1000).T
with sns.axes_style("white")
        sns.jointplot(x=x,y=y,kind="hex",color='k')
Hexinplot.png
  • 核密度估计

sns.jointplot(x='x',y='y',data=df,kind='kde')

sns.kdeplot(df.x,df.y)

也可以通核密度函数来表现二元分布的分布,在seaborn,这样的图通过等高线图来表现二元分布的。

sns.jointplot(x="x", y="y", data=df, kind="kde");
kedplot.png

sns也提供kedplot()函数来让你直接绘制二维核密度图。这样你就可以绘制这类图到一个特定的matplotlib轴上。

f,ax=plt.subplots(figsize(6,6))
sns.kedplot(df.x,df.y,ax=ax)
sns.rugplot9(df.x,color='g',ax=ax)
sns.rugplot(df.y,veritical=True,ax=ax)
kedplot+rugplot.png
  • sns.kedplot(df.x,df.y,n_level=60,shade=True)

如果你希望你的二维变量密度更连续,你可以通过增加等高线数量来完成

f,ax=subplots(figsize=(6,6))
cmp=sns.cubehelix_palette(as_cmap=True,dark=0,light=1,reverse=True)
sns.kedplot(df.x,df.y,cmap=map,n_level=60,shade=True)
kdeplot.png
  • JointGrid 高级图像管理对象

jointplot()使用JointGrid来管理图形。如果你想更灵活的绘图可以通过使用JointGrid。jointplot()在绘图后将返回jointplot对象,你可以用他来添加更多的图层或调整其他可视化。

g=sns.joinplot(x='x',y='y',data=df,kind='kde',color='m')
g.plot_joint(plt.scatter,c='w',s=30,linewidth=1,marker='+')
g.ax_joint.collection[0].set_alpha(0)
g.set_axis_label("$X$","$Y$")
jointgrid.png

3.可视化成对关系sns.pairplot()

为了绘制一个数据集中多个成对的二元分布,你可以使用pairplot()功能,该功能将创建矩阵,来展现两两变量间的关系。默认情况,各单变量分布将绘制在对角线上。

iris=sns.load_dataset("iris")
sns.paiplot(iris)
pairplot.png

高级图像管理对象PairGrid

和jointplot()与JointGrid的关系一样,可以使用PairGrid对pairplot进行更多个性化设计。

g=sns.Pairgrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdig(snsn.kdeplot,cmap="Blues_d",n_levels=6)
图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 第三章 分布数据集的可视化 在处理一组数据时,通常首先要做的是了解变量是如何分布的。这一章将简要介绍seborn中...
    未禾盐阅读 5,326评论 1 5
  • 设置绘图可以在jupyter notebook显示 可以使用下面三种方法绘图 直接使用DataFrame绘图,比如...
    _我和你一样阅读 1,299评论 0 1
  • 在汤海峰汤总(QQ/微信:49701762)群里,这个叫李梦悦的分享很不错,我记录下来分享给大家: 我叫李梦悦,很...
    安梓阅读 354评论 0 1
  • 繁星怒放的夏夜 在前头搔首弄姿 在放声肆掠的言语 在眼前空游思度 …撩拨吧,我想 ,撩拨吧……我不必和你分享我的幻...
    黑超假面人阅读 166评论 0 0
  • 有没有这样一个周末。 不要他的陪伴,也不约姐姐妹妹聊天喝茶,因为聊来聊去,内容还不是彼此的他。就这样一个周末,能不...
    Ceciliare阅读 121评论 0 0