精华内容
下载资源
问答
  • 利用python对数据进行描述性统计分析-以鸢尾花数据集为例学习前准备下载Anaconda软件主题主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。知识要点数理统计基础数理统计,以概率论为基础,...

    03958a9e342a437ab694d64d212bbb5a.png

    利用python对数据进行描述性统计分析-以鸢尾花数据集为例

    学习前准备

    • 下载Anaconda软件

    主题

    主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。

    知识要点

    数理统计基础

    数理统计,以概率论为基础,研究大量随机现象的统计规律性,分为以下两类:

    • 描述统计
    • 推断统计

    描述性统计分析概述

    概念

    描述性统计所提取的统计信息,称之为统计量,主要包括:

    • 频数与频率
    • 集中趋势分析:均值、中位数、众数、分位数
    • 离散程度分析:极差、方差、标准差
    • 分布形状:偏度、峰度

    变量类型

    • 类别变量:无序类别变量、有序类别变量‘
    • 数值变量:连续变量、离散变量

    统计量

    频数与频率

    import numpy as np
    import pandas as pd 
    import matplotlib.pyplot as plt
    import seaborn as sns
    from sklearn.datasets import load_iris
    import warnings
    
    # 设置seaborn绘图的样式。
    
    sns.set(style= "darkgrid", font_scale=1.2)
    #设置中文字体
    plt.rcParams["font.family"] = "SimHei"
    #是否使用Unicode字符集中的负号
    plt.rcParams["axes.unicode_minus"] = False
    
    # 忽略警告信息。
    
    warnings.filterwarnings("ignore")
    #加载鸢尾花数据集
    iris = load_iris()
    #iris.data 鸢尾花数据集,
    print(iris.data[:10])
    #iris.target:每朵鸢尾花对应的类别。(取值为0,1,2)
    print(iris.target[::20])
    #iris.feature_names: 特征列的名称
    print(iris.feature_names)
    #iris.target_names: 鸢尾花类别的名称
    print(iris.target_names)
    [[5.1 3.5 1.4 0.2]
     [4.9 3.  1.4 0.2]
     [4.7 3.2 1.3 0.2]
     [4.6 3.1 1.5 0.2]
     [5.  3.6 1.4 0.2]
     [5.4 3.9 1.7 0.4]
     [4.6 3.4 1.4 0.3]
     [5.  3.4 1.5 0.2]
     [4.4 2.9 1.4 0.2]
     [4.9 3.1 1.5 0.1]]
    [0 0 0 1 1 2 2 2]
    ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
    ['setosa' 'versicolor' 'virginica']
    # 将鸢尾花数据与对应的类型合并,组合成完整的记录。记得iris.data, iris.target.reshape()要带中括号
    
    data = np.concatenate([iris.data, iris.target.reshape(-1,1)], axis = 1)
    data = pd.DataFrame(data, 
                        columns=["sepal length", "sepal width", "petal length", "petal width","type"])
    data.sample(10)# sample(), 随机抽样

    ad659c260eac6750ad3f3f01479b0331.png
    将鸢尾花数据与对应的类型合并,组合成完整的记录
    frequency = data["type"].value_counts()
    print(frequency)
    #计算每个类别的频率
    percentage = frequency * 100 / len(data)
    print(percentage)
    2.0    50
    1.0    50
    0.0    50
    Name: type, dtype: int64
    2.0    33.333333
    1.0    33.333333
    0.0    33.333333
    Name: type, dtype: float64
    # 绘制直方图,展示频数
    
    frequency.plot(kind="bar")
    
    # 或者通过seaborn 来绘制
    
    sns.countplot(x= "type", data=data)

    8258e9155e48e0a8f739bc838a6e2785.png

    意义

    频数(频率)统计量 可以用来衡量分类变量中,每个不同类别出现的多少

    集中趋势

    均值

    即平均值,其为一组数据的总和除以数据的个数

    中位数

    一组数据升序排列,位于最中间位置的值

    众数

    一组数据中出现次数最多的值

    python实现

    我们以花萼长度列(sepal length)为例,计算该列的均值、中位数、众数。

    # 计算花萼长度的均值。
    mean = data["sepal length"].mean()
    # 计算花萼长度的中位数。
    median = data["sepal length"].median()
    # 计算花萼长度的众数。
    s = data["sepal length"].mode()
    print(s)
    # 注意,mode方法返回的是Series类型。
     mode = s.iloc[0] #将值取出,iloc函数:通过行号来取行数据(如取第二行的数据),loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)
    print("mean, median, mode:",mean, median, mode)

    绘制鸢尾花的花萼长度列的数据分布情况

    # 绘制数据的分布(直方图 + 密度图)
    sns.distplot(data["sepal length"])
    # 绘制垂直线
    plt.axvline(mean, ls = '-', color = 'r', label = "均值")
    plt.axvline(median, ls = '-', color = 'g', label = "中位数")
    plt.axvline(mode, ls = '-', color = 'indigo', label = "众数")
    plt.legend()

    3b5cf47f0952d512b1f0d5717527703c.png

    意义

    • 集中趋势可以衡量数据的综合水平
    • 在缺失值填充中,有重要作用,根据实际情况选择均值、中位数、众数的其中之一来填充缺失值

    分位数

    概念

    ** 分位数(Quantile),亦称分位点**,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。

    四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

    1)第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;

    2)第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;

    3)第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

    第三四分位数与第一四分位数的差距又称四分位距。

    Numpy中计算分位数

    #用Numpy计算
    x = np.arange(10,19)
    n = len(x)
    # 计算四分位的索引(index)
    q1_index = (n-1)*0.25
    q2_index = (n-1)*0.5
    q3_index = (n-1)*0.75
    print(q1_index,q2_index,q3_index)
    2.0 4.0 6.0
    # 将index转换成整数类型。
    index = np.array([q1_index, q2_index, q3_index]).astype(np.int32)
    print(x[index])
    [12 14 16]

    使用pandas计算分位数

    # 使用pandas计算分位数
    x = [1,3,5,7,9,20,21,23,40]
    s = pd.Series(x)
    print(s.describe())
    count     9.000000
    mean     14.333333
    std      12.678722
    min       1.000000
    25%       5.000000
    50%       9.000000
    75%      21.000000
    max      40.000000
    dtype: float64
    #默认情况 describe 会统计四分位的值,可以通过percentiles参数来自定义需要的分位
    s.describe(percentiles=[0.25,0.9])
    count     9.000000
    mean     14.333333
    std      12.678722
    min       1.000000
    25%       5.000000
    50%       9.000000
    90%      26.400000
    max      40.000000
    dtype: float64
    x = [1,3,5,7,9,20,21,23,40]
    x = np.array(x)#只有整数标量数组才能转换为标量索引。这应该是最新版本的python、numpy的问题。版本升级,有些方法已经发生改变,使将元素数组作为标量进行索引成为一个错误。
    plt.figure(figsize=(15, 4))
    plt.xticks(x)
    plt.plot(x, np.zeros(len(x)), ls="", marker="D", ms=15, label="元素值")
    plt.plot(x[index], np.zeros(len(index)), ls="", marker="X", ms=15, label="四分位值")
    plt.legend()

    7d004cdb5b2386155fbc280bf9bf2f5f.png

    意义

    通过分位数和极值,可以知道数据的分布情况,

    • 如果其他值相差较小,3/4分位与最大值相差很多,则数据呈现右偏分布。
    • 如果其他值相差较小,1/4分位与最小值相差很多,则数据呈现左偏分布。

    可以通过箱线图结合四分位来查看数据的分布和检测异常值,之后的文章会讲到。

    离散程度

    集中趋势可以体现数据的综合水平,只看集中趋势会有一定的局限,所以我们需要考虑数据和均值偏离程度的大小。

    极差

    一组数据中,最大最小值之差

    方差

    方差体现一组数据中每个元素与均值偏离的大小。

    标准差

    方差的开方

    意义

    方差(标准差)体现数据的分散性,方差(标准差)越大,数据越离散,反之越集中。

    方差(标准差)可以体现数据的波动性(稳定性),方差(标准差)越大,波动性越大,反之,波动性越小。

    python计算极差、方差、标准差

    # 计算极差。
    sub = data["sepal_length"].max() - data["sepal_length"].min()
    # 计算方差。
    var = data["sepal_length"].var()
    # 计算标准差。
    std = data["sepal_length"].std()
    print(sub, var, std)
    3.6000000000000005 0.6856935123042505 0.8280661279778629

    绘制图形,进行对比

    plt.figure(figsize=(15, 4))
    plt.ylim(-0.5, 1.5)#y轴的范围
    plt.plot(data["petal length"], np.zeros(len(data)), ls="", marker="o", ms=10, color="g", label="花瓣长度")
    plt.plot(data["petal width"], np.ones(len(data)), ls="", marker="o", ms=10, color="r", label="花瓣宽度")
    plt.axvline(data["petal length"].mean(), ls="--", color="g", label="花瓣长度均值")
    plt.axvline(data["petal_width"].mean(), ls="--", color="r", label="花瓣宽度均值")
    plt.legend()

    bea87a095b80c8441ba58e15a6fcfb82.png

    分布形状

    偏度

    偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度(Skewness)亦称偏态、偏态系数。

    表征概率分布密度曲线相对于平均值不对称程度的特征数。直观看来就是密度函数曲线尾部的相对长度。

    的偏度为0,两侧尾部长度对称。若以bs表示偏度。

    bs<0称分布具有负偏离,也称左偏态,此时数据位于均值左边的比位于右边的少,直观表现为左边的尾部相对于与右边的尾部要长,因为有少数变量值很小,使曲线左侧尾部拖得很长;

    bs>0 称分布具有正偏离,也称右偏态,此时数据位于均值右边的比位于左边的少,直观表现为右边的尾部相对于与左边的尾部要长,因为有少数变量值很大,使曲线右侧尾部拖得很长;

    而bs接近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)
    # 计算偏度。
    print(left_skew.skew(), right_skew.skew())
    # 绘制核密度图。
    sns.kdeplot(left_skew, shade=True, label="左偏")
    sns.kdeplot(right_skew, shade=True, label="右偏")
    plt.legend()

    739c59532a8d67d0f8bfdec59beca711.png

    峰度

    峰度是描述数据分布陡缓程度的统计量,计算公式为中心距与标准差四次方的比值

    • 对于标准正态分布,峰度为0
    • 峰度>0,则密度图高于标准正态分布,分布较密集,即方差较小
    • 峰度<0,与之相反。
    # 标准正态分布。
    standard_normal = pd.Series(np.random.normal(0, 1, size=10000))
    print("标准正态分布峰度:", standard_normal.kurt(), "标准差:", standard_normal.std())
    print("花萼宽度峰度:", data["sepal width"].kurt(), "标准差:", data["sepal width"].std())
    print("花瓣长度峰度:", data["petal length"].kurt(), "标准差:", data["petal length"].std())
    sns.kdeplot(standard_normal, label="标准正态分布")
    sns.kdeplot(data["sepal width"], label="花萼宽度")
    sns.kdeplot(data["petal length"], label="花瓣长度")
    
    标准正态分布峰度: 0.03850702132794659 标准差: 1.0042152792418642
    花萼宽度峰度: 0.2282490424681929 标准差: 0.435866284936698
    花瓣长度峰度: -1.4021034155217518 标准差: 1.7652982332594667

    461ad004c39dab0a4ce6866f666d36a2.png

    意义

    通过偏度与峰度统计量:

    • 可以得知数据的分布特征
    • 可以利用该特征进行数据的正态性检验(因为我们很多理论都是建立在正态分布上的《所以正态性检验是很重要的)

    拓展点

    我们还可以在上面的基础上拓展一些相关知识:

    • seaborn的使用,可以查看官方教程
    • 分位数的计算细节
    • 箱线图的运用

    总结

    • 描述性统计分析的概念和应用
    • 频率频数的使用
    • 集中趋势和离散程度
    • 数据分布形状之偏度和峰度
    • 统计量之python实现
    展开全文
  • 利用python对数据进行描述性统计分析-以鸢尾花数据集为例学习前准备下载Anaconda软件主题主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。知识要点数理统计基础数理统计,以概率论为基础,...

    利用python对数据进行描述性统计分析-以鸢尾花数据集为例

    学习前准备下载Anaconda软件

    主题

    主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。

    知识要点

    数理统计基础

    数理统计,以概率论为基础,研究大量随机现象的统计规律性,分为以下两类:描述统计

    推断统计

    描述性统计分析概述

    概念

    描述性统计所提取的统计信息,称之为统计量,主要包括:频数与频率

    集中趋势分析:均值、中位数、众数、分位数

    离散程度分析:极差、方差、标准差

    分布形状:偏度、峰度

    变量类型类别变量:无序类别变量、有序类别变量‘

    数值变量:连续变量、离散变量

    统计量

    频数与频率

    import numpy as np

    import pandas as pd

    import matplotlib.pyplot as plt

    import seaborn as sns

    from sklearn.datasets import load_iris

    import warnings

    # 设置seaborn绘图的样式。

    sns.set(style= "darkgrid", font_scale=1.2)

    #设置中文字体

    plt.rcParams["font.family"] = "SimHei"

    #是否使用Unicode字符集中的负号

    plt.rcParams["axes.unicode_minus"] = False

    # 忽略警告信息。

    warnings.filterwarnings("ignore")

    #加载鸢尾花数据集

    iris = load_iris()

    #iris.data 鸢尾花数据集,

    print(iris.data[:10])

    #iris.target:每朵鸢尾花对应的类别。(取值为0,1,2)

    print(iris.target[::20])

    #iris.feature_names: 特征列的名称

    print(iris.feature_names)

    #iris.target_names: 鸢尾花类别的名称

    print(iris.target_names)

    [[5.1 3.5 1.4 0.2]

    [4.9 3. 1.4 0.2]

    [4.7 3.2 1.3 0.2]

    [4.6 3.1 1.5 0.2]

    [5. 3.6 1.4 0.2]

    [5.4 3.9 1.7 0.4]

    [4.6 3.4 1.4 0.3]

    [5. 3.4 1.5 0.2]

    [4.4 2.9 1.4 0.2]

    [4.9 3.1 1.5 0.1]]

    [0 0 0 1 1 2 2 2]

    ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

    ['setosa' 'versicolor' 'virginica']

    # 将鸢尾花数据与对应的类型合并,组合成完整的记录。记得iris.data, iris.target.reshape()要带中括号

    data = np.concatenate([iris.data, iris.target.reshape(-1,1)], axis = 1)

    data = pd.DataFrame(data,

    columns=["sepal length", "sepal width", "petal length", "petal width","type"])

    data.sample(10)# sample(), 随机抽样

    将鸢尾花数据与对应的类型合并,组合成完整的记录

    frequency = data["type"].value_counts()

    print(frequency)

    #计算每个类别的频率

    percentage = frequency * 100 / len(data)

    print(percentage)

    2.0 50

    1.0 50

    0.0 50

    Name: type, dtype: int64

    2.0 33.333333

    1.0 33.333333

    0.0 33.333333

    Name: type, dtype: float64

    # 绘制直方图,展示频数

    frequency.plot(kind="bar")

    # 或者通过seaborn 来绘制

    sns.countplot(x= "type", data=data)

    意义

    频数(频率)统计量 可以用来衡量分类变量中,每个不同类别出现的多少

    集中趋势

    均值

    即平均值,其为一组数据的总和除以数据的个数

    中位数

    一组数据升序排列,位于最中间位置的值

    众数

    一组数据中出现次数最多的值

    python实现

    我们以花萼长度列(sepal length)为例,计算该列的均值、中位数、众数。

    # 计算花萼长度的均值。

    mean = data["sepal length"].mean()

    # 计算花萼长度的中位数。

    median = data["sepal length"].median()

    # 计算花萼长度的众数。

    s = data["sepal length"].mode()

    print(s)

    # 注意,mode方法返回的是Series类型。

    mode = s.iloc[0] #将值取出,iloc函数:通过行号来取行数据(如取第二行的数据),loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)

    print("mean, median, mode:",mean, median, mode)

    绘制鸢尾花的花萼长度列的数据分布情况

    # 绘制数据的分布(直方图 + 密度图)

    sns.distplot(data["sepal length"])

    # 绘制垂直线

    plt.axvline(mean, ls = '-', color = 'r', label = "均值")

    plt.axvline(median, ls = '-', color = 'g', label = "中位数")

    plt.axvline(mode, ls = '-', color = 'indigo', label = "众数")

    plt.legend()

    意义集中趋势可以衡量数据的综合水平

    在缺失值填充中,有重要作用,根据实际情况选择均值、中位数、众数的其中之一来填充缺失值

    分位数

    概念

    ** 分位数(Quantile),亦称分位点**,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。

    四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

    1)第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;

    2)第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;

    3)第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

    第三四分位数与第一四分位数的差距又称四分位距。

    Numpy中计算分位数

    #用Numpy计算

    x = np.arange(10,19)

    n = len(x)

    # 计算四分位的索引(index)

    q1_index = (n-1)*0.25

    q2_index = (n-1)*0.5

    q3_index = (n-1)*0.75

    print(q1_index,q2_index,q3_index)

    2.0 4.0 6.0

    # 将index转换成整数类型。

    index = np.array([q1_index, q2_index, q3_index]).astype(np.int32)

    print(x[index])

    [12 14 16]

    使用pandas计算分位数

    # 使用pandas计算分位数

    x = [1,3,5,7,9,20,21,23,40]

    s = pd.Series(x)

    print(s.describe())

    count 9.000000

    mean 14.333333

    std 12.678722

    min 1.000000

    25% 5.000000

    50% 9.000000

    75% 21.000000

    max 40.000000

    dtype: float64

    #默认情况 describe 会统计四分位的值,可以通过percentiles参数来自定义需要的分位

    s.describe(percentiles=[0.25,0.9])

    count 9.000000

    mean 14.333333

    std 12.678722

    min 1.000000

    25% 5.000000

    50% 9.000000

    90% 26.400000

    max 40.000000

    dtype: float64

    x = [1,3,5,7,9,20,21,23,40]

    x = np.array(x)#只有整数标量数组才能转换为标量索引。这应该是最新版本的python、numpy的问题。版本升级,有些方法已经发生改变,使将元素数组作为标量进行索引成为一个错误。

    plt.figure(figsize=(15, 4))

    plt.xticks(x)

    plt.plot(x, np.zeros(len(x)), ls="", marker="D", ms=15, label="元素值")

    plt.plot(x[index], np.zeros(len(index)), ls="", marker="X", ms=15, label="四分位值")

    plt.legend()

    意义

    通过分位数和极值,可以知道数据的分布情况,如果其他值相差较小,3/4分位与最大值相差很多,则数据呈现右偏分布。

    如果其他值相差较小,1/4分位与最小值相差很多,则数据呈现左偏分布。

    可以通过箱线图结合四分位来查看数据的分布和检测异常值,之后的文章会讲到。

    离散程度

    集中趋势可以体现数据的综合水平,只看集中趋势会有一定的局限,所以我们需要考虑数据和均值偏离程度的大小。

    极差

    一组数据中,最大最小值之差

    方差

    方差体现一组数据中每个元素与均值偏离的大小。

    标准差

    方差的开方

    意义

    方差(标准差)体现数据的分散性,方差(标准差)越大,数据越离散,反之越集中。

    方差(标准差)可以体现数据的波动性(稳定性),方差(标准差)越大,波动性越大,反之,波动性越小。

    python计算极差、方差、标准差

    # 计算极差。

    sub = data["sepal_length"].max() - data["sepal_length"].min()

    # 计算方差。

    var = data["sepal_length"].var()

    # 计算标准差。

    std = data["sepal_length"].std()

    print(sub, var, std)

    3.6000000000000005 0.6856935123042505 0.8280661279778629

    绘制图形,进行对比

    plt.figure(figsize=(15, 4))

    plt.ylim(-0.5, 1.5)#y轴的范围

    plt.plot(data["petal length"], np.zeros(len(data)), ls="", marker="o", ms=10, color="g", label="花瓣长度")

    plt.plot(data["petal width"], np.ones(len(data)), ls="", marker="o", ms=10, color="r", label="花瓣宽度")

    plt.axvline(data["petal length"].mean(), ls="--", color="g", label="花瓣长度均值")

    plt.axvline(data["petal_width"].mean(), ls="--", color="r", label="花瓣宽度均值")

    plt.legend()

    分布形状

    偏度

    偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度(Skewness)亦称偏态、偏态系数。

    表征概率分布密度曲线相对于平均值不对称程度的特征数。直观看来就是密度函数曲线尾部的相对长度。

    的偏度为0,两侧尾部长度对称。若以bs表示偏度。

    bs<0称分布具有负偏离,也称左偏态,此时数据位于均值左边的比位于右边的少,直观表现为左边的尾部相对于与右边的尾部要长,因为有少数变量值很小,使曲线左侧尾部拖得很长;

    bs>0 称分布具有正偏离,也称右偏态,此时数据位于均值右边的比位于左边的少,直观表现为右边的尾部相对于与左边的尾部要长,因为有少数变量值很大,使曲线右侧尾部拖得很长;

    而bs接近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)

    # 计算偏度。

    print(left_skew.skew(), right_skew.skew())

    # 绘制核密度图。

    sns.kdeplot(left_skew, shade=True, label="左偏")

    sns.kdeplot(right_skew, shade=True, label="右偏")

    plt.legend()

    峰度

    峰度是描述数据分布陡缓程度的统计量,计算公式为中心距与标准差四次方的比值对于标准正态分布,峰度为0

    峰度>0,则密度图高于标准正态分布,分布较密集,即方差较小

    峰度<0,与之相反。

    # 标准正态分布。

    standard_normal = pd.Series(np.random.normal(0, 1, size=10000))

    print("标准正态分布峰度:", standard_normal.kurt(), "标准差:", standard_normal.std())

    print("花萼宽度峰度:", data["sepal width"].kurt(), "标准差:", data["sepal width"].std())

    print("花瓣长度峰度:", data["petal length"].kurt(), "标准差:", data["petal length"].std())

    sns.kdeplot(standard_normal, label="标准正态分布")

    sns.kdeplot(data["sepal width"], label="花萼宽度")

    sns.kdeplot(data["petal length"], label="花瓣长度")

    标准正态分布峰度: 0.03850702132794659 标准差: 1.0042152792418642

    花萼宽度峰度: 0.2282490424681929 标准差: 0.435866284936698

    花瓣长度峰度: -1.4021034155217518 标准差: 1.7652982332594667

    意义

    通过偏度与峰度统计量:可以得知数据的分布特征

    可以利用该特征进行数据的正态性检验(因为我们很多理论都是建立在正态分布上的《所以正态性检验是很重要的)

    拓展点

    我们还可以在上面的基础上拓展一些相关知识:seaborn的使用,可以查看官方教程

    分位数的计算细节

    箱线图的运用

    总结描述性统计分析的概念和应用

    频率频数的使用

    集中趋势和离散程度

    数据分布形状之偏度和峰度

    统计量之python实现

    展开全文
  • 在进行数据分析时,一般要先对数据进行描述性统计分析,以发现其内在的规律,再选择进一步分析的方法。描述性统计分析要对调查总体所有变量的有关数据做统计性描述,主要包括数据的频数分析、数据的集中趋势分析、...

    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

    PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取


    python免费学习资料以及群交流解答点击即可加入


    导读

    在进行数据分析时,一般要先对数据进行描述性统计分析,以发现其内在的规律,再选择进一步分析的方法。描述性统计分析要对调查总体所有变量的有关数据做统计性描述,主要包括数据的频数分析、数据的集中趋势分析、数据离散程度分析、数据的分布以及一些基本的统计图形。

    本文以数据集classdata为案例来说明如何计算数据探索过程中的各种数据指标,此数据集为某个班级的学生信息数据,包含姓名、性别、身高和体重,首先我们创建数据帧,代码如下:

    import pandas as pd
    import numpy as np
    classdata=pd.read_csv("D:/Pythondata/data/class.csv")
    classdata.head()
    

    运行上述程序,结果如图1所示,展示了数据集classdata的前5个观测样本。

     

    图1 数据集classdata的前5个观测

    图1 数据集classdata的前5个观测

    一、集中趋势

    1.算术平均值

    Pandas中计算变量均值的方法主要有2种,一是直接使用describle函数,一个是调用mean函数,代码如下所示:

    classdata.mean()
    

    运行程序,结果如下所示,可知年龄Age的均值为13.3,身高62.34,体重100。

    Age        13.315789
    Height     62.336842
    Weight    100.026316
    dtype: float64
    

    同样,我们调用describe,代码如下所示:

    classdata.describe()
    

    运行程序,结果如下图2所示,与调用mean函数的计算结果一致。

     

    图2 变量的均值

    图2 变量的均值

    2.几何平均数

    计算变量的几何平均值,需要调用Python库scipy,比如我们计算数据集classdata的变量Heigth的几何平均值,代码如下所示:

    from scipy import stats
    stats.gmean(classdata['Height'])
    

    运行程序,结果如下所示:

    62.133135310943146
    

    3.众数

    在Pandas中,我们可以直接调用mode函数来计算变量的众数,比如,我们计算变量Age的众数,代码如下所示:

    classdata['Age'].mode()
    

    运行程序后,结果如下所示

    12
    

    二、离散程度

    1.极差与四分位差

    极差也叫全距,是一组数据的最大值与最小值之差;四分位差是指第三分位数与第一分位数之差,也称为内距或四分间距。利用describe函数计算最大值、最小值以及分位数,即可计算极差和四分位差.

    stat = classdata.describe() #保存基本统计量
    stat.loc['range'] = stat.loc['max']-stat.loc['min'] #极差
    stat.loc['dis'] = stat.loc['75%']-stat.loc['25%'] #四分位数间距
    print(stat)
    

    运行上述程序,结果如下图3所示,变量Age的极差为5,四分位差为2.5,变量Heigth的极差为20.7,四分位差为7.65,变量Weight的极差为99.5,四分位差为28。

     

    图3 极差计算结果

    图3 极差计算结果

    2.平均离差

    平均离差是各变量值与其平均数之差的绝对值之和的平均数。Pandas中计算平均差的为mad函数,直接调用即可,比如我们计算各个变量的平均差,则代码如下所示:

    classdata.mad()
    

    运行程序后,其结果如下所示:

    Age    1.279778
    Height   4.069252
    Weight  17.343490
    dtype: float64
    

    3.标准差

    Pandas中计算标准差的方式有多种,其中函数describe和std均可计算,我们在前文中已经展示了describe函数的用法,在此不再累述,我们直接调用std函数即可,代码如下:

    classdata.std()
    

    运行上述程序,结果如下所示:

    Age    1.492672
    Height   5.127075
    Weight  22.773933
    dtype: float64
    

    4.离散系数

    离散系数通常是就标准差来计算的,因此,也称为标准差系数,它是一组数据的标准差与其对应的平均数之比,是衡量数据离散程度的相对指标。
    我们可以通过如下程序计算标准差系数,代码如下:

    stat2 = classdata.describe()
    stat2.loc['var'] = stat2.loc['std']/stat2.loc['mean'] 
    stat2
    

    运行上述程序,结果如下图4所示:

     

    图4 离散系数结果

    图4 离散系数结果

    三、分布状态

    1.偏态

    偏态是对分布偏斜方向和程度的测度,Pandas中可以直接调用skew函数计算变量的偏态系数,代码如下所示:

    classdata.skew()
    

    运行上述程序,结果如下所示,其中变量Age、Height和Weight的偏态系数分别为0.06、-0.26和0.18。

    Age    0.063612
    Height  -0.259670
    Weight  0.183351
    dtype: float64
    

    2.峰度

    峰度是分布集中趋势高峰的形状,Pandas中可以直接调用kurt函数计算变量的偏态系数,代码如下所示:

    classdata.kurt()
    

    运行上述程序,结果如下所示,其中变量Age、Height和Weight的偏态系数分别为-1.11、-0.14和0.68。

    Age   -1.110926
    Height  -0.138969
    Weight  0.683365
    dtype: float64
    

    四、相关分析

    1.散点图

    制散点图的方法很多,可以直接调用Pandas库的plot.scatter函数进行绘制,比如如下绘制散点图的程序。

    classdata.plot.scatter(x='Age', y='Height')
    

    运行上述程序,结果如图5所示,从散点图的数据分布可以看出,变量Height和Age呈现很强的相关关系。

     

    图5 变量Age和Height的散点图

    图5 变量Age和Height的散点图

     

    同样,我们也可以调用matplotlib库的pyplot函数进行散点图的绘制,代码如下所示:

    import matplotlib.pyplot as plt
    plt.scatter(classdata['Height'],classdata['Weight'] )
    plt.xlabel("Height")
    plt.ylabel("Weight")
    plt.show()
    

    运行上述程序,结果如下图6所示,从散点图的数据分布可以看出,变量Height和Weight同样呈现很强的相关关系。

     

    图6 变量Height和Weight的散点图

    图6 变量Height和Weight的散点图

    2.相关系数

    在Pandas中可以直接调用corr函数来计算变量之间的相关系数,如下程序:

    classdata.corr()
    

    运行程序后,结果如图7所示:

     

    图7 变量之间的相关系数

    图7 变量之间的相关系数

     

    除了计算相关系数矩阵之外,我们还可以绘制相关系数矩阵图,此处需调用seaborn库进行绘制,代码如下所示:

    import seaborn as sns
    %matplotlib inline
    # calculate the correlation matrix
    corr = classdata.corr()
    # plot the heatmap
    sns.heatmap(corr,xticklabels=corr.columns,yticklabels=corr.columns)
    

    运行上述程序之后,结果如图8所示:

     

    图8 相关系数矩阵图

    图8 相关系数矩阵图

    展开全文
  • SPSS中的基本统计分析主要包括频数分析、描述性统计分析、探索分析、列联表分析等。这节先来介绍前两种的SPSS操作过程。一频数分析1、目的通过频数分析能够了解变量取值的状况,把握数据的分布特征是很有帮助的。2...

    070baf8f24286ea9196ebd4f82c40370.gif

    在我们获得一些数据后,首先要做的就是对这些数据进行基本的统计分析,例如均值、中位数、方差等。SPSS中的基本统计分析主要包括频数分析、描述性统计分析、探索分析、列联表分析等。这节先来介绍前两种的SPSS操作过程。

     频数分析

    1、目的

    通过频数分析能够了解变量取值的状况,对把握数据的分布特征是很有帮助的。

    2、SPSS操作

    2.1 操作步骤

    对某公司30名职工的血糖含量(mmol/L)进行频数分析。

    在SPSS中输入数值或者导入数据文件后,点击分析-描述性统计-频率。

    6aa25abcd86f584932dcc6370d502c52.png

    将血糖含量选入变量框中,勾选显示频率表复选框,点击统计会出现右边的对话框,勾选需要的统计量。

    75b7ecf6ace3fe211d4bad037d191df9.png

    点击图表,选择想绘制的图表类型。

    5e813b0047ab0b931dbfffdfdce8b992.png

    2.2 输出结果

    887eac134c824c93181c5f315fbb97eb.png

    需要的统计量在表格中有所体现,并输出选择的图表类型,可以更清楚地观察数据特征和数据分布。在图的右上角有平均值、标准差和个案数作为参考。

    a90ee0d1442a3e0b327f22d206eacb84.png

    描述性统计分析

    1、作用

    描述性统计分析是基础的统计分析过程,可以获得很多统计量的特征。通过描述性统计分析可以计算变量的均值,标准差、标准误差等,并可将原始数据转化成Z分数。

    2、SPSS操作

    2.1 操作步骤

    对某公司的30名职工进行了频数分析后,接下来再对他们进行描述统计分析。点击分析-描述性统计-描述。

    e24e59cd441f960f072fa72356c28b92.png

    将血糖含量选入变量框中,勾选将标准化值另存为变量复选框;点击选项,出现右侧对话框,选择所需统计量。通过选项,我们可以获得很多统计量,比如均值、标准差、最小值等。

    f5e08b4a7335e7a701c15028ba997109.png

    2.2 输出结果

    54b80917bb1cc65c9760305a96598006.png

    在输出的描述统计表中,可以看出变量的各统计量的值。案例的个案数为30,最小值为3.9,最大值为6.1,均值为5.087,标准差为0.6101,方差为0.372。

    我们举个例子看一下描述性分析在文献中怎么体现的:

    a4bc65b1387cd86de8b72591b865749e.png

    文中选取了275名患者,其年龄在38-75岁之间,通过分析发现他们年龄的平均值为56.72,标准差为12.75,这样我们就能很好地了解患者的整体年龄特征。

    除了上述我们在描述性统计分析中经常用到的统计量之外,我们还可以通过以下操作精确地把握变量的分布状况,了解数据的集中趋势、离散趋势、对称程度和陡峭程度。

    27608abd6d68afc3dbe18af6ca444d38.png

    在选项中点击表示后验分布特征中的“峰度”和“偏度”,点击继续,最后点击确定,即可得到以下结果。

    55ed0f3d1c9063f1b75374bd74342113.png

    偏度和峰度是用来判断服从正态分布的,偏度系数是描述分布偏离对称性程度的一个特征数。当分布左右对称时,偏度系数为0。当偏度系数大于0时,即重尾在右侧时,该分布为右偏。当偏度系数小于0时,即重尾在左侧时,该分布左偏。峰度系数用来描述其变量所有取值分布形态的陡峭程度。0为正态分布,大于0为陡峭,小于0为平坦。一般情况下,如果样本的偏度接近于0,而峰度接近于3,就可以判断总体的分布接近于正态分布变量类型。

    另外,打开原数据集会发现多了一列Z血糖含量,这是由原数据转换成的Z分数(由普通正态分布转换成标准正态分布),通过Z表可以获得正态分布曲线下的面积。

    参考链接:

    [1] 张世慧.自我管理行为对维持性血液透析患者自我感受负担的影响研究[J].中国卫生产业,2018,15(28):11-12+15.

    声明

    本文所用部分素材来源于网络

    如涉及版权问题,请联系小编删除

    原创内容,欢迎转载

    41ef74e704d44e14d3137360b956fade.png

    (σ゚∀゚)σ..:*☆哎哟不错哦!!

    57bfcc6ef4e72f2cc1e4a72b5a9d4b5d.gif
    展开全文
  • SPSS中的基本统计分析主要包括频数分析、描述性统计分析、探索分析、列联表分析等。这节先来介绍前两种的SPSS操作过程。一、 频数分析1、目的通过频数分析能够了解变量取值的状况,把握数据的分布特征是很有帮助的...
  • 使用R进行描述性统计分析

    千次阅读 2019-09-24 22:30:48
    title: “使用R进行描述性统计分析” output: html_document: ###单组计算描述性统计量 在对数据进行统计分析之前,一般我们需要知道当前数据的描述统计情况,如集中趋势、离散趋势、分布形状。如果数据表中有很...
  • stata做描述性统计分析

    千次阅读 2021-03-10 10:22:16
    在读入数据之后,我们在进行回归模型构建之前,往往需要对数据进行描述性统计分析,描述性统计分析的具体方法如下,示例使用的方法是summarize,也有其他的一些方法可以参考,它们输出的描述性统计的指标类型各不...
  • 数据挖掘:描述性统计分析

    千次阅读 2019-06-10 18:33:12
    数据分析的基础是统计学,统计学又分描述性统计和推断性统计,其中描述性统计又是统计学的基础,也是推断性统计的前导。其百度百科定义是这样的:描述统计是通过图表或数学方法,对数据资料进行整理、分析,并对数据...
  • 描述性分析描述性统计分析是关于数据的描述和汇总。它使用两种主要方法:定量方法以数值方式描述和汇总数据。可视化方法通过图表,曲线图,直方图和其他图形来说明数据。一般在数据分析的过程中,拿到数据不会去直接...
  • R语言整体数据描述性统计分析

    千次阅读 2020-02-19 12:04:08
    R语言整体数据描述性统计分析 在这里主要连续性变量进行整体统计性分析,包括最大最小值、中位数、均值、方差等统计量,但是这里不会分别进行分析计算,而是使用一个函数进行自动统计。 1、summary 该函数是R语言...
  • (Descriptive Analysis)简单而言,描述性统计分析是用几个关键的数字来描述数据集的整体情况<集中性和离散型(波动性大小)>。描述数据集常用4个指标:平均值 四分位数 标准差 标准分,利用这些指标可以进行...
  • 描述性分析描述性统计分析是关于数据的描述和汇总。它使用两种主要方法:定量方法以数值方式描述和汇总数据。可视化方法通过图表,曲线图,直方图和其他图形来说明数据。一般在数据分析的过程中,拿到数据不会去直接...
  • 常规论文中多级的李克特量表数据大多计算均值来进行描述性统计分析,但均值较难表现样本整体分布状况,R中likert package可以协助完成多种可视化图表的描述性统计分析,如下柱状图、热力图、密度图等。相对于传统...
  • 数据分析的入门思维,首先要认识数据,然后对数据进行简单的分析,比如描述性统计分析和相关性分析等。 一,认识变量和数据 变量和数据是数据分析中常用的概念,用变量来描述事物的特征,而数据是变量的具体值,把...
  • 描述性统计分析

    2019-07-22 09:26:34
    描述性统计分析对调查总体所有变量的有关数据进行统计性描述,主要包括数据的频数分析、集中趋势分析、离散程度分析、分布以及一些基本的统计图形。
  • 描述性分析描述性统计分析是关于数据的描述和汇总。它使用两种主要方法:定量方法以数值方式描述和汇总数据。可视化方法通过图表,曲线图,直方图和其他图形来说明数据。一般在数据分析的过程中,拿到数据不会去直接...
  • 关于描述性统计分析

    万次阅读 2006-11-15 11:42:00
    在数据分析的时候,一般首先要对数据进行描述性统计分析(Descriptive Analysis),以发现其内在的规律,再选择进一步分析的方法。描述性统计分析要对调查总体所有变量的有关数据做统计性描述,主要包括数据的频数...
  • 数据分析的入门思维,首先要认识数据,然后对数据进行简单的分析,比如描述性统计分析和相关性分析等。 一,认识变量和数据 变量和数据是数据分析中常用的概念,用变量来描述事物的特征,而数据是变量的具体值,把...
  • 描述性分析描述性统计分析是关于数据的描述和汇总。它使用两种主要方法:定量方法以数值方式描述和汇总数据。可视化方法通过图表,曲线图,直方图和其他图形来说明数据。一般在数据分析的过程中,拿到数据不会去直接...
  • 数理统计:数理统计是以概率论为基础,研究社会和自然界中大量随机现象数量变化基本规律的一种方法。分为:描述统计(描述统计的任务是搜集资料,进行整理、分组,编制次数...)概念描述性统计,就是从总体数据中提取...
  • 数据描述性统计

    2019-07-21 17:53:05
    对数据描述性统计主要是指对结构化数据的描述分析,可从三个维度进行分析:数据的集中趋势、数据的离散程度和数据的分布形态。 描述数据集中趋势的指标有:众数、中位数、平均数(包含算数平均数、加权平均数、...
  • 一、描述性统计分析  所谓描述性分析,就是一组数据的各种特征进行分析,以便于描述测量样本的各种特征值以及其所代表的总体的特征。描述性统计分析的项目很多,常用的如平均数、标准差、中位数、频数分布、正态...
  • 数据分析的入门思维,首先要认识数据,然后对数据进行简单的分析,比如描述性统计分析和相关性分析等。一,认识变量和数据变量和数据是数据分析中常用的概念,用变量来描述事物的特征,而数据是变量的具体值,把变量...
  • 今天简单为大家介绍Python的两大功能库Numpy和Pandas,并通过代码实践各类描述性统计指标的计算,巩固前一期所述指标的主要概念。一、Numpy(Numerical Python) NumPy是一个功能强大的Python库,主要用于多维...
  • 运用Excel实现描述性统计分析

    千次阅读 2019-07-26 10:59:54
    下图为一张商品信息表,现商品的价格、销量、评论数进行描述性统计分析。 1、加载数据分析模块: 点击文件—选项,调出"选项"对话框,点击加载项,在管理处选择"Excel 加载项",点击转到,调出"加载宏"对话框,在...
  • 今天简单为大家介绍Python的两大功能库Numpy和Pandas,并通过代码实践各类描述性统计指标的计算,巩固前一期所述指标的主要概念。一、Numpy(Numerical Python) NumPy是一个功能强大的Python库,主要用于多维...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,038
精华内容 415
关键字:

对数据进行描述性统计分析