目录
Seaborn介绍
Seaborn 是一个基于 matplotlib 且数据结构与 pandas 统一的统计图制作库。他提前已经定义好了一套自己的风格。然后也封装了一系列的方便的绘图函数,之前通过 matplotlib 需要很多代码才能实现完成的图,使用 seaborn 可能非常简单,一行代码搞定。
Seaborn安装
1.通过 pip:pip install seaborn;
2.通过 anaconda:conda install seaborn;
官方文档
中文学习文档:
An introduction to seaborn-Seaborn 0.9 中文文档 (cntofu.com)https://www.cntofu.com/book/172/docs/1.md
Seaborn绘图风格
在seaborn中,可以通过三个函数来设置样式。分别是 sns.set_style;sns.axes_style;sns.set 方法。
sns.axes_style
(1)如果没有传任何参数,返回的是字段属性;
(2)临时的样式;
with sns.axes_style("dark",{"ytick.left":True}):
sns.scatterplot(x="total_bill",y="tip",data=tips)
例如:
sns.set_style()
这个函数和 sns.axes_style 一样,也是用来设置绘图风格的。但是这个函数的风格设置,不是临时的,而是一旦设置了,那么下面所有绘图风格都会用这个风格。
sns.set_style("darkgrid")
sns.scatterplot(x="total_bill",y="tip",data=tips)
例如:
sns.set
set 方法也是用来设置样式的,它的功能更加强大。除了 style 以外,还可以设置调色板,字体,字体大小,颜色等,也可以设置其它的 matplotlib.rcParams可以接受的参数。
sns.set(rc={"lines.linewidth":4})
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint",y="signal",data=fmri)
例如:
sns.despine
移除轴脊柱函数;
例如:
Seaborn颜色风格
不推荐使用(使用起来不是很方便)这里不做过多的描述。
实例:
Seaborn在Axes绘图
实际上 seaborn 的绘图函数中也有大量的直接使用 Axes 进行绘图的,凡是函数名中已经明确了这个图的类型,这种图都是使用 Axes 绘图的。比如 sns.scatterplot,sns.lineplot,sns.barplot 等。Axes绘图可以直接使用之前 matplotlib 的一些设置图的元素。
fig,ax = plt.subplots(1,2,figsize=(20,5))
sns.scatterplot(x="total_bill",y="tip",data=tips,ax=ax[0])
sns.barplot(x="day",y="total_bill",data=tips,ax=ax[1])
例如绘制条形图
绘制散点图
Seaborn绘图
关系型绘图
seaborn.relplot()
这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线型图,具体绘制什么图形是通过 kind 参数来决定的。实际上一下两个函数就是relplot的特例:
散点类型:scatterplot -> relplot(kind="scatter");
线性类型:lineplot -> replot(kind="line");
基本使用
import seaborn as sns
tips = sns.load_dataset("tips",cache=True)
sns.relplot(x="total_bill",y="tip",data=tips)
hun参数
hue 参数是用来控制第三个变量的颜色显示的。比如我们在以上图的基础上体现出星期几的参数,那么可以通过以下代码来实现:
sns.relplot(x="total_bill",y="tip",hue="day",data=tips)
添加col和row参数
col 和 row ,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础上我们想要把 lunch 和 dinner 分割成两个图显示,则:
# col_wrap=1 控制换行
# size 点的大小
sns.relplot(x='total_bill',y='tip',data=tips,col='time',col_wrap=1,size="size")
sns.relplot(x='total_bill',y='tip',data=tips,col='time')
绘制折线图
relplot 通过设置 kind="line" 可以绘制折线图。并且它的功能比 plt.plot 更加强大。plot只能指定具体的 x轴和y轴的数据。而 relplot 则可以在自动在两组数据中进行计算绘图。
"""
需求:signal与timepoint变化关系 --- > 折线图
读图
线 --- 均值
阴影 --- 置信区间
ci=None
style:region 不同区域使用线条样式不一样
"""
sns.relplot(x='timepoint',y='signal',data=fmri,kind='line',ci=None,hue="region",col="event",style="region")
分类绘图
分类图的绘制,采用的是 sns.catplot 来实现的。cat是category的简写,这个方法默认绘制的是 分类散点图,如果想要绘制其他类型的图,同样也是通过 kind 参数来指定。
主要分为
(1)分类散点图;
(2)分类分布图;
(3)分类统计图;
分类散点图
分类散点图比较适合数据量不是很多的情况,它是用 catplot 来实现的,但是也有一下两种特别地方法:
(1)stripplot():catplot(kind="strp")默认的;
(2)swarmplot():catplot(kind="swarm");
sns.catplot(x="day",y="total_bill",data=tips,hue="sex")
"""
分簇散点图
缺点 数据量巨大 不适用
"""
sns.catplot(x="day",y="total_bill",data=tips,hue="sex",kind="swarm")
分类分布图
分类分布图,主要是根据分类来看,然后在每个分类下的数据的分布情况。也是通过 catplot
来实现的,以下三个方法分别是不同的 kind 的参数:
(1)箱型图:boxplot() (kind="box")
(2)小提琴图:vioinplot() (kind=”violin")
分类统计图
分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。有以下几种方式:
(1)条形图:barplot() (kind="bar")
(2)柱形图:countplot() (kind="count")
(3)点线图:pointplot() (kind="point")
条形图
seaborn 中的条形图具有统计功能,可以统计处比例,平均数,也可以按照你想要的统计函数来统计。
"""
分类统计图
需求:直观体现不同日期total_bill数量
黑色线 置信区间 线条越长意味数据比较离散
estimator :函数
"""
sns.catplot(x='day',y='total_bill',data=tips,kind='bar',estimator=sum)
柱形图
柱形图是专门用来统计某个单一变量出现数量的图形。
sns.catplot(x="sex",data=titanic,kind="count")
点线图
点线图可以非常方便的看到变量之间的趋势变化。
sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")
分布绘图
分布绘图主要分为单变量分布以及二变量分布和pairplot;
单变量分布
单一变量主要就是通过直方图控制的,在 seaborn 种直方图的绘制采用的是 distplot,其中 dist 是 distribution的简写,不是 histogram 的简写。
titanic = pd.read_csv("./seaborn-data-master/titanic.csv")
titanic.head()
sns.distplot(titanic["age"])
参数变化
"""
需求:观察所有人年龄的分布情况
单变量分布图 -- > 直方图
- kde 是否展示kde曲线
- bins 指定组数
- rug 越密集数据越集中
- hist 是否展示直方图
"""
sns.distplot(age_titanic['age'],bins=30,rug=True,hist=False)
二变量分布
多变量分布图可以看出两个变量之间的分布关系。一般都是采用多个图进行表示。多变量分布图采用的函数是 jointplot。
"""
二变量分布
kind='hex' 六边形的点
gridsize 点的大小
height 图形大小 20*20
ratio 主图和副图之间比例
space 主图和副图之间距离
marginal_kws
"""
sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex',gridsize=15,height=5,ratio=3,space=0,marginal_kws={"rug":True,"kde":True},color="red")
pairplot
通常用来机器学习建立模型之前选择合适的模型。
sns.pairplot(tips,vars=["total_bill","tip"])
线性回归绘图
线性回归图可以帮助我们看到数据的关系趋势。在 seaborn 种可以通过 regplot 和lmplot两个函数实现。regplot 的 x 和 y 可以为 Numpy数组,Series等变量。而lmplot的x和y必须为字符串,并且 data的值不能为空:
(1)regplot(x,y,data=None);
(2)lmplot(x,y,data)。
补充
热力图和EDA探索性分析
#输入需要使用的库
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import seaborn as sns
from pandas_profiling import ProfileReport
"""数据分析"""
#热力图
# 分析各特征之间的相关性并可视化。
plt.figure(figsize=(15,10))
sns.heatmap(dataset.corr(),annot=True)
#EDA探索性分析
profile = ProfileReport(dataset, title='EDA', explorative=True)
#"第一个不行用第二个" https://blog.csdn.net/weixin_44527237/article/details/110096564
profile.to_widgets()
profile.to_notebook_iframe()