精华内容
下载资源
问答
  • 描述性统计分析

    千次阅读 2018-11-28 13:34:44
    描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述...

    描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析 描述性统计分析

    展开全文
  • 描述性统计分析的应用—基于描述性统计分析识别优质股票内容导入:大家好,这里是每天分析一点点。上期给大家介绍离散趋势,本期介绍描述性统计分析的基本原理与应用,包括集中趋势、离散趋势、偏度与峰度的概念,再...
    be268f1f62badf3e01173703b82a0fa5.png

    描述性统计分析的应用

    —基于描述性统计分析识别优质股票

    123c771f238d315b7b8e2a9b8a32b122.gif

    内容导入:

    大家好,这里是每天分析一点点。

    上期给大家介绍离散趋势,本期介绍描述性统计分析的基本原理与应用,包括集中趋势、离散趋势、偏度与峰度的概念,再结合投资选股案例分析,讨论优质股鉴别方法,根据描述性统计指标计算结果解释原因。文章内容适合数据分析小白,内容深入浅出,案例贴合实际。

    下期给大家介绍正态分布的应用,欢迎大家关注。

    1

    2cf9d55f5b5eb39db95036f5b310b939.gif

    概念介绍:

    描述性统计分析的概念:

    描述性统计,即概括性度量。是用来概括、表述整体状况以及事物间关联、类属关系的统计方法。通过统计处理可以简洁地用几个统计值来表示一组数据的集中性和离散型 (波动性大小)。

    数据的频数分析:

    在数据的预处理部分,利用频数分析和交叉频数分析可以检验异常值。

    数据的集中趋势分析:

    用来反映数据的一般水平,常用的指标有平均值、中位数和众数等。

    数据的离散程度分析:

    主要是用来反映数据之间的差异程度,常用的指标有方差和标准差。

    数据的分布:

    在统计分析中,通常要假设样本所属总体的分布属于正态分布,因此需要用偏度和峰度两个指标来检查样本数据是否符合正态分布。

    306bae5d3a1879e8496f5f1273ccb505.png

    2

    2cf9d55f5b5eb39db95036f5b310b939.gif

    描述性统计分析的指标:

    分类变量的常用描述指标:

    1、频数:在一组依大小顺序排列的测量值中,当按一定的组距将其分组时出现在各组内的测量值的数目,分类变量的频数即落在各类别中的数据个数。

    2、累计频数:累积频数就是将各类别的频数逐级累加起来。

    3、百分比:表示一个数是另一个数的百分之几,也叫百分率或百分数。百分比通常采用符号“%”(百分号)来表示。

    4、累积百分比:累积百分比就是将各类别的百分比逐级累加起来。

    连续变量的描述分析:

    1、绝对数。

    2、相对数:倍数、成数、百分数。

    3、百分比。

    4、百分点:1个百分点=1%,是指变动的幅度。

    5、频数:绝对数,是一组数据中个别数据重复出现的次数。

    6、频率:相对数,次数与总次数的比。。

    7、比例:相对数,总体中各部分占全部的比,如:男生的比例是30:50。

    8、比率:相对数,不同类别的比,如男女比率是3:2。

    9、倍数:相对数,一个数除以另一个数所得的商,如A/B=C,那么A是B的C倍。

    10、番数:相对数,指原来数量的2的N次方,如翻一番,意思是原来数量的2倍,翻两番意思是4倍。

    11、同比:相对数,指历史同时期进行比较,如去年12月与今年12月相比是同比。

    12、环比:相对数,指与前一个统计期进行比较,如今年5月与今年4月相比是环比。

    描述集中趋势的指标:

    1、均值:数据和值除以数据个数。

    2、中位数:数据按照从小到大的顺序排列时,最中间的数据即为中位数。

    3、众数:数据中出现次数最多的数字,即频数最大的数值。

    描述离散趋势的指标:

    1、极差:极差=最大值-最小值,是描述数据分散程度的量,且对异常值敏感。

    2、四分位数:数据从小到大排列并分成四等份,处于三个分割点位置的数值,即为四分位数。

    3、方差和标准差方差是每个数据值与全体数据的平均数差的平方的平均数。标准差是方差开方。

    4、标准分z:对数据进行标准化处理,又叫Z标准化,经过Z标准化处理后的数据符合正态分布。

    描述分布形状的指标:

    1、峰度:用来反映频数分布曲线顶端尖峭或扁平程度的指标。在正态分布情况下,峰度系数值是3(但是SPSS等软件中将正态分布峰度值定为0,是因为已经减去3,这样比较起来方便),峰度系数>3,呈现尖峭峰形态,说明观察量更集中,有比正态分布更短的尾部;峰度系数<3,呈现平阔峰形态,说明观测量不那么集中,有比正态分布更长的尾部。

    2、偏度:描述分布偏离对称性程度的一个特征数。当分布左右对称时,偏度系数为0。当偏度系数大于0时,即重尾在右侧时,该分布为右偏。当偏度系数小于0时,即重尾在左侧时,该分布左偏。

    3

    2cf9d55f5b5eb39db95036f5b310b939.gif

    综合应用场景:

    风险投资案例:

    # 目前你有500万资金,准备进行投资,已知有三只股票, 10位专家分别给出了明天的价格预测:

    # A股票,现在10元每股,专家的价格预测序列为:

    dataA=[11,9,11,11,13,8,14,1,11,11]

    # B股票,现在20元每股,专家的价格预测序列为:

    dataB=[28,16,20,94,22,24,26,18,17,27]

    # C股票,现在50元每股,专家的价格预测序列为:

    dataC=[53,59,47,48,58,53,1,128,53,53]

    # 你准备现在买股票,明天卖出去,你会选择那只股票,为什么?

    从数据上看,某些专家的预测结果好像不合群,怎么看这些不合群的想法?

    题目看似简单,实则包含套路,不同价格的股票,能买进的数量是不一致的,怎么办呢?

    00445b3d96f3a01b4a468b7b9f5af00e.png

    处理方式非常多:

    1、将股票价格“统一”,全部统一为50元或者10元,购买的股票数就是一致的

    2、求出利润率=(股价-股本)/股本   ,相对值就可以一致处理

    3、按照当前价格进行计算,处理计算结果

    代码计算过程:

    案例选用第三种方式处理,按照当前价格计算后,在对利润里进行处理。

    处理过程如下:

    步骤1  股票数据录入

    录入三支股票预测数据,转化为series数据格式

    import pandas as pd
    A股票:

    dataA=[11,9,11,11,13,8,14,1,11,11]
    A=pd.Series(dataA)

    B股票:

    dataB=[28,16,20,94,22,24,26,18,17,27]
    B=pd.Series(dataB)

    C股票:

    dataC=[53,59,47,48,58,53,1,128,53,53]
    C=pd.Series(dataC)

    步骤2 剔除异常估计

    A股票:

    dataA=[11,9,11,11,13,8,14,1,11,11]

    A=A.drop(index=7)

    #剔除估计中的极小值1

    B股票:

    dataB=[28,16,20,94,22,24,26,18,17,27]

    B=B.drop(index=3)

    #剔除估计中的极大值94

    C股票:

    dataC=[53,59,47,48,58,53,1,128,53,53]

    C=C.drop(index=[6,7])

    #剔除估计中的极大值与极小值1与128

    步骤3 计算收入期望

    A股票:A=[11,9,11,11,13,8,14,11,11]

    a_mean=A.mean()
    print('a_mean')
    print(a_mean)

    B股票:B=[28,16,20,22,24,26,18,17,27]

    b_mean=B.mean()
    print('b_mean')
    print(b_mean)

    C股票:C=[53,59,47,48,58,53,53,53]

    c_mean=C.mean()
    print('c_mean')
    print(c_mean)

    步骤4 计算收入波动

    A股票:A=[11,9,11,11,13,8,14,11,11]

    a_std=A.std()
    print('a_std')
    print(a_std)

    B股票:B=[28,16,20,22,24,26,18,17,27]

    b_std=B.std()
    print('b_std')
    print(b_std)

    C股票:C=[53,59,47,48,58,53,53,53]

    c_std=C.std()
    print('c_std')
    print(c_std)

    步骤5 计算离散系数

    A股票:A=[11,9,11,11,13,8,14,11,11]

    print('a_lisanxishu')
    print(a_std/a_mean)

    B股票:B=[28,16,20,22,24,26,18,17,27]

    print('b_lisanxishu')
    print(b_std/b_mean)

    C股票:C=[53,59,47,48,58,53,53,53]

    print('c_lisanxishu')
    print(c_std/c_mean)

    通过计算,得出的描述性统计分析结果如下表所示: 

    eae6740c341ac875a2e94762f143a6bd.png

    利润率来看,A股票和B股票利润率都是10%,大于C股票的6%。从风险来看,离散系数,C股票小于A股票小于B股票。

    对于期待高收益、能接受较高风险的投资者来说,应该选择A股票,因为它收益最高,在收益高中的股票中,风险较小。

    对于保守的股民来说,应该选择C股票,虽然收益相对较低,但是安全性好。

    对于中等偏下风险的股民来说,可以选择A股票与C股票的组合策略,既提高了收益,也相对降低了风险。具体如何配比,要看股民能够承受的风险与期待的利润。这就是风险分散的魅力。

    最后,这个案例不存在选择B股票的策略,因为他能够被A股票替代。选B股票的人,有什么理由不选A股票呢。

    2cf9d55f5b5eb39db95036f5b310b939.gif

    本期分享到这里,我们会在每周的周三和周五持续更新,咱们下期再见,期待您的光临。

    有什么建议,比如想了解的知识、内容中的问题、想要的资料、下次分享的内容、学习遇到的问题等,请在下方留言。如果喜欢请关注。

    7ce24643154895a51ab8e0dbf358ac45.png981ffcb405bfb20ef87b243f082e6daf.gif
    展开全文
  • 描述性统计分析.ipynb

    2019-11-22 17:58:15
    描述性统计分析-day1使用 
  • 描述性统计分析

    2021-04-03 19:17:50
    描述性统计分析是数据分析的第一步,有人称为探索性数据分析。在一个数据模型开发的过程中,探索数据贯穿始终,通常占用整个模型开发的40%。本篇文章将系统介绍Python描述性统计分析以及绘图的相关技巧。

    一、通过描述性统计进行数据探索

    数据源:sndHsPr.csv 提取码:mxje
    数据字段如下:

    dist roomnum halls AREA floor subway school price
    城区(拼音) 卧室数目 厅数 房屋面积 楼层 是否有地铁 是否学区房 单位面积房价

    1.1 变量类型与数据分布类型

    在数据分析前需要先了解数据都包含哪些度量类型:

    变量 描述
    名义变量 指包含类别信息的变量,该类别没有大小、高低、次序之分,比如“性别”、“民族”、“地址”
    等级变量 即有序分类变量,该类别有大小、高低、次序之分,比如“年龄段”、“满意度”
    连续变量 指在规定范围区间可以取任意值,比如“人均收入”、“年龄”

    变量的分布类型其实是对实际变量分布的一个概括与抽象。我们经常会在某些地方听到,某某变量符合正态分布或卡方分布等等。其实这些分布的意义在于,我们一旦知道某变量服从哪个分布,就可以很快知道变量在相应取值的概率,并且结合业务场景做出相应解释。
    如下图提供了常见的分布曲线,具体在这里不再赘述。
    在这里插入图片描述

    1.2 分类变量的统计量

    名义变量和等级变量合称为分类变量。其中名义变量不能比较大小,是没有方向性的,比如“性别”,我们不能说男性高于女性,同样也不能说女性高于男性。等级变量有等级关系,是有方向的,比如教育程度(小学<中学<大学)。

    变量 统计量
    名义变量 频次、百分比
    等级变量 频次、百分比、累计频次、累计百分比

    1.3 连续变量的分布与集中趋势

    描述连续变量的统计量主要有四种,分别用于描述数据的集中趋势、离中趋势,偏态程度、与尖峰程度。
    数据的集中水平:常见的指标有平均数、中位数与众数
    接下来演示使用python计算变量的平均数、中位数、四分位数以及变量分布的直方图。
    sndHsPr数据集是一份二手房价格的数据,在Pandas种导入并去除缺失值:

    import pandas as pd
    data  = pd.read_csv('./sndHsPr.csv')
    

    其中变量price表示价格:
    求price的均值平均数:

    print(data.price.agg(['mean','median','std']))
    

    输出:
    在这里插入图片描述

    求price四分位数

    data.price.quantile([0.25,0.5,0.75])
    

    输出:
    在这里插入图片描述
    查看price变量的分布,这里bins参数表示直方图下的区间个数

    data.price.hist(bins=20)
    

    在这里插入图片描述从直方图可以看出单位面积房价略微右偏。

    1.4 连续变量的离散程度

    只描述数据的集中趋势是不够的,以为这样会忽视数据的差异情况。这里需要引入另一个指标或统计量用以描述数据的离散程度。
    描述数据离散程度的常见指标有极差、方差和平均绝对偏差。
    三种指标都可以反应数据的离散程度,但方差和标准差更为优异。
    求price的极差,可以通过max与min函数得到变量的最大值与最小值:

    data.price.max()-data.price.min()
    

    求price的标准差和方差

    data.price.var()#求取方差
    data.price.std()#求取标准差
    

    1.5 数据分布的对称与高矮

    在数据集中水平中,数据分布的对称会影响到平均数是否能够代表数据的集中水平,那么描述数据分布的对称与高矮时,需要引入偏度和峰度的概念。
    偏度即数据的偏斜程度,峰度即数据分布的高矮程度。正态分布的偏度和峰度都为0。
    左偏峰度时,众数>中位数>均值,偏值大于0。
    右偏峰度时,均值>中位数>众数,峰值小于0.
    峰度大于0,说明变量的分布相比正态分布更加密集,反之峰度小于0,则较为分散。
    在pandas中,提供skew和kurtosis方法实现偏度与峰度。例如模拟1000个标准正态分布的随机数进行演示:

    import numpy as np
    normal = pd.Series(np.random.randn(1000),name='normal')
    normal.skew()#求取偏度
    normal.kurtosis()#求取峰度
    

    二、制作报表与统计制图

    制作报表就是根据数据类型,选取合适统计量并进行展现的过程。报表会展现数据的主要信息其中分为维度(分类变量)和度量(连续变量)。仅含有维度指标的报表称为频次表和交叉表,含有维度和度量两类指标的报表称为汇总表,其中度量指标总是以某个统计量的形式出现,最常见的是均值、总和、频次。
    接下来还以(sndHsPr.csv)演示如何制作报表并进行可视化展现。

    2.1 单因子频数

    即分析单个分类变量的分布情况,提供每个水平的频次、百分比和累计值。

    data.dist.value_counts()#统计每个城区出现的频次
    

    在这里插入图片描述
    用条形图展现这个频次

    data.dist.value_counts().plot(kind='bar')
    

    在这里插入图片描述
    用柱形图展现:

    data.dist.value_counts().plot(kind='pie')
    

    在这里插入图片描述

    2.2 表分析

    也称交叉表,比如分析是否有地铁与是否是学区房之间的关系。

    pd.crosstab(data.subway,data.school)#地铁与学校交叉统计
    

    在这里插入图片描述

    sub_sch = pd.crosstab(data.subway,data.school)#地铁与学校交叉统计
    sub_sch = sub_sch.div(sub_sch.sum(1),axis=0)
    sub_sch.plot(kind = 'bar',stacked = True)
    

    在这里插入图片描述

    2.3 汇总统计量

    按照某个分类变量分组,对连续变量进行描述性统计。
    统计每个城区单位面积房价的主要统计信息,可以使用pandas的groupby函数。

    data.price.groupby(data.dist).agg(['mean','max','min'])
    

    在这里插入图片描述
    每个城区平均房屋价格的排序情况:

    data.price.groupby(data.dist).mean().sort_values(ascending = True).plot(kind = 'barh')
    

    在这里插入图片描述

    展开全文
  • 以下博客内容讲解了描述性统计分析的所有知识点,以及利用鸢尾花数据集的分析加强对各个统计量的理解。 数理统计基础-描述性统计分析1、数理统计基础2、描述性统计分析概述(1)概念(2)变量的类型3、统计量(1)...
  • 课程ppt和excel实操文件,包括柱形图,饼图,雷达图等描述性统计分析方法的实操练习
  • 描述性分析描述性统计分析是关于数据的描述和汇总。它使用两种主要方法:定量方法以数值方式描述和汇总数据。可视化方法通过图表,曲线图,直方图和其他图形来说明数据。一般在数据分析的过程中,拿到数据不会去直接...

    描述性分析

    描述性统计分析是关于数据的描述和汇总。它使用两种主要方法:

    定量方法以数值方式描述和汇总数据。

    可视化方法通过图表,曲线图,直方图和其他图形来说明数据。

    一般在数据分析的过程中,拿到数据不会去直接去建模,而是先做描述性分析来对数据有一个大致的把握,很多后续的建模方向也是通过描述性分析来进一步决定的。那么除了在Excel/R中可以去做描述性分析。

    本文将细致讲解如何使用python进行描述性分析的定量分析部分:

    均值

    中位数

    方差

    标准差

    偏度

    百分位数

    相关性

    至于可视化的部分可以参考我之前讲解pyecharts的文章,当然后面还会介绍echarts以及ggplot2的方法。

    涉及到的python库

    Python statistics是用于描述性统计信息的内置Python库。如果您的数据集不是太大,或者您不能依赖于导入其他库,则可以使用它。

    statistics - Mathematical statistics functions - Python 3.8.2rc1 documentationdocs.python.org

    NumPy是用于数字计算的第三方库,已针对使用一维和多维数组进行了优化。它的主要类型是称为的数组类型ndarray。该库包含许多用于统计分析的方法。

    NumPy User Guidedocs.scipy.org

    SciPy是基于NumPy的用于科学计算的第三方库。与NumPy相比,它提供了其他功能,包括scipy.stats统计分析。

    Getting started - SciPy.orgwww.scipy.org

    Pandas是基于NumPy的用于数值计算的第三方库。它擅长处理带有Series对象的带标签的一维(1D)数据和带有对象的二维(2D)数据DataFrame。

    https://pandas.pydata.org/pandas-docs/stable/pandas.pydata.org

    Matplotlib是用于数据可视化的第三方库。通常会与NumPy,SciPy和Pandas结合使用

    Python plotting - Matplotlib 3.1.3 documentationmatplotlib.org

    开始

    首先导入所有的包

    import math

    import statistics

    import numpy as np

    import scipy.stats

    import pandas as pd

    创建数据

    9ab09c32c305aa3e88df5d37a04cb9fa.png

    x和x_with_nan都是list。不同之处在于x_with_nan包含一个nan值。也就是空值(缺失值),这样的数据在分析中十分常见。那么在python里,创建一个nan值可以有以下方法

    float('nan')

    math.nan

    np.nan

    当然这三种方法创建的空值都是等价的

    1411045466d83028547bfa23d8c3bd2c.png

    但是真的相等吗,两个nan是不相等的,换句话说,是不可以进行比较的,这后面的故事以后再说。

    fdb7e3f4e3486454fe5a9ee739a3e418.png

    接着,我们使用numpy和pandas来创建两个一维numpy arrays和pandas series

    9148cf2b7b3b027105e954aa381d044d.png

    均值

    均值的定义啥的,就不说了,R里面直接mean()就可以,而在python,不导入包,怎么计算:

    e7a34ca526a1c9b49de16d127dbb274a.png

    当然也可以用python的内置统计功能

    362e7f3381b9747c0b3192a7b7bf4cc8.png

    但是如果数据中包含nan,那么将返回nan

    >>> mean_ = statistics.mean(x_with_nan)

    >>> mean_

    nan

    如果使用numpy

    >>> mean_ = np.mean(y)

    >>> mean_

    8.7

    在上面的示例中,mean()是一个函数,但是您也可以使用相应的方法

    >>> mean_ = y.mean()

    >>> mean_

    8.7

    如果包含nan,numpy也会返回nan,那么要是想忽略nan,可以使用np.nanmean()

    >>> np.mean(y_with_nan)

    nan

    >>> np.nanmean(y_with_nan)

    8.7

    pandas也有对应方法,但是,默认情况下,.mean()在Pandas中忽略nan值:

    mean_ = z.mean()

    mean_

    >>> z_with_nan.mean()

    8.7

    中位数

    比较平均值和中位数,这是检测数据中异常值和不对称性的一种方法。平均值还是中位数对您更有用,取决于特定问题的背景。而不使用包的计算方法:

    >>> n = len(x)

    >>> if n % 2:

    ... median_ = sorted(x)[round(0.5*(n-1))]

    ... else:

    ... x_ord, index = sorted(x), round(0.5 * n)

    ... median_ = 0.5 * (x_ord[index-1] + x_ord[index])

    ...

    >>> median_

    4

    其他方法

    >>> median_ = np.median(y)

    >>> median_

    4.0

    >>> np.nanmedian(y_with_nan)

    4.0

    方差

    方差的意义也不过多说明,在Excel中直接用stdev函数,但是怎么在python中计算?记得当初研究生复试就被问到用python不导入包怎么计算方差?

    >>> n = len(x)

    >>> mean_ = sum(x) / n

    >>> var_ = sum((item - mean_)**2 for item in x) / (n - 1)

    >>> var_

    123.19999999999999

    当然更简单的方法是直接使用函数,不过有nan还是会返回nan

    >>> var_ = statistics.variance(x)

    >>> var_

    123.2

    >>> statistics.variance(x_with_nan)

    nan

    放在numpy里面就更简单了,可以使用np.var()或者.var()

    >>> var_ = np.var(y, ddof=1)

    >>> var_

    123.19999999999999

    >>> var_ = y.var(ddof=1)

    >>> var_

    123.19999999999999

    这里ddof就是自由度要设置为1才是无偏的。也就是分母用n-1替换n。如果有nan怎么办?返回nan,但是可以用np.nanvar()跳过nan,不过ddof依旧要设置为1

    >>> np.var(y_with_nan, ddof=1)

    nan

    >>> y_with_nan.var(ddof=1)

    nan

    >>> np.nanvar(y_with_nan, ddof=1)

    123.19999999999999

    标准差

    有了方差,标准差就很好计算了

    #直接计算

    >>> std_ = var_ ** 0.5

    >>> std_

    11.099549540409285

    #使用内置包

    >>> std_ = statistics.stdev(x)

    >>> std_

    11.099549540409287

    numpy中也很好计算

    >>> np.std(y, ddof=1)

    11.099549540409285

    >>> y.std(ddof=1)

    11.099549540409285

    >>> np.std(y_with_nan, ddof=1)

    nan

    >>> y_with_nan.std(ddof=1)

    nan

    >>> np.nanstd(y_with_nan, ddof=1) #跳过nan,ddof还是要是1哦

    11.099549540409285

    偏度(skew)

    偏度(skewness)也称为偏态、偏态系数,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度是利用3阶矩定义的,偏度的计算公式为:

    2645d76283e70d25c762744313bc74dd.png

    e4dbd312964dd1abcf7eb52a96597f14.png

    我们之前研究的数据都是比较对称的数据,但是上图就给出了不对称的数据集,第一组用绿点表示,第二组用白点表示。通常,负偏度值表示左侧有一个占主导地位的尾巴,可以在第一个集合中看到。正偏度值对应于右侧较长或的尾巴,可以在第二组中看到。如果偏度接近0(例如,介于-0.5和0.5之间),则该数据集被认为是非常对称的。

    那么不依赖第三包,怎么计算偏度。可以先计算完数据集的大小n,样本均值mean和标准差std后用公式计算

    >>> x = [8.0, 1, 2.5, 4, 28.0]

    >>> n = len(x)

    >>> mean_ = sum(x) / n

    >>> var_ = sum((item - mean_)**2 for item in x) / (n - 1)

    >>> std_ = var_ ** 0.5

    >>> skew_ = (sum((item - mean_)**3 for item in x)

    ... * n / ((n - 1) * (n - 2) * std_**3))

    >>> skew_

    1.9470432273905929

    可以看出偏度为正,因此x尾巴在右侧。

    也可以用第三方包计算

    >>> y, y_with_nan = np.array(x), np.array(x_with_nan)

    >>> scipy.stats.skew(y, bias=False)

    1.9470432273905927

    >>> scipy.stats.skew(y_with_nan, bias=False)

    nan

    >>> z, z_with_nan = pd.Series(x), pd.Series(x_with_nan)

    >>> z.skew()

    1.9470432273905924

    >>> z_with_nan.skew()

    1.9470432273905924

    百分位数(Percentiles)

    如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。每个数据集都有三个四分位数,这是将数据集分为四个部分的百分位数:

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

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

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

    第三四分位数与第一四分位数的差距又称四分位距(InterQuartile Range,IQR)。

    那么在python里面怎么计算分位数呢。可以使用statistics.quantiles()

    >>> x = [-5.0, -1.1, 0.1, 2.0, 8.0, 12.8, 21.0, 25.8, 41.0]

    >>> statistics.quantiles(x, n=2)

    [8.0]

    >>> statistics.quantiles(x, n=4, method='inclusive')

    [0.1, 8.0, 21.0]

    可以看到第一行中,8就是x的中位数,而第二个例子中,0.1和21是样本的25%和75%分位数。也可以使用第三方包numpy计算

    >>> np.percentile(y, [25, 50, 75])

    array([ 0.1, 8. , 21. ])

    >>> np.median(y)

    8.0

    #跳过nan

    >>> y_with_nan = np.insert(y, 2, np.nan)

    >>> y_with_nan

    array([-5. , -1.1, nan, 0.1, 2. , 8. , 12.8, 21. , 25.8, 41. ])

    >>> np.nanpercentile(y_with_nan, [25, 50, 75])

    array([ 0.1, 8. , 21. ])

    pandas也可以使用.quantile()计算,需要提供分位数值作为参数。该值可以是0到1之间的数字或数字序列。

    >>> z, z_with_nan = pd.Series(y), pd.Series(y_with_nan)

    >>> z.quantile(0.05)

    -3.44

    >>> z.quantile(0.95)

    34.919999999999995

    >>> z.quantile([0.25, 0.5, 0.75])

    0.25 0.1

    0.50 8.0

    0.75 21.0

    dtype: float64

    >>> z_with_nan.quantile([0.25, 0.5, 0.75])

    0.25 0.1

    0.50 8.0

    0.75 21.0

    dtype: float64

    范围(Ranges)

    数据的范围是数据集中最大和最小元素之间的差。可以通过函数np.ptp()获得:

    >>> np.ptp(y)

    27.0

    >>> np.ptp(z)

    27.0

    >>> np.ptp(y_with_nan)

    nan

    >>> np.ptp(z_with_nan)

    27.0

    描述性统计摘要

    在SciPy和Pandas提供过单个函数或方法调用快速获取描述性统计信息。

    >>> result = scipy.stats.describe(y, ddof=1, bias=False)

    >>> result

    DescribeResult(nobs=9, minmax=(-5.0, 41.0), mean=11.622222222222222, variance=228.75194444444446, skewness=0.9249043136685094, kurtosis=0.14770623629658886)

    describe() 返回包含以下信息:

    nobs:数据集中的观测值或元素数

    minmax:数据的最大和最小值

    mean:数据集的平均值

    variance:数据集的方差

    skewness:数据集的偏度

    kurtosis:数据集的峰度

    >>> result.nobs

    9

    >>> result.minmax[0] # Min

    -5.0

    >>> result.minmax[1] # Max

    41.0

    >>> result.mean

    11.622222222222222

    >>> result.variance

    228.75194444444446

    >>> result.skewness

    0.9249043136685094

    >>> result.kurtosis

    0.14770623629658886

    pandas也有类似的函数.describe():

    >>> result = z.describe()

    >>> result

    count 9.000000 #数据集中的元素数

    mean 11.622222 #数据集的平均值

    std 15.124548 #数据集的标准差

    min -5.000000

    25% 0.100000 #数据集的四分位数

    50% 8.000000

    75% 21.000000

    max 41.000000

    dtype: float64

    相关性

    相关行的统计学意义也不在过多说明,但是要注意,相关性只是能从数据上判断是否有关系,不能够说明因果关系!!!

    度量相关性主要使用协方差和相关性系数:

    那么我们先重新创建数据

    >>> x = list(range(-10, 11))

    >>> y = [0, 2, 2, 2, 2, 3, 3, 6, 7, 4, 7, 6, 6, 9, 4, 5, 5, 10, 11, 12, 14]

    >>> x_, y_ = np.array(x), np.array(y)

    >>> x__, y__ = pd.Series(x_), pd.Series(y_)

    计算协方差

    >>> n = len(x)

    >>> mean_x, mean_y = sum(x) / n, sum(y) / n

    >>> cov_xy = (sum((x[k] - mean_x) * (y[k] - mean_y) for k in range(n))

    ... / (n - 1))

    >>> cov_xy

    19.95

    numpyh和pandas都有可以返回协方差矩阵函数cov()

    # numpy

    >>> cov_matrix = np.cov(x_, y_)

    >>> cov_matrix

    array([[38.5 , 19.95 ],

    [19.95 , 13.91428571]])

    # pandas

    >>> cov_xy = x__.cov(y__)

    >>> cov_xy

    19.95

    >>> cov_xy = y__.cov(x__)

    >>> cov_xy

    19.95

    计算相关系数

    我们这里说的均是pearson相关系数。Pearson相关系数(Pearson CorrelationCoefficient)是用来衡量两个数据集合是否在一条线上面,它用来衡量定距变量间的线性关系。计算公式为𝑟=𝑠ˣʸ/(𝑠ˣ𝑠ʸ)在python里面直接计算需要先计算均值和标准差。

    >>> var_x = sum((item - mean_x)**2 for item in x) / (n - 1)

    >>> var_y = sum((item - mean_y)**2 for item in y) / (n - 1)

    >>> std_x, std_y = var_x ** 0.5, var_y ** 0.5

    >>> r = cov_xy / (std_x * std_y)

    >>> r

    0.861950005631606

    也可以用scipy.stats计算:

    >>> r, p = scipy.stats.pearsonr(x_, y_)

    >>> r

    0.861950005631606

    >>> p

    5.122760847201171e-07

    其中p代表p值,p值的意思我们以后再说。类似协方差,我们也能计算相关系数矩阵

    >>> corr_matrix = np.corrcoef(x_, y_)

    >>> corr_matrix

    array([[1. , 0.86195001],

    [0.86195001, 1. ]])

    *至此,如何在python中进行描述性分析的定量部分已经介绍的差不多了。下一篇文章将对可视化的描述性分析进行介绍。*python数据分析学习——1.描述性统计分析

    展开全文
  • stata做描述性统计分析

    千次阅读 2021-03-10 10:22:16
    在读入数据之后,我们在进行回归模型构建之前,往往需要对数据进行描述性统计分析描述性统计分析的具体方法如下,示例使用的方法是summarize,也有其他的一些方法可以参考,它们输出的描述性统计的指标类型各不...
  • 1.频率分析:统计学分为描述性统计分析和推断性统计分析描述性统计分析:应用分类,制表,图形以及概括性数据制表来概括数据分布特征的方法,结论不能推及总体。推断性统计:推断性统计分析得到的结论适用于总体描述...
  • 一、数据分析的分类与作用 二、数据分析方法-描述性统计分析
  • 一、描述性统计分析  所谓描述性分析,就是对一组数据的各种特征进行分析,以便于描述测量样本的各种特征值以及其所代表的总体的特征。描述性统计分析的项目很多,常用的如平均数、标准差、中位数、频数分布、正态...
  • 运用Excel实现描述性统计分析

    千次阅读 2019-07-26 10:59:54
    上篇文章介绍了描述性统计分析的常用指标及其计算公式(上篇文章链接:描述性统计分析),这次介绍一下如何运用Excel实现描述性统计分析。 下图为一张商品信息表,现对商品的价格、销量、评论数进行描述性统计分析。...
  • 描述性统计分析主要包括 基本信息:样本数、总和 集中趋势:均值、中位数、众数 离散趋势:方差(标准差)、变异系数、全距(最小值、最大值)、内四分位距(25%分位数、75%分位数) 分布描述:峰度系数、偏度系数 ...
  • 1.频率分析:统计学分为描述性统计分析和推断性统计分析描述性统计分析:应用分类,制表,图形以及概括性数据制表来概括数据分布特征的方法,结论不能推及总体。推断性统计:推断性统计分析得到的结论适用于总体描述...
  • 3. 描述性统计分析

    千次阅读 2018-06-10 18:29:37
    描述性统计分析 描述性统计分析 描述定性数据的图形法和数值法 描述定量数据的图形法 点图 茎叶图 直方图 描述定量数据的数值法 中心趋势的度量 变异性的度量 相对位置的度量 百分位数 z得分 检测异常值的...
  • 描述性统计分析-day1

    2019-11-22 17:54:31
    描述性统计分析 数理统计,以概率论为基础,研究大量的随机现象的统计规律性。数理统计分为如下两类 1 描述统计 2 推断统计 两者区别和联系: 区别: 描述统计 研究的是数据收集、处理、汇总、图表描述、概括...

空空如也

空空如也

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

描述性统计分析