注意:describe()中可以传入percentiles参数,获取指定分位数的值。
x = pd.Series(np.arange(10,19)) x.describe(percentiles=[0.25,0.5,0.75,0.9])
结果如下:
6、离散程度
1)极差、方差、标准差的概念
2)极差、方差、标准差的作用
极差的计算非常简单,但是极差没有充分的利用数据信息。
方差(标准差)可以体现数据的“分散性”,方差(标准差)越大,数据越分散,方差(标准差)越小,数据越集中。
方差(标准差)也可以体现数据的“波动性”(稳定性)。方差(标准差)越大,数据波动性越大。
方差(标准差)越小,数据波动性越小。
当数据较大时,也可以使用n代替n-1。
3)代码:计算鸢尾花数据集中花萼长度的极差、方差、标准差
iris = load_iris() dt = np.concatenate([iris.data,iris.target.reshape(-1,1)],axis=1) df = pd.DataFrame(dt,columns=iris.feature_names + ["types"]) display(df.sample(5)) sub = df["sepal length (cm)"].max() - df["sepal length (cm)"].min() sub var = df["sepal length (cm)"].var() var std = df["sepal length (cm)"].std() std var == std ** 2
结果如下:
绘制图形:
plt.figure(figsize=(15,4)) plt.ylim(-0.5,1.5) plt.plot(df["sepal length (cm)"],np.zeros(len(df)),ls="",marker="o",ms=10,color="g",label="花瓣长度") plt.plot(df["sepal width (cm)"],np.ones(len(df)),ls="",marker="o",ms=10,color="b",label="花瓣宽度") plt.axvline(df["sepal length (cm)"].mean(),ls="--",color="g",label="花瓣长度均值") plt.axvline(df["sepal width (cm)"].mean(),ls="-",color="b",label="花瓣宽度均值") plt.legend()
结果如下:
7、分布形状:偏度和峰度
1)偏度
① 概念
偏度是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。
如果数据对称分布(例如正态分布),则偏度为0。
如果数据左偏分布,则偏度小于0,如果数据右偏分布,则偏度大于0。
② 代码如下
t1 = np.random.randint(1,11,100) t2 = np.random.randint(11,21,500) t3 = np.concatenate([t1,t2]) left_skew = pd.Series(t3) t1 = np.random.randint(1,11,500) t2 = np.random.randint(11,21,100) t3 = np.concatenate([t1,t2]) right_skew = pd.Series(t3) display(left_skew.skew(),right_skew.skew()) sns.kdeplot(left_skew,shade=True,label="左偏") sns.kdeplot(right_skew,shade=True,label="右偏") plt.legend()
结果如下:
2)峰度
① 概念
峰度是描述总体中所有取值分布形态陡缓程度的统计量,可以讲峰度理解为数据分布的高矮程度,峰度的比较是相对于标准正态分布的。
对于标准正态分布,峰度为0。
如果峰度大于0,说明数据在分布上比标准正态分布密集,方差(标准差)较小。
如果峰度小于0,说明数据在分布上比标准正态分布分散,方差(标准差)较大。
② 代码如下
standard_normal = pd.Series(np.random.normal(0,1,10000)) display("标准正态分布峰度",standard_normal.kurt(),"标准差:",standard_normal.std()) display("花萼长度峰度",df["sepal length (cm)"].kurt(),"标准差:",df["sepal length (cm)"].std()) display("花萼宽度峰度",df["sepal width (cm)"].kurt(),"标准差:",df["sepal width (cm)"].std()) sns.kdeplot(standard_normal,label="标准正态分布") sns.kdeplot(df["sepal length (cm)"],label="花萼长度") sns.kdeplot(df["sepal width (cm)"],label="花萼宽度")
结果如下: