数据可视化 seaborn绘图(1)
seaborn是基于matplotlib的数据可视化库.提供更高层的抽象接口.绘图效果也更好.

用seaborn探索数据分布
- 绘制单变量分布
- 绘制二变量分布
- 成对的数据关系可视化
绘制单变量分布
seaborn里最常用的观察单变量分布的函数是distplot()。默认地,这个函数会绘制一个直方图,并拟合一个核密度估计.如下所示:
x = np.random.normal(size=100)
sns.distplot(x);

首先解释一下啥叫核密度估计.wiki wiki里的一大堆数学证明看着就可怕....
简单地说:所谓核密度估计,就是采用平滑的峰值函数(“核”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟.
说人话的话,就是:我们有很多样本,但再多的样本,也是离散的.所谓核密度估计,就是根据离散采样,估计连续密度分布. 所以样本量得大,假如你就3,5个样本,还有什么好估计的.
那核密度估计的原理是啥呢?
你上网搜索的话,大概率会搜到这个:
核密度函数的原理比较简单,在我们知道某一事物的概率分布的情况下,如果某一个数在观察中出现了,我们可以认为这个数的概率密度很大,和这个数比较近的数的概率密度也会比较大,而那些离这个数远的数的概率密度会比较小。
基于这种想法,针对观察中的第一个数,我们可以用K去拟合我们想象中的那个远小近大概率密度。对每一个观察数拟合出的多个概率密度分布函数,取平均。如果某些数是比较重要的,则可以取加权平均。
说实在的,我还是觉得很难理解.......
好在,一图胜千言!
x = np.random.normal(0, 1, size=30)
bandwidth = 1.06 * x.std() * x.size ** (-1 / 5.)
support = np.linspace(-4, 4, 200) kernels = []
for x_i in x: kernel = stats.norm(x_i, bandwidth).pdf(support)
kernels.append(kernel)
plt.plot(support, kernel, color="r") sns.rugplot(x, color=".2", linewidth=3);
.
即:假如有x个样本,如果我们用Gaussian Kernel Density(就是常说的正态分布啦),对每一个样本,我们都认为这个样本处在一个正态分布的峰值位置,(因为我们已经发现这个样本了).这样,就拟合出了x个正态分布曲线. 将这些曲线叠加取平均再正则化,就得到了最终的核密度估计分布曲线.
这里我们用的是kernel是gaussian.其实kernel有很多种,其中gau是最常用的.
kernel : {‘gau’ | ‘cos’ | ‘biw’ | ‘epa’ | ‘tri’ | ‘triw’ }, optional
displot参数
sns.distplot(x, kde=False, rug=True);
rug=True:绘制出离散样本

sns.distplot(x, bins=20, kde=False, rug=True);
bins=20:直方图的"柱子"的个数

更多参数,看文档去吧:displot api
绘制双变量分布
最常用的方法是散点图绘制 matplotlib.scatter 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);
这种散点图有一个问题,相同的点会覆盖在一起.导致我们看不出来浓密和稀疏.
sns.jointplot(x=x, y=y, kind="hex", color="k");
核密度分布估计

jointpoint函数使用JointGrid对象来绘图.为了提供更多的灵活性,jointpoint()返回一个JointGrid对象,你可以绘制出自己定制的图.
g = sns.jointplot(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.collections[0].set_alpha(0)
g.set_axis_labels("$X$", "$Y$");

绘制成对的数据关系可视化
以著名的iris数据集为例. iris数据集有4个特征.那么两两组成一个pair的话,就有16种组合.用pairplot()绘制如下:

和jointplot类似,pairplot是基于PairPlot对象的.直接用PairPlot对象,可以更加灵活地绘制你想要的图
比如绘制iris数据集的核密度分布估计.
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, n_levels=6);

