seaborn库其实是在matplotlib库的基础上进行了更高级的API封装,从而使绘图更容易、更美观。

本文主要通过泰坦尼克号数据集,来演示seaborn库常用可视化图形。

分析目的:

  • 了解泰坦里克号乘客的基本信息分布情况
  • 乘客的信息与生还数据是否有关联

数据集导入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
%matplotlib inline

import seaborn as sns
import pandas as pd
from pylab import rcParams


# 设置图形主题样式
sns.set_style('dark',{'font.sans-serif':['simhei','Arial']})


# 忽略警告信息
import warnings
warnings.filterwarnings('ignore')
1
2
3
4
5
# 拿到小费数据集
train_data = pd.read_csv('/泰坦尼克号数据.csv')

# 查看前5行数据
train_data.head()

image.png

1
2
# 常规的数据信息查看
train_data.info()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
1
2
# 查看缺失值
train_data.isnull().sum()
1
2
3
4
5
6
7
8
9
10
11
12
13
PassengerId      0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64

二元分布图

如果要体现多变量的分布情况,就需要成对的二元分布图。在seaborn中,可以使用pairplot函数来完成二元分布图,该函数会创建一个轴矩阵,以此显示DataFrame中每两列的关系,在对角上为单变量的分布情况。

看图的方式是查看横轴、纵轴的方式查看每两个变量的对比情况。

1
sns.pairplot(train_data)

output_7_1.png

直方图(使用直方图查看年龄分布)

1
2
3
4
5
# 使用平均值进行填充
train_data['Age'] = train_data['Age'].fillna(train_data['Age'].mean())

# 查看地点分布。countplot() 用于查看一列下面,每个分组的数据统计,可以直接使用,不需要计算出count数据
sns.countplot(x='Embarked',data=train_data)

output_9_1.png

琴形图(变形的箱线图,来查看分类的分布)

1
2
3
4
5
6
7
8
# 利用正确的登船地点S进行缺失值的填充
train_data['Embarked'] = train_data['Embarked'].fillna('S')


# 结合船舱等级,绘制乘客年龄分布箱线图,由图中可以看出,头等舱的年龄跨度较大,第三级船舱的中年人分布最多。
# 用来查看两组变量的关系,一类变量是分类型变量,一类是数字型变量

sns.violinplot(x='Pclass',y='Age',data=train_data)

output_11_1.png

分类散点图

用于观察不同分类下,值的数量和高低分布

1
2
3
# 在是否生还情况下,Fare 金额的的分布情况
sns.stripplot(x='Survived',y='Fare',data=train_data)
sns.despine()

output_13_0.png

使用hue参数可以加入分类的变量

1
2
3
# 是否生还男女人数占比,“1”表示生还
# 用来同时查看两组数据的对比情况,一类是分类数据,一类是数值
sns.countplot(x='Survived',hue='Sex',data=train_data)

output_15_1.png

多个图形场景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Sex、SibSp、Embarked、Pclass对是否生存的影响
f, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,10))

# palette参数表示设置颜色,这里设置为主题色Pastel2
plt.subplot(2,2,1)
gender=sns.countplot(x="Sex",hue="Survived",data=train_data,palette="Pastel1")
plt.xlabel("Sex")
plt.title("Survived of Sex")

plt.subplot(2,2,2)
gender=sns.countplot(x="SibSp",hue="Survived",data=train_data,palette="Pastel1")
plt.xlabel("SibSp")
plt.title("Survived of SibSp")

plt.subplot(2,2,3)
gender=sns.countplot(x="Embarked",hue="Survived",data=train_data,palette="Pastel1")
plt.xlabel("Embarked")
plt.title("Survived of Embarked")

plt.subplot(2,2,4)
gender=sns.countplot(x="Pclass",hue="Survived",data=train_data,palette="Pastel1")
plt.xlabel("Pclass")
plt.title("Survived of Pclass")

output_17_1.png

seaborn 的网格使用

1
2
3
# seaborn 的网格使用。分别对别 Sex 的生存情况
g = sns.FacetGrid(train_data,col='Sex')
g.map(sns.countplot,'Survived')

output_19_1.png