核密度估计(Kernel Density Estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。通过核密度估计图可以比较直观的看出数据样本本身的分布特征。
Seaborn中的核密度估计图的由kdeplot ()方法实现,kdeplot ()的参数及其意义如下:
seaborn.kdeplot(data,data2=None,shade=False,
vertical=False,kernel='gau',
bw='scott',gridsize=100,cut=3,
clip=None,legend=True,cumulative=False,
shade_lowest=True,cbar=False, cbar_ax=None,
cbar_kws=None, ax=None, *kwargs)
(1)
data2:绘制二维分布图时需给出数据
(2)
shade:若为True,则在kde曲线下面的区域中进行阴影处理,color控制曲线及阴影的颜色。
(3)
vertical:表示以X轴进行绘制还是以Y轴进行绘制。
(4)
kernel:核函数,可取值为{‘gau’ | ‘cos’ | ‘biw’ | ‘epa’ | ‘tri’ | ‘triw’ }之一,双变量KDE只能使用高斯核函数(gau)。
(5)
bw:即binwidth,同直方图的bin一样,控制了估算与数据间的紧密程度。可取值为:‘scott’ |
‘silverman’ | scalar | pair of scalars。
(6)
gridsize:评估网格中离散点的可选数量。
(7)
cut:表示绘制的时候,控制曲线绘制多远的极限值,默认值为3。
(8)
cumulative :是否绘制累积分布,累积分布最后的值应该是接近1。
单个特征核密度估计图的效果如图所示。
import pandas as pd # 导入pandas库
import warnings # 载入当前版本seaborn库时会有警告出现,先载入warnings,忽略警告
import seaborn as sns # 导入seaborn库
import matplotlib.pyplot as plt # 导入matplotlib库
warnings.filterwarnings("ignore") # 忽略警告
sns.set(style="white", color_codes=True) # 确定主题为white
iris = pd.read_csv("iris.csv") # 读取csv数据并转为Pandas的 DataFrame格式
# sns.kdeplot: kernel density estimation 核密度估计图(单个特征)
sns.FacetGrid(iris, hue="Species", size=6).map(sns.kdeplot, "PetalLengthCm").add_legend()
plt.show()
核密度估计图
利用kdeplot()方法可以绘制二元kde图像。
import pandas as pd # 导入pandas库
import warnings # 载入当前版本seaborn库时会有警告出现,先载入warnings,忽略警告
import seaborn as sns # 导入seaborn库
import matplotlib.pyplot as plt # 导入matplotlib库
warnings.filterwarnings("ignore") # 忽略警告
sns.set(style="white", color_codes=True) # 确定主题为white
iris = pd.read_csv("iris.csv") # 读取csv数据并转为Pandas的 DataFrame格式
# cbar:参数为True,添加一个颜色棒(颜色棒在二元kde图像中才有)
sns.kdeplot(iris['SepalLengthCm'], iris['SepalWidthCm'],shade=True,cbar=True)
plt.show()
二元kde图
import pandas as pd # 导入pandas库
import warnings # 载入当前版本seaborn库时会有警告出现,先载入warnings,忽略警告
import seaborn as sns # 导入seaborn库
import matplotlib.pyplot as plt # 导入matplotlib库
warnings.filterwarnings("ignore") # 忽略警告
sns.set(style="white", color_codes=True) # 确定主题为white
iris = pd.read_csv("iris.csv") # 读取csv数据并转为Pandas的 DataFrame格式
#也可用FaceGrid()函数实现
sns.FacetGrid(iris, size=6).map(sns.kdeplot, "SepalLengthCm", "SepalWidthCm",shade=True,cbar=True).add_legend()
plt.show()
Seaborn中还可以displot()方法绘制核密度估计图,displot()方法集合了matplotlib的hist()方法与seaborn中kdeplot()方法的功能,增加了rugplot分布观测条显示与利用scipy库fit拟合参数分布的新颖用途。通过hist和kde参数调节是否显示直方图及核密度估计,默认hist、kde均为True。