seaborn

seaborn是在matplotlib的基础上进行了更高级的API封装的扩展包,而且与dataframe配合很好,使得作图更加的容易。

seaborn的官方文档:https://seaborn.pydata.org/

中文翻译:https://zhuanlan.zhihu.com/p/27435863

1.支持的图形绘制

①分类数据的绘制

条形图:barplot

统计频数的条形图:countplot

箱图:boxplot

②连续数值数据的绘制

直方图:distplot

密度图(直方图的变种,能更好的界定分布形状):kdeplot

回归图(两个变量之间的线性拟合情况):regplot

③矩阵图

热图:heatmap

2.分类问题

分类特征和数值特征关于输出的关系

①分类特征(包含标称和序数)

一般是用countplot来画并列的条形图。

#观察分类特征Pclass,Sex,Embarked与输出Survived的关系,可以发现Pclass越upper获救率越高,Sex女生获救率更高,Embarked没有明显特点
#设置figure,在一个figure中同时显示
f, (ax1, ax2, ax3) = plt.subplots(1,3,sharey=True,figsize=(10,3)) #sharey=True表示共y轴
#countplot统计不同种类的次数,hue表示分组的标准,ax=ax1表示第一个子图
sns.countplot(x='Pclass',hue='Survived',data=data_train,palette=['r','g'],alpha=0.5,ax=ax1)
sns.countplot(x='Sex',hue='Survived',data=data_train,palette=['r','g'],alpha=0.5,ax=ax2)
sns.countplot(x='Embarked',hue='Survived',data=data_train,palette=['r','g'],alpha=0.5,ax=ax3)
plt.show()

②数值特征(连续的数值)

一般是用distplot或kdeplot画图,观察数值特征在不同输出下的分布情况

#观察数值特征的在Survived=0和Survived=1两种情况下的分布
#Age在Survived=0和Survived=1的分布情况,发现年龄较小的更容易获救
g=sns.FacetGrid(data_train,col='Survived') #FacetGrid分面,初始化网格,设置好坐标轴
g.map(sns.distplot,'Age') #map可视化数据
plt.show()

3.回归问题

①分类特征

一般是用boxplot画图,观察在分类特征的不同取值下,输出的连续值的情况,为了同时显示多个特征,使用facetgrid分面

#分类特征画箱线图,观察分类特征和售价的关系
def my_boxplot(x, y,**kwargs):
    sns.boxplot(x=x, y=y)
for c in categorical_feats:
    train_data[c] = train_data[c].fillna("Missing") #将所有分类特征中缺失的值设为"Missing"
df=pd.melt(train_data,id_vars=['SalePrice'],value_vars=categorical_feats,var_name='features',value_name='value') #将所有分类特征名作为变量放入表中
#col用来创建数据的子集,指定划分数据的依据,得到多个子图,col_wrap指定数值则能使子图的排列不限制于一行,col_wrap=4表示一行四个子图,sharex=False表示子图不共用x轴
g=sns.FacetGrid(df,col='features',col_wrap=3,sharex=False,sharey=False)
g=g.map(my_boxplot,'value','SalePrice') #定义函数my_boxplot而不直接用sns.boxplot是为了规定好顺序
plt.show() #显示图形

②数值特征

一般用回归图regplot观察数值特征与输出之间是否存在线性关系,为了同时显示多个特征,使用facetgrid分面

def my_regplot(x,y,**kwargs):
    sns.regplot(x=x,y=y) #画出散点图并进行线性拟合,若设order=2则进行二次曲线拟合
df=pd.melt(train_data,id_vars=['SalePrice'],value_vars=numeric_feats[:4],var_name='features',value_name='value')
g=sns.FacetGrid(df,col='features',col_wrap=3,sharex=False,sharey=False)
g = g.map(my_regplot,"value","SalePrice")
plt.show()

4.分析特征之间的两两线性关系

一般是用heatmap

#计算相关性矩阵,只能计算数值特征间(包含输出),默认是皮尔逊相关系数(度量两个变量之间的线性相关性)
corr=data_train.ix[:,'Survived':'Embarked'].corr() 
#cmap表示使用的颜色,annot=True显示相关系数值
sns.heatmap(corr,cmap='Blues',annot=True)
plt.show()

5.分析回归问题中数值特征或输出的分布

一般是用distplot,probplot(正态概率图q-q图,观察是否符合正太分布,如果拟合直线越好,正态性越好)

import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats

sns.distplot(y_train) #画输出的直方图,看是否服从正太分布
fig=plt.figure()
stats.probplot(y_train,plot=plt) #画正态概率图
plt.show()

如果不符合正态分布,可以通过数据变换使其符合正态分布

①右偏,使用log(x),再使用正态概率图检查是否符合正太分布

②左偏,使用exp(x)

results matching ""

    No results matching ""