数据可视化 seaborn绘图(1)的更多相关文章
- 数据可视化 seaborn绘图(2)
统计关系可视化 最常用的关系可视化的函数是relplot seaborn.relplot(x=None, y=None, hue=None, size=None, style=None, data=N ...
- Python数据可视化-seaborn库之countplot
在Python数据可视化中,seaborn较好的提供了图形的一些可视化功效. seaborn官方文档见链接:http://seaborn.pydata.org/api.html countplot是s ...
- Python图表数据可视化Seaborn:2. 分类数据可视化-分类散点图|分布图(箱型图|小提琴图|LV图表)|统计图(柱状图|折线图)
1. 分类数据可视化 - 分类散点图 stripplot( ) / swarmplot( ) sns.stripplot(x="day",y="total_bill&qu ...
- Python图表数据可视化Seaborn:1. 风格| 分布数据可视化-直方图| 密度图| 散点图
conda install seaborn 是安装到jupyter那个环境的 1. 整体风格设置 对图表整体颜色.比例等进行风格设置,包括颜色色板等调用系统风格进行数据可视化 set() / se ...
- Python图表数据可视化Seaborn:3. 线性关系数据| 时间线图表| 热图
1. 线性关系数据可视化 lmplot( ) import numpy as np import pandas as pd import matplotlib.pyplot as plt import ...
- Python图表数据可视化Seaborn:4. 结构化图表可视化
1.基本设置 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns ...
- Python数据可视化-seaborn
详细介绍可以看seaborn官方API和example galler. 1 set_style( ) set( ) set_style( )是用来设置主题的,Seaborn有五个预设好的主题: d ...
- 《Python数据分析》笔记——数据可视化
数据可视化 matplotlib绘图入门 为了使用matplotlib来绘制基本图像,需要调用matplotlib.pyplot子库中的plot()函数 import matplotlib.pyplo ...
- seaborn 数据可视化(一)连续型变量可视化
一.综述 Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,图像也更加美观,本文基于seaborn官方API还有自己的一些理解. 1.1.样式控制: ...
随机推荐
- Java类更改常量后编译不生效
在Java文件中,指向编译时static final的静态常量, 会被在运行时解析为一个局部的常量值(也就是说静态常量在编译后,成为了常量,而不是原先的代码).这对所有的基础数据类型(就像int ,f ...
- 【repost】js window对象属性和方法相关资料整理
window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...
- 利用Python+163邮箱授权码发送邮件
背景 前段时间写了个自动打卡的脚本,但是脚本不够完善,我需要知道,打卡到底成没成功,因此,我想到了用Python执行完代码之后,再执行一段发送邮件的代码.需求开始明确了,就开始分析和写代码实现吧. 分 ...
- 洛谷P1886--滑动窗口(单调队列模板)
https://www.luogu.org/problemnew/show/P1886 单调队列的操作上比普通队列多了可以从尾端出队 单调队列保持队内元素单调递增/递减,以保证队首元素为最小/最大元素 ...
- 没有job offer,拿加拿大工签PGWP回国如何续签加拿大小签?
很多同学因为在加拿大毕业后申请了三年的工作签证PGWP之后匆匆回国,没有来得及续签小签,但是回国一段时间之后又想要回加拿大,想要用自己的三年工签来续自己的小签.拿了加拿大PGWP没有job offe ...
- Shell变量类型和运算符-2
- 通配符的匹配很全面, 但无法找到元素 'xxxxxxxx'
首先,一般配置通配符之前,你都会有如下xml头吧 <beans xmlns="http://www.springframework.org/schema/beans" xml ...
- 2017年7月最新浏览器市场份额,IE8份额仅剩个位数
数据来源为百度统计所覆盖的超过150万的站点,样本为2017年6月1日-2017年6月30日最新一个月的数据. 统计如下: 其中IE8的份额为9.83%,首次降至个位数.在所有IE版本中,份额最高的是 ...
- Javascript高级编程学习笔记(75)—— 表单(3)表单字段
表单字段 表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的 除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集 ...
- go语言面向对象编程之类型系统
go语言类型系统 类型系统,顾名思义是指一个语言的类型体系结构,一个典型的类型系统通常包含如下基本内容 基础类型:如byte,int,bool,float等 复合类型:如数组,指针,结构体 可以指向任 ...
