以鸢尾花数据集的浅显数据描述——峰度、频数、标准差、四分位..


代码都是在Jupyter NOtebook软件运行。

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" # 显示

在这里插入图片描述

# 导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
# 设置seaborn给图的样式
sns.set(style= "darkgrid")

# 设置字体格式
plt.rcParams["font.family"] = "SimHei"
# 控制字符可以正常显示
plt.rcParams["axes.unicode_minus"] = False

# 忽略警告信息。
import warnings
warnings.filterwarnings("ignore")
# 获取鸢尾花数据集
iris = load_iris()
print(iris)

在这里插入图片描述

# 鸢尾花数据对象方法和属性的介绍
iris.data # 取出鸢尾花数据,只包括特征,不包括:目标值(标签值)
iris.target # 取出鸢尾花数据标签
iris.feature_names # 取出鸢尾花数据集特征列的名称
iris.target_names # 鸢尾花数据集标签值名称

在这里插入图片描述
在这里插入图片描述

# 将数据集以 dataframe格式进行展示
# 将数组合并
data = np.concatenate([iris.data, iris.target.reshape(-1,1)], axis=1)
data

在这里插入图片描述

data = pd.DataFrame(data,columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'target'])
data.head(7)

在这里插入图片描述

设置好鸢尾花的各列名,对它的数据进行数据描述。

# 频数(多少个)
frequency = data["target"].value_counts()
frequency

# 频率(占比)
percrntage = frequency / len(data)
percrntage

在这里插入图片描述

1. 求众数 pandas中的mode方法 scipy 中的mode方法

# 以 sepal_width 计算众数
data["sepal_width"].mode()
from scipy import stats
stats.mode(data["sepal_width"]) # 有多个众数,只显示一个众数

在这里插入图片描述

# 以 sepal_width 计算中位数
data["sepal_width"].median()

# 以 sepal_width 计算平均数
data["sepal_width"].mean()

在这里插入图片描述

2. 四分位计算方式

np.quantile(data["sepal_width"], q=[0.25, 0.5, 0.75])

在这里插入图片描述

3. 离散程度度量

  1. 极差
  2. 四分位差: 上四分位与下四分位的的差值,不易受极值的影响,差值越小,表示数据越集中,差值越大,表示数据越分散.
  3. 方差: 各变量值和平均数的离差平方和,用来衡量数据偏离均值的程度
  4. 标准差:方差开跟号
  5. 标准分数
# 1.极差:最大值与最小值之差
np.ptp(data['sepal_length'])

# 3.标准差
np.std(data['sepal_length'])

在这里插入图片描述

4. 标准分数

  1. 变量值与其平均数的离差 除以样本标准差后的值称为 标准分数,也叫作z分数;
  2. 他给出了一组数据中的各数据中的相对位置;
  3. 对一组数据进行标准化处理不会改变原来数据的分布情况;
  4. 对数据进行标准化处理后的标准分数,其均值=0,标准差=1;
  5. z分数通常用来观察数据是否存在异常值(离群值)。
# 验证标准化处理不改变数据分布情况
x = np.concatenate([np.random.randint(200,800,size=1000),
                    np.random.randint(1,200,size=100),
                    np.random.randint(200,800,size=200)])
plt.hist(x)

在这里插入图片描述

# 将X进行标准化
x_s = (x-np.mean(x))/np.std(x)
plt.hist(x_s)

在这里插入图片描述

5. 经验法则(适用于对称分布的数据)¶

  1. 约有68%的数据在平均数1个标准差的范围之内

  2. 约有95%的数据在平均数2个标准差的范围之内

  3. 约有99%的数据在平均数3个标准差的范围之内

注: +3倍标准差之外的数据,统计上称离群点Coutlier), 在实际分析中可以选择将这些数据 点删除后再进行数据分析

6. 切比雪夫不等式(适用于非对称分布)

在这里插入图片描述

由上式可知:

  1. 至少有75%的数据在平均数2个标准差的范围之内
  2. 至少有89%的数据在平均数3个标准差的范围之内
  3. 至少有94%的数据在平均数4个标准差的范围之内

7. 偏度与峰度

7.1 偏度

统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征

  1. 如果数据对称分布(例如正态分布),则偏度为0
  2. 如果数据左偏分布,则偏度小于0
  3. 如果数据右偏分布,则偏度大于0

在这里插入图片描述

7.2 峰度

描述总体中所有取值分布形态陡缓程度的统计量。可以将峰度理解为数据分布的高矮程度。峰度的比较是相对于标准正态分布的。

  1. 标准正态分布,峰度为0
  2. 如果峰度大于0,则密度图高于标准正态分布,数据在分布上比标准正态分布密集,方差(标准差)较小
  3. 如果峰度小于0,则密度图低于标准正态分布,数据在分布上比标准正态分布分散,方差(标准差)较大
# 进行不同偏度图形绘制
# 制造左偏分布数据
t1 = np.random.randint(1, 11, size=100)
t2 = np.random.randint(11, 21, size=500)
t3 = np.concatenate([t1, t2])
left_skew = pd.Series(t3)
# 制造右偏分布数据
t1 = np.random.randint(1, 11, size=500)
t2 = np.random.randint(11, 21, size=100)
t3 = np.concatenate([t1, t2])
right_skew = pd.Series(t3)
# 模型画图
sns.kdeplot(left_skew, shade= True, label="左偏" )
sns.kdeplot(right_skew, shade= True, label="右偏" )
plt.legend()
print("--"*15)
# 计算偏度
print(left_skew.skew(), right_skew.skew())

在这里插入图片描述

# 进行不同峰度图形绘制
# 创建正态分布数据
standard_normal = pd.Series(np.random.normal(0, 1, size=10000))
sns.kdeplot(standard_normal, label="标准正态分布")
sns.kdeplot(data["sepal_width"],label="花萼宽度")

# 计算峰度 .kurt
print("标准正态分布峰度:",standard_normal.kurt())
print("花萼宽度峰度:",data["sepal_width"].kurt())

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐樽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值