python 可视化学习(一)——seaborn(基础)
1. 连续(continous)的单变量特征的数据可视化
1.1导入库
import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as plt
import warnings
import seaborn as ans #绘图库
warnings.filterwarnings('ignore') #忽略“错误警告”
1.2 Hist函数
一般对于单变量,都是直接绘制出直方图。一般用matplotlib中的hist函数
plt.hist(x) : hist默认为10个bins。
a = np.random.randn(100)
plt.hist(a)
plt.show()
1.3 Kdeplot函数
对于连续变量,看直方图是不够的,数据分布的观察不可少,因此要用到Kdeplot函数
a = np.random.randn(100)
sns.kdeplot(a, shade=True)
plt.show()
1.4Distplot
displot函数包含了绝大多数单变量可视化的能力,默认的distplot能绘制出我们需要的直方图和对应的核密度估计(KDE)
a = np.random.randn(100)
sns.distplot(a)
plt.show()
如果不想看到kde曲线,可以直接去掉kde,想直接看直方图,也可以直接去掉kde。
去掉KDE曲线:
** sns.distplot(x, kde= False, rug = True) **
去掉直方图:
sns.distplot(x, hist = False, rug = True)
displot函数还可以设置bin的个数,会生成对应的bin来告诉你数据的一个分布情况。(通过观察bin来对数据进行切分分并做one-hot编码形成新的特征。
a = np.random.randn(100)
sns.distplot(a, bins=20, kde=False, rug=True);
plt.show()
2.连续(continous)的二元变量特征的数据可视化
** 上面的数据可视化是基于单个变量的,常常用于对连续型式的label(回归问题中较为常见)进行观察处理**
实际上,我们不会仅仅对数只进行观察,还要进行预测等,数据之间的关系很重要,主要是两个连续变量之间的相关性分析。
用高斯分布函数生成两个变量x,y:
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
2.1 Scatterplot函数
这个函数是通用的,尤其是两个变量都是连续型变量,希望看到二维平面上二者之间的关系会先想到散点图。Scatterplot我们很容易发现一些数据分布规律,是否有簇的存在,在涉及类似于经纬度的问题,我们通常用scatterplot看数据,然后考虑聚类等
plt.scatter(df['x'].values,df['y'].values)
2.2 Jointplot
scatterplot函数是非常实用的,但是jointplot函数,可以绘制散点图,还可以帮我们直接进行一些简单的模型的拟合(linearregression,etc)
2.21 默认的jointpot
sns.jointplot(x="x", y="y", data=df)
Hexbin绘图和KDE绘图,这两个绘图大致可以更加直观炫酷的看出数据的一个分布情况(例如hex图,越白的地方数据就越少,基本没有数据)
sns.jointplot(x="x", y="y", data=df,kind ='hex' )
sns.jointplot(x="x", y="y", data=df, kind="kde")
还有更直观的方式,如:
f, ax = plt.subplots(figsize=(6, 6))
cmap = sns.cubehelix_palette(as_cmap=True, dark=0, light=1, reverse=True)
sns.kdeplot(df.x, df.y, cmap=cmap, n_levels=60, shade=True)
2.3 plot_joint, pairplot函数
2.31 plot_joint函数
plot_joint函数可以将很多绘图形式放在同一张图表中,更加丰富我们的图形比较炫酷
g = sns.jointplot(x="x", y="y", data=df, kind="kde", color="m")
g.plot_joint(plt.scatter, c="w", s=30, linewidth=1, marker="+")
2.32 pairplot函数
该函数会同时绘制数据中所有特征两两之间的关系图,可以将中间很多函数进行变换。
iris = sns.load_dataset("iris")
sns.pairplot(iris)
看两两变量之间的kde绘图,例如sepal_width和petal_length这样的图,我们发现kde图自行进行了聚类,此时我们可以观察两个类中label的情况,比如二分类,如果其中一个类中正样本有80%,另外一个负样本有90%,则考虑进行聚类one-hot操作[10].
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, cmap="Blues_d", n_levels=6)
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot)