Python数据分析:数据可视化Seaborn
seaborn
- Python中的一个制图工具库,可以制作出吸引人的、信息量大的统计图
- 在matplotlib上构建,支持numpy和pandas的数据结构可视化,甚至是SciPy和statsmodels的统计模型可视化
特点
- 多个内置主题及颜色主题
- 可视化单一变量、二维变量用于比较数据集中各变量的分布情况
- 可视化线性回归模型中的独立变量及不独立变量
- 可视化矩阵数据,通过聚类算法探究矩阵间的结构
- 可视化时间序列数据及不确定性的展示
- 可在分割区域制图,用于复杂的可视化
数据集分布可视化
-
单变量分布 sns.distplot()
import numpy as np import pandas as pd from scipy import stats import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline # 单变量分布 x1 = np.random.normal(size=1000) sns.distplot(x1)
运行结果:
x2 = np.random.randint(0, 100, 500) sns.distplot(x2)
运行结果:
-
直方图sns.distplot(kde = False)
# 直方图 sns.distplot(x1, bins=20, kde=False, rug=True)
运行结果:
-
核密度估计 sns.distplot(hist = False) 或 sns.kdeplot()
# 核密度估计 sns.distplot(x2, hist=False, rug=True)
运行结果:
-
拟合参数分布 sns.distplot(kde=False, fit = )
# 拟合参数分布,拟合伽马曲线 sns.distplot(x1, kde=False, fit=stats.gamma)
运行结果:
-
-
双变量分布
-
散布图 sns.jointplot()
# 双变量分布 df_obj1 = pd.DataFrame({"x": np.random.randn(500), "y": np.random.randn(500)}) df_obj2 = pd.DataFrame({"x": np.random.randn(500), "y": np.random.randint(0, 100, 500)}) # 散布图 sns.jointplot(x="x", y="y", data=df_obj1)
运行结果:
-
二维直方图 Hexbin sns.jointplot(kind = ‘hex’)
# 二维直方图 sns.jointplot(x="x", y="y", data=df_obj1, kind="hex");
运行结果:
-
核密度估计 sns.jointplot(kind = ‘kde’)
# 核密度估计 sns.jointplot(x="x", y="y", data=df_obj1, kind="kde");
运行结果:
-
-
数据集中变量间关系可视化 sns.pairplot()
# 数据集中变量间关系可视化,tips为seaborn自带数据集 dataset = sns.load_dataset("tips") sns.pairplot(dataset);
运行结果:
-
类别散布图
-
sns.stripplot() 数据点会重叠
exercise = sns.load_dataset('exercise') sns.stripplot(x="diet", y="pulse", data=exercise)
运行结果:
-
sns.swarmplot() 数据点避免重叠
sns.swarmplot(x="diet", y="pulse", data=exercise, hue='kind')
运行结果:
-
hue 指定子类别
-
-
类别内数据分布
-
盒子图 sns.boxplot() , hue指定子类别
# 盒子图 sns.boxplot(x="diet", y="pulse", data=exercise, hue='kind')
运行结果:
-
小提琴图 sns.violinplot(), hue指定子类别
# 小提琴图 sns.violinplot(x="diet", y="pulse", data=exercise, hue='kind')
运行结果:
-
-
类别间统计图
-
柱状图 sns.barplot()
# 柱状图 sns.barplot(x="diet", y="pulse", data=exercise, hue='kind')
运行结果:
-
点图 sns.pointplot()
# 点图 sns.pointplot(x="diet", y="pulse", data=exercise, hue='kind');
运行结果:
-