【小睿的ML之路】Seaborn-单变量分析绘制
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
x = np.random.normal(size = 100)
print(x)
[ 0.22404072 -1.9394295 -0.32313598 -0.25468579 -0.71927794 0.66163234
-0.09782319 0.44150068 -0.43913581 -0.99535212 -1.52099548 1.10586407
1.99739611 -0.20333526 1.95211243 1.62790351 0.17566407 0.7367439
1.22918265 -0.30148079 0.80212506 2.49887791 -0.96307435 2.39677932
-2.60058269 -2.32157223 -1.12959309 -0.02223216 0.76995059 0.15995655
-0.30360913 -1.1984514 0.94165553 -1.73067029 -0.04900799 1.41992771
-0.29320199 -0.48182442 1.88731008 -0.38295552 -1.29069302 0.88104745
0.62863433 -0.63252684 1.25865766 1.77507824 0.3238686 0.26133148
-0.26306752 1.70341709 -1.95998791 -0.92217953 0.21504576 1.2619886
-0.65072434 -0.32253297 -2.48223873 -1.05107829 -0.04584277 1.15717941
1.6194882 0.43470289 -0.17545919 0.89913012 -0.3077884 -1.24036827
1.16542699 -1.54332189 0.11549242 1.26847205 -1.22091417 -0.51731699
-0.18920906 0.31287551 -0.23093874 0.58638718 -0.50567837 0.99185748
0.86307229 -0.7683871 0.77650661 0.96928406 -0.34451929 -0.17806966
0.94265531 0.80095782 0.83518477 -1.97918719 -1.15126041 -1.2010081
-1.31039485 -0.42574863 -0.86383837 0.1713745 0.61509495 0.26626452
1.16467297 0.40480644 -1.55330148 -1.50325382]
sns.displot(x,kde=False)
<seaborn.axisgrid.FacetGrid at 0x206c5c43a60>
sns.displot(x,kde=False,bins=20)
<seaborn.axisgrid.FacetGrid at 0x206cb4f9f60>
数据分布情况
通过使用distplot()来拟合出一个数据集的参数分布,直观上来评估其余观测数据是否关系密切。
from scipy import stats
x = np.random.gamma(6, size=200)
# print(x)
sns.distplot(x, kde=False, fit=stats.gamma);
C:\Users\Administrator\AppData\Local\Temp\ipykernel_4588\2584871392.py:5: UserWarning:
`distplot` is a deprecated function and will be removed in seaborn v0.14.0.
Please adapt your code to use either `displot` (a figure-level function with
similar flexibility) or `histplot` (an axes-level function for histograms).
For a guide to updating your code to use the new functions, please see
https://gist.github.com/mwaskom/de44147ed2974457ad6372750bbe5751
sns.distplot(x, kde=False, fit=stats.gamma);
以下这段代码主要做了以下几件事情:
- 定义了一个均值
mean
和协方差矩阵cov
。 - 使用
np.random.multivariate_normal
函数生成了一个二维多元正态分布的随机样本data
。 - 将随机样本转换成 Pandas DataFrame
df
。
具体解释如下:
-
mean, cov = [0,1],[(1,.5),(.5,1)]
:这行代码定义了一个均值mean
和协方差矩阵cov
。mean
是一个包含两个元素的列表,分别是均值的两个维度,这里是[0, 1]
。cov
是一个二维列表,表示协方差矩阵。在这个例子中,协方差矩阵是一个对角阵,对角线上的元素分别为1
和1
,非对角线上的元素分别为0.5
,表示两个维度间的协方差。 -
data = np.random.multivariate_normal(mean, cov, 200)
:使用np.random.multivariate_normal
函数生成符合多元正态分布的随机样本data
。参数mean
是指定的均值向量,参数cov
是协方差矩阵,参数200
指定生成的样本数。 -
df = pd.DataFrame(data, columns=["x", "y"])
:将生成的随机样本data
转换成 Pandas DataFrame,其中 "x" 和 "y" 是列名。生成的 DataFramedf
包含两列,分别为 "x" 和 "y",对应多元正态分布的两个维度。
这段代码的最终目的是生成一个包含 200 个多元正态分布样本的 DataFrame,并命名两个维度为 "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"])
df
x | y | |
---|---|---|
0 | -0.651501 | 1.753638 |
1 | 1.058182 | 0.658726 |
2 | 0.160683 | 0.167273 |
3 | 1.073369 | 2.482252 |
4 | 0.501297 | 0.753138 |
... | ... | ... |
195 | 0.664084 | 1.882779 |
196 | 0.385395 | 1.137191 |
197 | 0.204888 | 1.780196 |
198 | 1.528779 | 1.244423 |
199 | -0.094580 | 0.473490 |
200 rows × 2 columns
观测两个变量之间的分布关系最好用散点图
sns.jointplot(x="x",y="y",data=df)
<seaborn.axisgrid.JointGrid at 0x206cbd836a0>
hex图(数据量较大时使用)
这段代码主要实现了以下功能:
- 生成符合多元正态分布的随机样本
x
和y
。 - 使用 seaborn 库绘制二维散点图,并采用六边形图显示点的分布密度。
具体解释如下:
-
x, y = np.random.multivariate_normal(mean, cov, 1000).T
:这行代码使用np.random.multivariate_normal
函数生成符合多元正态分布的随机样本,其中mean
是均值向量,cov
是协方差矩阵,1000
是生成的样本数。.T
是转置操作,将生成的样本进行转置,使得x
和y
分别存储多元正态分布的两个维度的样本。 -
with sns.axes_style("white"):
:这行代码使用 seaborn 库中的axes_style
函数,指定绘图时的风格,这里选择了白色背景。 -
sns.jointplot(x=x, y=y, kind="hex", color="k")
:这行代码使用 seaborn 库中的jointplot
函数绘制二维散点图,并使用六边形图 (kind="hex"
) 来显示点的分布密度。x
和y
分别是两个维度的数据,color="k"
表示六边形图的颜色为黑色。
x,y = np.random.multivariate_normal(mean,cov,1000).T
with sns.axes_style("white"):
sns.jointplot(x=x,y=y,kind="hex",color="k")
这段代码主要实现了以下功能:
- 使用 seaborn 库加载内置的 "iris" 数据集。
- 使用
sns.pairplot
函数绘制多变量之间的两两关系图。
具体解释如下:
-
iris = sns.load_dataset("iris")
:这行代码使用 seaborn 库的load_dataset
函数加载内置的 "iris" 数据集,该数据集包含了鸢尾花的特征数据。 -
sns.pairplot(iris)
:这行代码使用 seaborn 库的pairplot
函数绘制多变量之间的两两关系图。对于数据集中的每对特征,它会绘制散点图以及各个特征的直方图,展示它们之间的关系。通常用于探索数据集中的特征间的关系。
iris = sns.load_dataset("iris")
sns.pairplot(iris)