Python高级可视化库seaborn分布分析(基础整理)

来源:互联网 发布:淘宝在哪里领取优惠卷 编辑:程序博客网 时间:2024/05/01 17:48

单变量分布

(1)distplot,seaborn的displot()函数集合了matplotlib的hist()与核函数估计kdeplot的功能,增加了rugplot分布观测条显示与利用scipy库fit拟合参数分布的新颖用途。
(2)kdeplot,核密度估计的步骤:每一个观测附近用一个正态分布曲线近似;叠加所有观测的正态分布曲线;归一化
bandwidth(bw参数)用于近似的正态分布曲线的宽度。
(3)模型参数拟合,distplot的fit参数

双变量分布

(1.1)jointplot,kind参数默认——散点图
(1.2)jointplot,kind=’hex’——六角箱图
(1.3)jointplot,kind=’kde’——核密度估计图
(2)subplots上画kdeplot,rugplot
(3)cubehelix_palette,梦幻效果
(4)plot_joint和jointplot联合使用,同时画散点和二维kde

数据集中特征的两两关系

(1)pairplot,默认对角线histgram,非对角线kdeplot
(2)map_diag定义对角线单个属性图,map_offdiag定义非对角线两个属性关系图

——————————————————————————————

单变量分布

(1)distplot,seaborn的displot()函数集合了matplotlib的hist()与核函数估计kdeplot的功能,增加了rugplot分布观测条显示与利用scipy库fit拟合参数分布的新颖用途。具体用法如下:
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
Parameters:
a : Series, 1d-array, or list. #一维数组
bins : argument for matplotlib hist(), or None, optional #设置分桶数
hist : bool, optional #控制是否显示分桶柱子
kde : bool, optional #控制是否显示核密度估计图
rug : bool, optional #控制是否显示观测实例竖线
fit : random variable object, optional #控制拟合的参数分布图形
{hist, kde, rug, fit}_kws : dictionaries, optional
Keyword arguments for underlying plotting functions.
vertical : bool, optional #显示正交控制
If True, oberved values are on y-axis.

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))#ord()函数它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值,#如果所给的Unicode字符超出了你的Python定义范围,则会引发一个TypeError的异常。#利用np.random.seed()函数设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数x = np.random.normal(size=100)sns.distplot(x, kde=True, bins=20, rug=True)

kde控制是否画kde曲线,bins是分桶数,rug控制是否画样本点(参考rug图可以设定合理的bins)
这里写图片描述

(2)kdeplot,核密度估计的步骤:每一个观测附近用一个正态分布曲线近似;叠加所有观测的正态分布曲线;归一化
bandwidth(bw参数)用于近似的正态分布曲线的宽度。

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))x = np.random.normal(size=100)sns.kdeplot(x)sns.kdeplot(x, bw=.2, label="bw: 0.2")sns.kdeplot(x, bw=2, label="bw: 2")plt.legend()

这里写图片描述

(3)模型参数拟合,distplot的fit参数

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)x = np.random.gamma(6, size=200)sns.distplot(x, kde=False, fit=stats.gamma) #fit控制拟合的参数分布图形 

这里写图片描述

双变量分布

(1.1)jointplot,kind参数默认——散点图

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))mean, cov = [0, 1], [(1, .5), (.5, 1)] #两个相关的正态分布data = np.random.multivariate_normal(mean, cov, 200) #依据指定的均值和协方差生成数据,生成二维数组df = pd.DataFrame(data, columns=["x", "y"])with sns.axes_style("ticks"):    sns.jointplot(x="x", y="y", data=df)

这里写图片描述

(1.2)jointplot,kind=’hex’——六角箱图

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))x, y = np.random.multivariate_normal(mean, cov, 200).Twith sns.axes_style("ticks"):    sns.jointplot(x=x, y=y, kind="hex")

这里写图片描述

(1.3)jointplot,kind=’kde’——核密度估计图

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))x, y = np.random.multivariate_normal(mean, cov, 200).Twith sns.axes_style("ticks"):    sns.jointplot(x=x, y=y, kind="kde") #mean, cov = [0, 1], [(1, .5), (.5, 1)] #data = np.random.multivariate_normal(mean, cov, 200) #df = pd.DataFrame(data, columns=["x", "y"])#with sns.axes_style("ticks"):#    sns.jointplot(x="x", y="y", data=df, kind="kde")

这里写图片描述

(2)subplots上画kdeplot,rugplot

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))x, y = np.random.multivariate_normal(mean, cov, 200).Tf, ax = plt.subplots(figsize=(6, 6))sns.kdeplot(df.x, df.y, ax=ax)sns.rugplot(df.x, color="g", ax=ax)sns.rugplot(df.y, vertical=True, ax=ax)

这里写图片描述

(3)cubehelix_palette,梦幻效果

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))x, y = np.random.multivariate_normal(mean, cov, 200).Tf, ax = plt.subplots(figsize=(6, 6))cmap = sns.cubehelix_palette(as_cmap=True, dark=1, light=0)sns.kdeplot(df.x, df.y, cmap=cmap, n_levels=60, shade=True)

这里写图片描述

(4)plot_joint和jointplot联合使用,同时画散点和二维kde

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)np.random.seed(sum(map(ord, "distributions")))mean, cov = [0, 1], [(1, .5), (.5, 1)] data = np.random.multivariate_normal(mean, cov, 200) df = pd.DataFrame(data, columns=["x", "y"])g = sns.jointplot(x="x", y="y", data=df, kind="kde", color="y")g.plot_joint(plt.scatter, c="m", s=30, linewidth=1, marker="+")g.ax_joint.collections[0].set_alpha(0)  #画背景网格线g.set_axis_labels("$X$", "$Y$")

这里写图片描述

数据集中特征的两两关系

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)iris = sns.load_dataset("iris")iris.head()

这里写图片描述

(1)pairplot,默认对角线histgram,非对角线kdeplot

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)iris = sns.load_dataset("iris")sns.pairplot(iris);

这里写图片描述

(2)map_diag定义对角线单个属性图,map_offdiag定义非对角线两个属性关系图

%matplotlib inlineimport numpy as npimport pandas as pdfrom scipy import stats, integrateimport matplotlib.pyplot as pltimport seaborn as snssns.set(color_codes=True)iris = sns.load_dataset("iris")g = sns.PairGrid(iris)g.map_diag(sns.kdeplot)g.map_offdiag(sns.kdeplot, cmap="Blues_d", n_levels=20)

这里写图片描述

原创粉丝点击