精华内容
下载资源
问答
  • 【单选题】对于 Python中的 文件,以下... ls =[1,2,1,3] nums = set(ls) for i in nums: print( i, end = "" )【单选题】下面关于列表的说法,描述错误的是:【单选题】下列程序的输出结果为【 】。 def fun(a,b): ...

    【单选题】对于 Python中的 文件,以下描述中正确的是( )。

    【单选题】Python 对文件操作采用的统一步骤是( )。

    【单选题】分析下面程序的执行结果。 ls =[1,2,1,3] nums = set(ls) for i in nums: print( i, end = "" )

    【单选题】下面关于列表的说法,描述错误的是:

    【单选题】下列程序的输出结果为【 】。 def fun(a,b): return a+b c = fun(5,6) #调用 fun()函数 print(c)

    【单选题】以下关于 Python 语言中 “ 缩进 ” 说法正确的是【 】。 ‪‪‪‪‪‪‪‪‪‪‪‪‪

    【单选题】以下关于函数说法错误的是 【 】

    【论述题】请完成系统分析文档,并提交团队评分表,如小组因进博会志愿者无法及时完成,私信老师报备即可 系统分析文档模板及范例.zip

    【单选题】以下选项不是函数作用的是【 】 。

    【单选题】哪个选项能够使用 turtle 库绘制一个半圆形?【】

    【单选题】分析下面代码的输出结果 dict = {'Name': 'Zra', 'Sex':'f' ,'Addr' :'Tianjin'} age = dict.get('age', 18) print( age)

    【单选题】下面  关于大括号 {} 和中括号[]的 描述中正确的是:

    【单选题】下面选项说法正确的是【 】。

    【单选题】关于函数的参数,以下选项描述错误的是【 】。

    【单选题】关于 Python 的元组类型,以下选项错误的是:

    【单选题】下面不属于 Python 保留字的是【 】。

    【单选题】关于 return 语句,以下选项描述正确的是【 】。

    【单选题】下面选项中 不 能 正确引用 turtle 库的是 【 】。

    【单选题】以下关于函数调用描述正确的是【 】。

    【单选题】下面代码的执行结果是( )。 fo = open("file.txt", "w+") ls = ["唐诗", "宋词", "元曲"] fo.writelines(ls) fo.seek(0) for line in fo: print(line) fo.close()

    【单选题】函数如果有多个参数,参数之间必须使用( )分隔。

    【单选题】下列函数中,可返回元组中元素最大值的是【】。

    【填空题】已有列表 ls =[1,3,2,5,9] 要将列表中的元素按由小到大排列,即:使ls变为 [1,2,3,5,9] 可以通过______函数(只写函数名即可)实现。

    【单选题】假设 test.txt 文件中的内容由如下三行信息构成: abcdef ABCDEF 123456 则执行下面的代码后,程序输出( )。 f = open("test.txt", "r") txt = f.readline() print(txt)

    【单选题】已有列表 ls =[1,3,2,5,9],以下不能实现将列表元素反转的是【 】。

    【单选题】字符串是一个字符序列,若已有语句 s="ABC" ,以下可以表示字符'C'的 是【 】。

    【单选题】turtle.circle(-90,90) 的执行结果是【 】。

    【单选题】关于 turtle 库绘图函数,哪个选项的描述是错误的? ‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‫【 】‪‪‪‪‪‪‪‪‪‪‪‪‪

    【单选题】以下选项对文件描述错误的是( )。

    【论述题】团队实验1: 1、每个小组提出一个需要解决的实际电子商务项目问题,公布在论坛中,让其它小组选择,作为中标小组今后团队作业的项目需求。 注意论坛公布格式如下: 第X组提供项目需求如下: 项目名称:XXXX 项目背景:XXXX(简单描述) 需要解决的问题(至少5个点): (1)、XXXX (2)、XXXX 。。。。。。 需要认领此项目的组在帖子下面回复认领,然后需求方回复认可即认为此项目已认领。 2、每个团队认领完项目后,完成以下工作: (1)通过团队讨论,利用头脑风暴列出该项目需要解决的问题,然后对所有问题进行归类,完成一份合理的鱼骨图; (2)把鱼骨图的各种讨论因素制作成一张调查表,并发布到问卷星之类的调研免费网站上,通过调查表的统计数据来计算影响问题的主要因素。(调查表设计至少要10个以上问题,采用至少3种问题类型。注意回收问卷至少30份以上) (3)讨论这张图在寻找问题的实际原因方面有帮助吗? (要求保留讨论记录、调研表样式、调查表的总数(即调研填写的数据表若调查表量),多可使用抽样技术进行统计) 3、通过题2的分析,完成至少1000字此项目的调查报告。 4、制作答辩PPT,展示项目需求分析过程、数据及结论。 于10月22日进行公开答辩,10月21日晚7点前将答辩之前打包所有材料交到课程中心的实验1作业中。 团队实验1-答辩要求 1、组长抽签排序: 2、每组进行展示汇报6分钟,1分钟提问,答辩可以以各种形式博眼球,多人、个人、问答等都可以; 3、每个组对展示进行评分排序,前三名的组每位组员期末总评各加3、2、1分; (答辩时间:10月22日,答辩地点:上课教室)

    【单选题】列表 ls ,哪个选项对 ls.append(x) 的描述是正确的?

    【单选题】分析下面代码的执行结果 ls = [12,"abc",10e2,"2e-2","apple"] sum = 0 for i in ls: if type(i) in [type(2),type(0.2)]: sum = sum + i print(sum)

    【填空题】分析下面程序的执行结果。 ls = [ [ 1, 2, 3 ], 4, 5 ] print( len(ls) )

    【单选题】S 和 T 是两个集合,哪个选项对 S^T 的描述是正确的?

    【单选题】以下不是 Python 语言合法命名的是【 】。

    【单选题】哪个选项是 turtle 绘图中角度坐标系的绝对 0 度方向?【 】

    【单选题】执行下面的操作后,b 的值为: a = [4, 5, 6] b = a a[2] = 3

    【单选题】哪个选项对 turtle.done() 的描述是正确的?【 】

    【单选题】关于 Python 组合数据类型,以下描述错误的是:

    【单选题】已有 序列 s ,下面哪个选项对 s.index(x) 的描述是正确的?

    【单选题】下列语句打开文件的位置应该在( )。 f = open( "itheima.txt", 'r' )

    【单选题】关于 turtle 库,哪个选项的描述是错误的?【 】

    【填空题】在Python中,函数的返回值可以通过使用保留字________实现。

    【论述题】请每位同学选择第一到第六章的任何一小节,要求完成: 1、每个小组组员不能选同一节; 2、对应的教案(模板见附件); 3、讲课的PPT(PPT设计本节课讲解的内容,自己设计样式,相关案例可以自己补充) 课程教案模板-系统分析.docx 将于11月26日课程选部分同学展示。

    【单选题】以下不是 Python 序列类型的是【】

    【填空题】在 Python 中,定义函数的保留字是 ________ 。

    【单选题】打开文件对文件进行读写,操作完成后应该调用( )方法关闭文件,以释放资源。

    【单选题】哪个选项不能改变 turtle 画笔的运行方向?【 】

    【单选题】关于 Python 文件的 ‘r’ 打开模式,哪个选项的描述是正确的?

    【单选题】关于 turtle 库的画笔控制函数,哪个选项的描述是错误的?【 】

    展开全文
  • 属性向量(或特征向量)是用来描述一个给定对象的一组属性。属性有不同类型:标称属性(nominal attribute)、二元属性(binary attribute)、序数属性(ordinal attribute)、 数值属性(numerical attribute)、...
    • A 标称
    • B 序数
    • C 区间
    • D 相异

    关于数据的属性类别的介绍

    数据集由数据对象组成,一个数据对象代表一个实体。数据对象又称样本、实例、数据点或对象。属性(attribute)是一个数据字段,表示数据对象的一个特征。属性向量(或特征向量)是用来描述一个给定对象的一组属性。属性有不同类型:标称属性(nominal attribute)、二元属性(binary attribute)、序数属性(ordinal attribute)、 数值属性(numerical attribute)、离散属性与连续属性。

    A、标称属性(nominal attribute)

    标称属性的值是一些符号或实物的名称,每个值代表某种类别、编码或状态,所以标称属性又被看做是分类型的属性(categorical)。这些值不必具有有意义的序,并且不是定量的。

    B、二元属性(binary attribute)

    二元属性是一种标称属性,只有两个类别或状态:0或1,其中0常表示不出现,1表示出现。如果将0和1对应于false和true,二元属性则为布尔属性。

    C、序数属性(ordinal attribute)

    序数属性可能的取值之间具有有意义的序或秩评定,但相继值之间的差是未知的。例如,学生的成绩属性可以分为优、良、中、差四个等级;某快餐店的饮料杯具有大、中、小三个可能值。然而,具体“大”比“中”大多少是未知的。

    序数属性可用于记录不能客观度量的主观质量评估。因此,序数属性常用于等级评定调查。如某销售部门客户服务质量的评估,0表示很不满意,1不太满意,2表示中性,3表示满意,4表示非常满意。

    通过数据预处理中的数据规约,序数属性可以通过将数据的值域划分成有限个有序类别,将数值属性离散化而得到。应注意的是,标称、二元和序数属性都是定性的,只描述样本的特征,而不给出实际大小或数量。下面介绍提供样本定量度量的数值属性。

    D、数值属性(numerical attribute)

    数值属性是可度量的量,用整数或实数值表示,有区间标度和比率标度两种类型。

    a) 区间标度(interval-scaled)属性

    区间标度属性用相等的单位尺度度量。区间属性的值有序。所以,除了秩评定之外,这种属性允许比较和定量评估值之间的差。例如,身高属性是区间标度的。假设我们有一个班学生的身高统计值,将每一个人视为一个样本,将这些学生身高值排序,可以量化不同值之间的差。A同学身高170cm比B同学165cm高出5cm。

    对于没有真正零点的摄氏温度和华氏温度,其零值不表示没有温度。例如,摄氏温度的度量单位是水在标准大气压下沸点温度与冰点温度之差的1/100。尽管可以计算温度之差,但因没有真正的零值,因此不能说10℃比5℃温暖2倍,不能用比率描述这些值。但比率标度属性存在真正的零点。

    b) 比率标度(ratio-scaled)属性

    比率标度属性的度量是比率的,可以用比率来描述两个值,即一个值是另一个值的倍数,也可以计算值之间的差。例如,不同于摄氏和华氏温度,开氏温度具有绝对零点。在零点,构成物质的粒子具有零动能。比率标度属性的例子还包括字数和工龄等计数属性,以及度量重量、高度、速度的属性。

    E、离散属性与连续属性

    前面介绍的四种属性类型之间不是互斥的。我们还可以用许多其他方法来组织属性类型,使类型间不互斥。机器学习领域的分类算法常把属性分为离散的或连续的属性。不同类型有不同的处理方法。

    离散属性具有有限或无限可数个值。如学生成绩属性,优、良、中、差;二元属性取1和0以及年龄属性取0到110。如一个属性可能取值的值集合是无限的,但可以建立一个与自然数的一一对应,则其也是离散属性。如果一个属性不是离散的,则它是连续的。注意:在文献中,术语 “数值属性” 和“连续属性”常可以互换使用,因此,“连续属性”也常被称为“数值属性”。

    参考书目《无监督学习方法及其应用》

    展开全文
  • 连续变量的描述统计与SPSS实现

    千次阅读 2020-03-09 23:29:10
    第一个问题,连续变量是什么? 一个人的年级,统计出来有1、2、3…… 一个人的年纪,统计出来有18、19、20…… 但是,虽然都是数字,只有年纪是连续变量...下面进入正题,连续变量的描述统计。 概述 对于统计学和SP...

    第一个问题,连续变量是什么?

    一个人的年级,统计出来有1、2、3……
    一个人的年纪,统计出来有18、19、20……

    但是,虽然都是数字,只有年纪是连续变量。

    为什么?顾名思义,年纪是连续的,18 - 19之间可以无限划分,而年级不行,你只能位于这几个数之间的一个,而不能在他们中间。

    所以我们定义连续变量为:在一定区间内可以任意取值的变量。

    下面进入正题,连续变量的描述统计。

    概述

    对于统计学和SPSS来说,描述统计很直观,非常适合入门,它的作用就是进行描述

    描述一组数据,最普及的当然是平均数了,它属于集中趋势的量数,那么在数据工作中,我们可以从以下几个方面对数据进行描述:

    • 集中趋势 central tendency
    • 离散趋势 dispersion tendency
    • 分布特征 distribution tendency

    下面一个个介绍

    集中量数

    它用来体现一组数据的一般水平,集中意为数据们向某一点集中,众数据奔它而来。
    这一点并不固定,我们会根据数据的不同分布状况进行选择,比如:

    • 算术平均数:观察值总和与总频数之商;这是最常用的指标,但不适合对严重偏态分布的变量进行描述。譬如一个很常用的比分:一名CEO 的薪资为50w,10名员工薪资为3000,他们的算数平均数能代表该公司的平均薪资水平吗?显然不能。
    • 中位数:将全体数据从大到小排列,在数列中处于中间位置的数。
    • 众数:出现次数最多的数。
    • 还有截尾均数、几何均数、调和均数,其中截尾均数用得相对较多,截尾截尾,截去头尾,再求算术平均数;它能够有效防止极端值影响,一个很广泛的场景是:比赛计算得分时,去掉最高分和最低分,再求算术平均数。

    差异量数

    差异量数用来描述数据分布的变异性,能够量化描述数据的延伸、聚集状态,也就是我们常说的分散还是集中。
    集中量数和差异量数密不可分,在推断统计中,我们会同时用这两组数据来进行分析。
    常用的差异量数有以下几种:

    • 全距 range:最大值与最小值之差,很简单,不过也没什么用hhh
    • 百分位数、四分位数、四分位距一起说
      • 百分位数用来表示位置,如P99,就是将观察值分为两部分,理论上有99%的观察值比它小,1%比它大,是非常靠前的位置了。
      • 四分位数就是3个特定的百分位数,P25/P50/P75,可以发现,在同一组数据中,这三个四分位数是按上面的顺序升序排列的。(也可这样表示:Q1=P25;Q2=P50;Q3=P75)
      • 四分位距就是中间50%的数据的全距,也就是P75-P25。
    • 标准差和方差:这是一种算起来麻烦但是应用非常广泛的量数,大概仅次于算数平均数。标准差描述的是分布中每一个个体与均值之间的距离,也就是说,这组数据离中心偏离了多远。
    • 变异系数:当你要比较两组数据离散程度大小的时候,很多时候不能直接比较,主要为以下两种情况:
      • 测量尺度相差太大;比如蚂蚁的体重和大象的体重,显然不是一个量级,大象一点点的变化,在蚂蚁身上都会显得非常大,直接用标准差是不合适的;
      • 数据量纲不同;比如想要比较人的身高和体重离散程度大小,cm和kg如何比较呢?
      • 所以我们推出了变异系数CV(Coefficient of Variation),它的公式很简单,就是**(标准差/平均值)**,用除法消除了量纲,又按照均数大小进行了标准化。

    分布特征

    最常见的分布就是正态分布了,我们知道正态分布的形态,那么偏离的那些如何描述呢?于是偏度系数、峰度系数也被推出来,描述当前数据偏离正态分布的程度。
    这些用得比较少,我们只介绍一下其含义:

    • 偏度:分布不对称的方向和程度,记为g1;他是与正态分布比较而言的。
      • g1>0时,呈正偏态分布,长尾在右边
      • g1=0时,对称
      • g1<0时,呈负偏态分布,长尾在左边
    • 峰度:分布的尖峭程度或峰凸程度,记为g2;仍然是与正态分布相比较而言的统计量。
      • g2>0,峰的形状比较尖
      • g2=0,正态峰
      • g2<0,峰的形状比正态分布要平坦

    SPSS实现

    在SPSS中呢,想要知道这些数据都是非常非常方便的!

    • 他们在哪里?

    • 在“描述统计”子菜单中
      在这里插入图片描述

    • 频率:这里能够产生原始数据的频数表以及百分位数等各种统计数据;
      在这里插入图片描述

    • 最简单的,把你需要统计的变量移到右边的“变量”框内再按“确定”就可以了;

    • 右边的“统计”提供了百分位值、集中量数、差异量数、分布等的选项,勾选了就可以在输出中显示啦;“图表”可以勾选你需要显示的条形图、饼图等噢;默认是全部不勾选的,欢迎diy~

    • 描述:它用于一般性的统计描述,不能作图,可选项也没有那么多,但是简单高效,使用频率非常高,一般用于正态分布。

    • 探索:都是描述统计,为什么explore听起来高级一点?因为他是用于连续性资料分布状况不清时进行探索式分析。除了常用统计量,还可以做截尾均数、极端值列表等,当然也可以画图,功能非常强大。

    其实SPSS对新手真的非常友好,基本就是“所见即所得”,新手可以直接点开一个数据集,尝试各种功能,相信能够进步非常快~

    展开全文
  • 描述统计、参数估计和假设检验

    万次阅读 多人点赞 2021-04-03 01:15:43
    描述统计分析 描述统计所提取的统计的信息称为统计量,包括频数与频率,反映集中趋势的均值、中位数、众数和分位数,反映离散程度的极差、方差和标准差,反映分布形状(相对于正态分布)的偏度和峰度。 变量分为...

    描述性统计分析

    描述性统计所提取的统计的信息称为统计量,包括频数与频率,反映集中趋势的均值、中位数、众数和分位数,反映离散程度的极差、方差和标准差,反映分布形状(相对于正态分布)的偏度和峰度。

    变量分为类别变量和数值变量,类别变量往往被作为维度,数值变量往往被作为指标。类别可以经过特定的转换转换为数值,从而作为指标,数值变量也可以经过特定的分箱或转换转换为文本型变量,从而作为类别或维度。

    频数与频率

    最基本的统计量就是频数与频率,它们适用于类别变量。

    频数,指数据中类别变量每个不同取值出现的次数。

    频率,指每个类别变量的频数与总次数的比值,通常采用百分数表示。

    下面我们以鸢尾花数据集为例说明这些概念,首先导包并读取数据:

    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
    
    iris = load_iris()
    data = np.column_stack([iris.data, iris.target])
    data = pd.DataFrame(data, columns=["sepal_length", "sepal_width", "petal_length", "petal_width", "type"])
    data.sample(10)
    

    注意:column_stack会先将一维数组转换为2维列向量后,按列水平进行拼接

    numpy拼接小知识补充

    np.column_stack([iris.data, iris.target])
    

    等价于:

    np.hstack([iris.data, iris.target.reshape(-1, 1)])
    

    或:

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

    或:

    np.c_[iris.data, iris.target.reshape(-1, 1)]
    

    iris.target.reshape(-1, 1)也可以用新增轴来表示,等价于:

    iris.target[:, np.newaxis]
    

    np.newaxis的本质等于None,可以直接用None替换,即:

    iris.target[:, None]
    

    个人觉得column_stack最方便,因为实现了将一维数组自动转换为2维列向量。

    下面计算鸢尾花数据中,每个类别出现的频数

    frequency = data["type"].value_counts()
    frequency
    
    2.0    50
    1.0    50
    0.0    50
    Name: type, dtype: int64
    

    将频数除以总数即表示每个类别出现的频率,使用百分比表示:

    percentage = frequency * 100 / len(data)
    percentage
    
    2.0    33.333333
    1.0    33.333333
    0.0    33.333333
    Name: type, dtype: float64
    

    反映趋中趋势的几个指标

    有均值、中位数、众数和分位数。

    均值、中位数和众数

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

    中位数,将一组数据升序排列,位于该组数据最中间位置的值,就是中位数。如果数据个数为偶数,则取中间两个数值的均值。

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

    从上图可以看到在正态分布下,三者是相同的,在偏态分布下,三者会有所不同。

    数值变量在正态分布时,可以使用均值与中值表示集中趋势。在偏态分布下,均值容易受极端值的影响,所以一般使用中值表示集中趋势。

    类别变量通常使用众数表示集中趋势,但众数在一组数据中可能不是唯一的。

    举个例子,要统计居民的总体收入水平,使用哪项指标衡量更合适呢?首先收入属于数值变量,可以使用均值与中位数表示集中趋势。

    但20%的人掌握着80%的人财富,居民收入是个严重右偏的分布,均值会受极端值的影响,所以使用中位数指标更合适。

    下面我们计算花萼长度的均值,中位数以及众数:

    # 计算花萼长度的均值。
    mean = data["sepal_length"].mean()
    # 计算花萼长度的中位数。
    median = data["sepal_length"].median()
    # 计算花萼长度的众数。
    mode = data["sepal_length"].mode()
    print(mean, median)
    # mode方法返回的是Series类型。
    print(mode)
    
    5.843333333333335 5.8
    0    5.0
    dtype: float64
    

    也可以使用scipy的stats模块来求一组数据的众数。

    from scipy import stats
    stats.mode(data["sepal_length"])
    
    ModeResult(mode=array([5.]), count=array([10]))
    

    同时会返回该众数出现的频次。

    看看分布:

    # 绘制数据的分布(直方图 + 密度图)。
    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()
    

    Serise的mode方法和stats.mode()方法的区别

    Serise的mode方法的返回值类型是Serise。stats.mode()方法的返回值类型是 ModeResult

    如果众数的值不唯一,Series的mode()方法会显示所有众数,而stats.mode()方法只显示其中一个,但同时能知道该众数的个数。

    s = pd.Series([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5])
    

    对于Series的mode方法:

    s.mode()
    
    0    1
    1    2
    2    3
    dtype: int64
    

    对于stats.mode()方法:

    stats.mode(s)
    
    ModeResult(mode=array([1], dtype=int64), count=array([3]))
    

    分位数

    分位数,通过n-1个分位将数据划分为n个区间,使得每个区间的数值个数相等(或近似相等)。其中,n为分位数的数量.常用的分位数有四分位数与百分位数。

    以四分位数为例,通过3个分位,将数据划分为4个区间(百分位数可根据四分位数对比理解)。

    • 第1个分位称为1/4分位(下四分位)数据中1/4的数据小于该分位值。
    • 第2个分位称为2/4分位(中四分位)数据中2/4的数据小于该分位值。
    • 第3个分位称为3/4分位(上四分位)数据中3/4的数据小于该分位值。

    使用Numpy中计算分位数:

    x = [1, 3, 10, 15, 18, 20, 23, 40]
    # quantile与percentile都可以计算分位数,不同的是,quantile方法,
    # q(要计算的分位数)的取值范围为[0, 1],而percentile方法,q的取值范围为[0, 100]。
    print(np.quantile(x, q=[0.25, 0.5, 0.75]))
    print(np.percentile(x, q=[25, 50, 75]))
    
    [ 8.25 16.5  20.75]
    [ 8.25 16.5  20.75]
    

    使用Pandas中计算分位数:

    x = [1, 3, 10, 15, 18, 20, 23, 40]
    s = pd.Series(x)
    s.describe()
    
    count     8.000000
    mean     16.250000
    std      12.395276
    min       1.000000
    25%       8.250000
    50%      16.500000
    75%      20.750000
    max      40.000000
    dtype: float64
    

    describe方法支持自定义分位位置:

    s.describe(percentiles=[0.25, 0.9])
    
    count     9.000000
    mean     16.777778
    std      11.702326
    min       1.000000
    25%      10.000000
    50%      18.000000
    90%      26.400000
    max      40.000000
    dtype: float64
    

    分位数计算的原理

    首先计算分位点所在的索引位置:

    x = np.array([1, 3, 10, 15, 18, 20, 23, 40])
    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)
    
    1.75 3.5 5.25
    

    索引位置不是整数时,使用最近位置的两个整数,加权计算来得到四分位的位置,每个整数的权重为距离的反比。加权计算:

    index = np.array([q1_index, q2_index, q3_index])
    # 计算左边元素的值。
    left = np.floor(index).astype(np.int8)
    # 计算右边元素的值。
    right = np.ceil(index).astype(np.int8)
    # 获取index的小数部分与整数部分。
    weight, _ = np.modf(index)
    # 根据左右两边的整数,加权计算四分位数的值。权重与距离成反比。
    q = x[left] * (1 - weight) + x[right] * weight
    print(q)
    
    [ 8.25 16.5  20.75]
    

    当索引位置是整数时,计算过程可以简化为:

    x = np.array([1, 3, 10, 15, 18, 20, 21, 23, 40])
    n = len(x)
    # 计算四分位的索引(index)。
    index = (np.array([0.25, 0.5, 0.75])*(n - 1)).astype(np.int8)
    print(x[index])
    
    [10, 18, 21]
    

    反映离散程度的极差、方差和标准差

    极差指一组数据中,最大值与最小值之差。

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

    σ 2 = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 \Huge{\sigma^{2}=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}} σ2=n11i=1n(xixˉ)2

    • x i x_i xi:数组中的每个元素。
    • n:数组元素的个数。
    • x ˉ \bar{x} xˉ:数组中所有元素的均值。

    标准差为方差的开方。

    σ = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 \Huge{\sigma=\sqrt{\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}}} σ=n11i=1n(xixˉ)2

    关于三者,说明如下:

    • 极差的计算非常简单,但是极差没有充分的利用数据信息。
    • 方差(标准差)可以体现数据的分散性,方差(标准差)越大,数据越分散,方差(标准差)越小,数据越集中。
    • 方差(标准差)也可以体现数娼的波动性(稳定性)。方差(标准差)越大,数据波动性越大,方差(标淮差)越小,数据波动性越小。
    • 当数据较大时,也可以使用n代替n-1
    # 计算极差。
    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)
    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()
    

    反映分布形状的偏度和峰度

    偏度

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

    • 如果数据对称分布(例如正态分布),则偏度为0。
    • 如果数据左偏分布.则偏度小于O。
    • 如果数据右偏分布.则偏度大于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.9911238058650503 0.7820903371872946
    

    峰度

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

    • 对于标准正态分布,峰度为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.02338847301358893 标准差: 0.9980947521404823
    花萼宽度峰度: 0.2907810623654279 标准差: 0.4335943113621737
    花瓣长度峰度: -1.4019208006454036 标准差: 1.7644204199522617
    

    绘制对数正态分布的图像

    如果一个分布取对数后为正态分布,则该分布称为对数正态分布。

    import random
    import numpy as np
    
    logdata = [random.lognormvariate(0, 0.6) for i in range(100000)]
    data = np.random.normal(0, 0.6, size=100000)
    sns.kdeplot(data, label="正态分布")
    sns.kdeplot(np.log(logdata), label="对数正态分布取对数")
    sns.kdeplot(np.exp(data), label="正态分布取幂")
    sns.kdeplot(logdata, label="对数正态分布")
    plt.xlim(-5, 5)
    

    推断统计分析

    推断统计的概念

    总体,就是被研究的全部数据,总体中的某个数据,就是个体。从总体中抽取部分个体.就构成了样本,样本中包含的个体数量,称为样本容量

    在实际的研究中,往往无法获取全部数据,只能对总体进行抽样。推断统计就是研究根据样本数据去推断总体数量特征的方法,它在对样本数据进行描述的基础上,对统计总体的未知数量特征做出以概率形式表述的推断,从而通过样本统计量来估计总体参数。

    推断统计分析分为参数估计和假设检验。

    参数估计

    点估计与区间估计

    点估计,就是使用样本的统计量去代替总体参数。例如,我们要求鸢尾花的平均花瓣长度,就可以使用样本的均值来估计总体的均值:

    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
    
    iris = load_iris()
    data = np.column_stack((iris.data, iris.target))
    data = pd.DataFrame(data, 
            columns=["sepal_length", "sepal_width", "petal_length", "petal_width", "type"])
    print(data["petal_length"].mean())
    
    3.7586666666666693
    

    点估计实现简单,但是容易受到随机抽样的影响,无法保证结论的准确性。

    区间估计则根据样本的统计量,计算出一个可能的区间与概率,表示总体的参数会有多少概率位于该区间中。区间估计指定的区间,我们称为置信区间,而区间估计指定的概率,称为置信度。例如,鸢尾花花瓣长度有70%的可能性在3.4cm-3.8cm之间,3.4cm- 3.8cm就是置信区间,而70%就是置信度。

    总之,点估计是使用一个值来代替总体的参数值,能够给出具体的估计值但缺乏准确性。区间估计是使用的一个置信区间与置信度,表示总体参数有多少可能(置信度)会在该范围(置信区间)内,能够给出合理的范围和支持概率。

    经过抽样,获取—个样本之后,该如何才能确定置信区间与置信度呢?区间估计的基石就是根据中心极限定理。

    中心极限定理

    定理内容:如果总体(分布不重要)均值为μ,方差为 σ 2 \sigma^{2} σ2。我们进行随机抽样,样本容量为n,当n增大时,则样本均值逐渐趋近服从正态分布: X ˉ ∼ N ( μ , σ 2 / n ) \bar{X}\sim N\left(\mu, \sigma^{2} / n\right) XˉN(μ,σ2/n)

    该定理说明了总体与样本之间,在分布上的联系。该定理说明在抽样的样本容量n足够大时,进行多次抽样.则每次抽样会得到—个均值,这些均值会围绕在总体均值左右,呈正态分布。均值等于总体的均值,标准差等于总体标准差 σ \sigma σ除以 n \sqrt{n} n

    程序模拟

    下面模拟总体的均值为30,标准差为80,抽样的样本容量n为64,看看1000次抽样的样本均值是否构成均值为30,标准差为10的正态分布:

    data = np.random.normal(30, 80, 100000)
    mean_arr = np.zeros(1000)
    for i in range(1000):
        mean_arr[i] = np.random.choice(data, size=64, replace=False).mean()
    print("均值:", np.mean(mean_arr))
    print("标准差:", np.std(mean_arr), 80/np.sqrt(64))
    print("偏度:", pd.Series(mean_arr).skew())
    print("峰度:", pd.Series(mean_arr).kurt())
    sns.distplot(mean_arr)
    
    均值: 29.98515540795136
    标准差: 10.387123594380887 10.0
    偏度: -0.0499634202251343
    峰度: 0.1875444656831493
    

    从上述结果可以看到,样本的均值和标准差接近于理论值。

    正态分布的特性


    在正态分布中,数据的分布比例如下:

    • 以均值为中心,在1倍标准差内 ( x ˉ − σ , x ˉ + σ ) (\bar{x}-\sigma, \bar{x}+\sigma) (xˉσ,xˉ+σ),包含约68%的样本数据。
    • 以均值为中心,在2倍标准差内 ( x ˉ − 2 σ , x ˉ + 2 σ ) (\bar{x}-2\sigma, \bar{x}+2\sigma) (xˉ2σ,xˉ+2σ),包含约95%的样本数据。
    • 以均值为中心,在3倍标准差内 ( x ˉ − 3 σ , x ˉ + 3 σ ) (\bar{x}-3\sigma, \bar{x}+3\sigma) (xˉ3σ,xˉ+3σ),包含约99.7%的样本数据。

    可以用程序模拟一下:

    scale = 50
    x = np.random.normal(0, scale, size=10000000)
    for times in np.arange(1, 4):
        y = x[(x > -times * scale) & (x < times * scale)]
        print(f"{times}倍标准差:{len(y)/len(x):.1%}")
    
    1倍标准差:68.3%
    2倍标准差:95.4%
    3倍标准差:99.7%
    

    二分搜索查找当正态分布覆盖99%样本数据时,大概是多少倍标准差:

    import numpy as np
    scale = 1
    x = np.random.normal(0, scale, size=100000000)
    confidenceLevel = 99
    arr = np.arange(2, 3, 0.00001)
    iterations = 0
    
    low, high = 0, len(arr) - 1
    while low <= high:
        mid = (high + low) >> 1
        times = arr[mid]
        rate = len(x[(x > -times * scale) & (x < times * scale)]) * 100 / len(x)
        if rate >= confidenceLevel:
            high = mid - 1
        else:
            low = mid + 1
        iterations += 1
    result = round(arr[low], 4)
    print(result, "迭代次数:", iterations)
    
    2.5761 迭代次数: 17
    

    可以看到标准差大概是2.58倍时,正态分布覆盖99%样本数据。

    可以通过scipy获取准确值:

    from scipy.stats import norm
    
    def calcTimes(confidenceLevel):
        alpha = 1 - confidenceLevel
        return norm.ppf(1 - alpha / 2)
    
    calcTimes(0.99)
    

    结果:

    2.5758293035489004
    

    执行calcTimes(0.95)的结果是1.959963984540054,说明1.96倍标准差能覆盖95%的样本数据。

    计算在正态分布情况下,指定倍数的标准差能覆盖多大比例的样本数据可以使用以下命令:

    from scipy.stats import norm
    # norm.cdf(x=?)计算正态分布概率(面积):P(X<x) 
    
    def calcArea(times):
        return (norm.cdf(x=times) - norm.cdf(x=-times))*100
    
    calcArea(2.58)
    

    结果:

    99.01199684844586
    

    置信度与置信区间

    根据中心极限定理,如果多次抽样(总体均值 μ \mu μ,方差为 σ 2 \sigma^2 σ2),则样本均值( x ˉ \bar{x} xˉ)构成正态分布,满足 X ˉ ∼ N ( μ , σ 2 / n ) \bar{X}\sim N\left(\mu, \sigma^{2}/n\right) XˉN(μ,σ2/n)。如果我们对总体进行一次抽样,则该样本的均值有95%的概率会在 ( μ − 2 σ , μ + 2 σ ) (\mu-2\sigma, \mu+2\sigma) (μ2σ,μ+2σ),仅有5%的概率会在 ( μ − 2 σ , μ + 2 σ ) (\mu-2\sigma, \mu+2\sigma) (μ2σ,μ+2σ)范围外。根据小概率事件(很小的概率在一次抽样中基本不会发生),如果抽样的样本均值在 ( μ − 2 σ , μ + 2 σ ) (\mu-2\sigma, \mu+2\sigma) (μ2σ,μ+2σ)之外,我们就可以认为,本次抽样来自总体的均值并非我们所期望的均值。

    通常,我们以2倍标准差作为判断依据,则以样本均值为中心,正负2倍标准差构成的区间,就是置信区间。而2倍标准差包含了95%的数据,因此此时置信度为95%。即我们有95%的信心认为,总体均值会在置信区间之内。

    下面,我们模拟进行一次抽样,看看实际的总体均值是否会在置信区间之内呢:

    mean = np.random.randint(-10000, 10000)  #总体均值
    std = 50  # 定义总体标准差
    n = 50  # 样本容量
    data = np.random.normal(loc=mean, scale=std, size=10000)
    sample = np.random.choice(data, size=n, replace=False)
    sample_mean = sample.mean()
    print("总体均值:", mean)
    print("一次抽样的样本均值:", sample_mean)
    plt.plot(mean, 0, marker="*", color="orange", ms=15, label="总体均值")
    plt.plot(sample_mean, 0, marker="o", color="r", label="样本均值")
    
    se = std / np.sqrt(n)
    min_ = sample_mean - 1.96 * se
    max_ = sample_mean + 1.96 * se
    print("置信区间(95%置信度)", (min_, max_))
    plt.hlines(0, xmin=min_, xmax=max_, colors="b", label="置信区间")
    plt.axvline(min_, ymin=0.4, ymax=0.6, color="r", ls="--", label="左边界")
    plt.axvline(max_, ymin=0.4, ymax=0.6, color="g", ls="--", label="右边界")
    plt.legend()
    
    总体均值: 8819
    一次抽样的样本均值: 8824.987475450054
    置信区间(95%置信度) (8811.128182538798, 8838.84676836131)
    

    还可以直接通过scipy计算:

    from scipy import stats
    stats.norm.interval(0.95, loc=sample.mean(), scale=std / np.sqrt(n))
    

    结果同样为(8811.128437206558, 8838.84651369355)

    实例

    经过大量长期统计,A公司商品日均生产量为50,标准差为15。公司领导对最近半个月(15天)的生产量进行突击检查,请问:

    • 如果最近半个月日均产量为45.是否可能存在消极变数?例如,机器老化.员工怠工等。
    • 如果最近半个月日均产量为59,是否可能存在积极改进?例如,提高生产效率,加大人力投入等。
    mean, std = 50, 15
    n = 15
    sigma = std / np.sqrt(n)
    start, end = stats.norm.interval(0.95, loc=mean, scale=sigma)
    print(f"样本均值有95%的概率在{start:.1f}-{end:.1f}范围内")
    
    样本均值有95%的概率在42.4-57.591范围内
    

    因此日均产量为45在合理范围内,日均产量为59很可能存在积极改进。

    总体标准差未知时的区间估计

    上述区间估计的方法,适用于已知总体标准差且样本量大于30的情况下。但正常情况下,我们对总体的标准差都是未知的,有时抽样样本量也会少于30。

    不过,进行多次抽样,样本的均值服从t分布,当每次抽样样本量n增大时(达到30以上),t分布将逐渐接近于正态分布。

    使用 t 分布的好处是不需要知道总体的标准差,可以直接根据样本的标准差进行计算。

    于是我们可以根据鸢尾花花瓣长度的样本数据,去估算在95%置信度下全球鸢尾花花瓣长度的均值。

    首先导包并加载数据:

    import pandas as pd
    from sklearn.datasets import load_iris
    from scipy import stats
    
    iris = load_iris()
    data = pd.DataFrame(
        iris.data,
        columns=["sepal_length", "sepal_width", "petal_length", "petal_width"])
    

    计算:

    confidenceLevel = 0.95
    mean = data.petal_length.mean()
    start, end = stats.t.interval(alpha=confidenceLevel, df=len(data) - 1, loc=mean, scale=stats.sem(data.petal_length))
    print(f"样本均值是{mean:.2f},在{confidenceLevel:.0%}置信度下,全球鸢尾花花瓣长度的均值在{start:.2f}-{end:.2f}cm的范围")
    

    结果:样本均值是3.76,在95%置信度下,全球鸢尾花花瓣长度的均值在3.47-4.04cm的范围

    假设检验

    示例

    某车间用一台包装机包装葡萄糖,袋装糖的净重是—个随机变量.它服从正态分布。当机器正常时,其均值为0.5kg,标准差为0.015kg。某日开工后为检验包装机是否正常,随机地抽取它所包装的糖9袋,称得净重为(kg)

    0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512

    :机器是否正常?

    按照前面区间估计的做法,我们可以根据总体的特征计算出样本均值的置信区间,然后判断当前样本的均值是否存在于这个范围之内:

    import numpy as np
    from scipy import stats
    
    # 总体的均值和标准差
    mean, std = 0.5, 0.015
    # 样本
    a = np.array([0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512])
    left, right = stats.norm.interval(0.95, loc=mean, scale=std / np.sqrt(len(a)))
    print(f"95%置信度下,样本均值的置信区间:({left:0.3f},{right:0.3f})")
    print("样本均值:", a.mean())
    

    结果:

    95%置信度下,样本均值的置信区间:(0.490,0.510)
    样本均值: 0.5112222222222224
    

    显然样本均值不在根据总体估算的置信区间之内,所以在95%置信度下,机器是不正常的。

    另一种方案就是根据样本去估计总体,由于样本量为9小于30,所以我们使用t分布来估计总体的均值:

    import numpy as np
    from scipy import stats
    
    # 总体的均值和标准差
    mean, std = 0.5, 0.015
    # 样本
    a = np.array([0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512])
    left, right = stats.t.interval(0.95, df=len(a) - 1, loc=a.mean(), scale=stats.sem(a))
    print(f"95%置信度下,总体均值的置信区间:({left:0.3f},{right:0.3f})")
    print("总体实际均值:", mean)
    

    结果:

    95%置信度下,总体均值的置信区间:(0.504,0.518)
    总体实际均值: 0.5
    

    显然95%置信度下总体实际均值也不在总体均值的置信区间之内,所以我们可以认为机器是不正常的。

    假设检验的概念

    假设检验的思路下,则是先给出一个原假设,然后根据反证法看是否出现小概率事件,如果没有出现小概率事件的情况下则接受原假设,若出现小概率事件情况下则拒绝原假设接受备择假设。

    对于上面这个问题的思路就是,先作原假设:机器是正常的,备择假设:机器是不正常的。结果样本均值不在置信区间内,出现了小概率事件,所以拒绝原假设接受备择假设:机器是不正常的。

    假设检验,也称为显著性检验,是通过样本的统计量,来判断与总体参数之间的差异是否显著。原假设也称为零假设或 H 0 H_0 H0,备则假设也称为对立假设或 H 1 H_1 H1

    根据样本信息进行分析判断,是选择接受(维持)原假设还是拒绝原假设(接受备择假设)。

    在假设检验中,我们认为,小概率事件在—次试验中是不会发生的。—旦小慨率事件发生,则我们就有理由拒绝原假设。

    假设检验遵循"疑罪从无"的原则,接受原假设,并不代表原假设—定是正确的,只是没有充分的证据,去证明原假设是错误的,因此,只能维持原假设。

    P-Value与显著性水平

    P-Value是一个概率值,表示支持原假设的概率。在原假设为等值假设时,P-Value也表示样本统计量与总体参数无差异的概率。

    显著性水平则是我们预先设定的—个阈值,使用 α \alpha α表示,通常 α \alpha α的取值为0.05(1-a为置信度)。当P-Value的值大于 α \alpha α时,支持原假设,否则,拒绝原假设。

    假设检验的步骤如下:

    1. 设置原假设与备择假设。
    2. 设置显著性水平 α \alpha α(通常选择 α \alpha α= 0.05)。
    3. 根据问题选择假设检验的方式。
    4. 计算统计量,并通过统计量获取 P P P值。
    5. 根据 P P P值与 α \alpha α值,决定接受原假设还是备择假设。

    Z检验与t检验

    Z检验用来判断样本均值是否与总体均值具有显著性差异。Z检验要求总体呈正态分布、总体方差已知,否则无法使用Z检验,另外要求样本容量最好大于30,否则建议使用t检验。

    Z统计量的计算方式如下:

    Z = x ˉ − μ 0 S x ˉ = x ˉ − μ 0 σ / n \Huge{Z=\frac{\bar{x}-\mu_{0}}{S_{\bar{x}}}=\frac{\bar{x}-\mu_{0}}{\sigma / \sqrt{n}}} Z=Sxˉxˉμ0=σ/n xˉμ0

    • x ˉ \bar{x} xˉ:样本均值。
    • μ 0 \mu_{0} μ0:待检验的总体均值(假设的总体均值)。
    • S x ˉ S_{\bar{x}} Sxˉ:样本均值分布的标准差(标准误差)。
    • σ \sigma σ:总体的标准差。
    • n n n:样本容量。

    通过假设检验来求解前面的示例:

    1. 设置原假设与备择假设。
      • 原假设: μ = μ 0 = 0.5 k g \mu=\mu_0 = 0.5kg μ=μ0=0.5kg(机器运作正常)
      • 备择假设: μ ≠ μ 0 ≠ 0.5 k g \mu \neq \mu_0 \neq 0.5 kg μ=μ0=0.5kg(机器运作不正常)
    2. 设置显著性水平。
      • 设置 α \alpha α= 0.05
    3. 根据问题选择假设检验的方式。
      • 袋装糖的净重呈正态分布,总体标准差已知,选择 Z Z Z检验。
    4. 计算统计量,并通过统计量获取 P P P值。
      • 根据选择的假设检验,进行计算。
    import numpy as np
    from scipy import stats
    
    # 总体的均值和标准差
    mean, std = 0.5, 0.015
    # 样本
    a = np.array([0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512])
    # 样本均值
    sample_mean = a.mean()
    sigma = std / np.sqrt(len(a))
    
    Z = (sample_mean - mean) / sigma
    print("统计量Z:", Z)
    P = 2 * stats.norm.sf(abs(Z))
    print("P-Value值:", P)
    

    结果:

    统计量Z: 2.244444444444471
    P-Value值: 0.02480381963225589
    
    1. 根据P值与α值,决定接受原假设还是备择假设。

      • 由结果可知, P P P值即支持原假设的概率小于显著性水平α的值0.05,故我们拒绝原假设。接受备择假设,即我们认为机器运作是不正常的。

    这就是假设检验的步骤。

    t检验则适用于总体呈正态分布且方差未知的情况。

    随着样本容量的增大(样本量达到30以上时),t分布逐渐接近于正态分布。此时,t检验也就近似应用于Z检验。

    t统计量的计算方式如下:

    t = x ˉ − μ 0 S x ˉ = x ˉ − μ 0 S / n \Huge{t=\frac{\bar{x}-\mu_{0}}{S_{\bar{x}}}=\frac{\bar{x}-\mu_{0}}{S / \sqrt{n}}} t=Sxˉxˉμ0=S/n xˉμ0

    • x ˉ \bar{x} xˉ:样本均值。
    • μ 0 \mu_{0} μ0:待检验的总体均值(假设的总体均值)。
    • S x ˉ S_{\bar{x}} Sxˉ:样本均值的标准差(标准误差)。
    • S S S:样本的标准差。
    • n n n:样本容量。

    鸢尾花花瓣长度的均值为3.5cm,根据假设检验的步骤判断是否正确:

    1. 设置原假设与备择假设。
      • 原假设:总体均值 μ = μ 0 = 3.5 c m \mu=\mu_0 = 3.5cm μ=μ0=3.5cm(该说法正确)
      • 备择假设:总体均值 μ = μ 0 ≠ 3.5 c m \mu = \mu_0 \neq 3.5cm μ=μ0=3.5cm(该说法不正确)
    2. 设置显著性水平。
      • 设置 α \alpha α= 0.05
    3. 根据问题选择假设检验的方式。
      • 鸢尾花呈正态分布,总体标准差未知,选择 t t t检验。
    4. 计算统计量,并通过统计量获取 P P P值。
    import pandas as pd
    from sklearn.datasets import load_iris
    import numpy as np
    
    iris = load_iris()
    data = pd.DataFrame(
        iris.data,
        columns=["sepal_length", "sepal_width", "petal_length", "petal_width"])
    mean = data["petal_length"].mean()
    std = data["petal_length"].std()
    print("样本均值:", mean, "样本标准差:", std)
    
    t = (mean - 3.5) / (std / np.sqrt(len(data)))
    print("t统计量:", t)
    
    # 计算p值
    # df:自由度,即变量可以自由取值的个数
    P = 2 * stats.t.sf(abs(t), df=len(data) - 1)
    print("P-Value值:", P)
    
    # 还可以通过scipy提供的相关方法来进行t检验的计算,无需自行计算。
    t, p_twoTail = stats.ttest_1samp(data['petal_length'], 3.5)
    print(f"t统计量:{t}, P-Value值:{p_twoTail}")
    
    样本均值: 3.7586666666666693 样本标准差: 1.7644204199522617
    t统计量: 1.7954942587239626
    P-Value值: 0.07460161706985045
    

    还可以直接通过scipy提供的相关方法来进行t检验的计算:

    t, p_twoTail = stats.ttest_1samp(data['petal_length'], 3.5)
    print(f"t统计量:{t}, P-Value值:{p_twoTail}")
    

    结果:

    t统计量:1.79549425872394, P-Value值:0.07460161706985409
    

    P P P值即支持原假设的概率大于显著性水平α的值0.05,故我们没有充足的理由拒绝原假设,则接受原假设,即我们认为鸢尾花花瓣长度的均值为3.5cm。

    双边检验与单边检验

    • 原假设: μ = μ 0 = 3.5 c m \mu=\mu_0 = 3.5cm μ=μ0=3.5cm
    • 备择假设: μ ≠ μ 0 ≠ 3.5 c m \mu \neq \mu_0 \neq 3.5cm μ=μ0=3.5cm

    对于上面的等值假设,检验的是总体均值( μ \mu μ)与假设均值( μ 0 \mu_0 μ0)是否相等,当 μ ≠ μ 0 \mu≠\mu_0 μ=μ0时.总体均值可以大于假设均值,也可以小于假设均值,像这样的检验称为双边假设检验(双边检验)。非等值假设时,总体参数大于或者小于假设参数值.像这样的检验称为单边假设检验(单边检验)。例如,我们仅关注技术改进后是否比以前有所提高,而不是关注是否与以前不同。

    以均值为例,设总体均值为 μ \mu μ,假设均值为 μ 0 \mu_0 μ0

    如果设立:

    • 原假设: μ ≤ μ 0 \mu \leq \mu_{0} μμ0
    • 备择假设: μ > μ 0 \mu > \mu_{0} μ>μ0
      则称这样的假设为右边假设检验(右边检验)

    如果设立:

    • 原假设: μ ≥ μ 0 \mu \geq \mu_{0} μμ0
    • 备择假设: μ < μ 0 \mu < \mu_{0} μ<μ0
      则称这样的假设为左边假设检验(左边检验)

    说明:在单边检验中,原假设为维持现状,备则假设为改变现状。

    我们可以根据计算P值的方式来记忆是左边假设检验还是右边假设检验,

    例如 μ ≤ μ 0 \mu \leq \mu_{0} μμ0等价于 μ − μ 0 ≤ 0 \mu - \mu_{0} \leq 0 μμ00,那么应该使统计量越小P值越大,就应该计算统计量右边围成的面积。

    μ ≥ μ 0 \mu \geq \mu_{0} μμ0等价于 μ − μ 0 ≥ 0 \mu - \mu_{0} \geq 0 μμ00则应该计算左边围成的面积。

    所以对于单边检验,左边和右边是指应该计算统计量左边还是右边围成的面积。

    而对于等值假设,即双边检验,应该使统计量越接近0,P值越大,应该计算统计量对应左右两侧位置与两边围成的面积。

    例如,判断鸢尾花的平均花瓣长度等于3.5cm的说法是否正确,计算出统计量为1.8后,再计算左右两边围成的面积即为P值:

    右边假设检验

    判断鸢尾花的平均花瓣长度不超过3.5cm的说法是否正确

    1. 设置原假设与备择假设。
      • 原假设: μ ≤ μ 0 \mu \leq \mu_0 μμ0
      • 备择假设: μ > μ 0 \mu > \mu_0 μ>μ0
    2. 设置显著性水平。
      • 设置 α \alpha α= 0.05
    3. 根据问题选择假设检验的方式。
      • 鸢尾花呈正态分布,总体标准差未知,选择 t t t检验。
    4. 计算统计量,并通过统计量获取 P P P值。

    计算下方红色部分(右边)的面积:

    print("t统计量:", t)
    P = stats.t.sf(t, df=len(data) - 1)
    print("P-Value值:", P)
    
    t统计量: 1.79549425872394
    P-Value值: 0.037300808534927045
    
    1. 根据P值与α值,决定接受原假设还是备择假设。

      • P < α P<\alpha P<α,因此拒绝原假设,我们认为鸢尾花的平均花瓣长度超过3.5cm。

    左边假设检验

    假如判断鸢尾花的平均花瓣长度不小于3.5cm的说法是否正确

    1. 设置原假设与备择假设。
      • 原假设: μ ≥ μ 0 \mu \geq \mu_0 μμ0
      • 备择假设: μ < μ 0 \mu < \mu_0 μ<μ0
    2. 设置显著性水平。
      • 设置 α \alpha α= 0.05
    3. 根据问题选择假设检验的方式。
      • 鸢尾花呈正态分布,总体标准差未知,选择 t t t检验。
    4. 计算统计量,并通过统计量获取 P P P值。

    计算下方红色部分(左边)的面积:

    print(t)
    P = stats.t.cdf(t, df=len(data) - 1)
    print("P-Value值:", P)
    
    1.79549425872394
    P-Value值: 0.962699191465073
    
    1. 根据P值与𝛼值,决定接受原假设还是备择假设。

      • P > α P>\alpha P>α,因此维持原假设,我们认为鸢尾花的平均花瓣确实长度不小于3.5cm

    示例

    某公司要求,平均日投诉量均值不得超过1%。现检查—个部门的服务情况。在该部门维护的—个500人客户群中,近7天的投诉量分别为5, 6, 8, 4, 4, 7, 0。请问该部门是否达标?

    原假设平均日投诉量均值小于等于1%,是个右边假设检验,总体标准差未知,样本量小于30,选择 t t t检验:

    data = np.array([5, 6, 8, 4, 4, 7, 0]) / 500 * 100
    print(data)
    # 假设 平均日投诉量 <=1%
    mean = data.mean()
    std = data.std()
    print("样本均值:", mean, "样本标准差:", std)
    t = (mean - 1) / (std / np.sqrt(len(data)))
    print("t统计量:", t)
    P = stats.t.sf(t, df=len(data) - 1)
    print("P-Value值:", P)
    
    [1.  1.2 1.6 0.8 0.8 1.4 0. ]
    样本均值: 0.9714285714285715 样本标准差: 0.4831867007225075
    t统计量: -0.1564465546936854
    P-Value值: 0.5595938210714403
    

    支持原假设的概率超过显著性水平,故接受原假设,即平均日投诉量均值没有超过1%,该部门达标。

    展开全文
  • python 描述统计The field of statistics is often misunderstood, but it plays an essential role in our everyday lives. Statistics, done correctly, allows us to extract knowledge from the vague, ...
  • 描述统计部分(一)----统计

    千次阅读 2016-11-25 14:23:53
    描述统计部分(一)—-统计量标签(空格分隔): 概率论与数理统计1、期望E(X)E(X)又叫均值、加权算术平均值,其计算公式为:E(X)=∑ni=1xin=∑ji=1xi⋅ki∑ji=1ki=∑i=1∞xi⋅pi=∫∞−∞x⋅f(x)dx=∑i=1∞g(yi)...
  • 关于Python的元组类型,以下选项中描述错误的是:(?)使用弯曲正应力公式必须满足的条件有()。A:产生纯弯曲的梁B:定义惯性矩I所依托的轴与弯矩M矢量的方向平行C:荷载作用面同时又是梁的纵向对称面的梁D:实体型截面梁E:...
  • 下面哪个不是

    千次阅读 2020-12-08 14:10:49
    【单选题】在下面的同义词辨析中,对 “恭”和“敬”两词的词义差异表述完全正确的是( )【单选题】다음을 읽고 빈칸에 알맞은 것을 고르십시오. 이번 주말에 수영하( ) 갑시다.【简答题】结合例子陈述古今词义演变的...
  • Simple regression 属于一元线性回归模型: y = intercept + slope * x or y = slope * x , 一元线性回归是分析只有一个自变量(自变量x和因变量y)线性相关关系的方法 建立模型 1、选取一元线性回归...
  • 数据分析师一定要掌握的基础——描述统计分析

    千次阅读 多人点赞 2020-03-31 23:20:54
    以下博客内容讲解了描述统计分析的所有知识点,以及利用鸢尾花数据集的分析加强对各个统计量的理解。 数理统计基础-描述统计分析1、数理统计基础2、描述统计分析概述(1)概念(2)变量的类型3、统计量(1)...
  • [统计学教程] 第三章 描述统计

    千次阅读 2008-08-25 16:29:00
    导读: 第三章 描述统计 教学目标: 本章介绍对数据进行基本统计描述的有关方法,教学目标在于帮助学生理解各种常用的描述统计方法,并能够创造性地在实践中加以使用。学习本章需要大量结合案例进行操作,熟悉各种...
  • 一、简介 1.本篇博文是一篇关于线性回归的基本操作;...二、数据描述统计分析 1.导入数据 (1)打开StataIC软件,在软件的上栏目中找到下图圈出的图标,那个图标就是导入数据的入口 (2)点进去之后,StataIC
  • 统计学原理小测试

    千次阅读 2020-03-26 21:56:44
    1下列不属于描述统计问题的是() A、根据样本信息对总体进行推断 B、了解数据分布的特征 C、分析感兴趣的总体特征 D、利用图、表或其他数据汇总工具分析数据 2指出下面的变量哪一个属于顺序变量 A、年龄 B、工资 C、...
  • 问题描述:统计学题,多选1、下列变量中属于离散变量的有( )A.机床台数 B.学生人数 C.耕地面积D.粮食产量 E.汽车产量2、在全国人口普查中( )A、全国人口总数是统计总体B、男性是品质标志表现C、人的年龄是变量D、每一...
  • python阶段学习经典习题79题

    千次阅读 2020-06-30 09:42:38
    下列不属于文件编码格式的是 A. ASCII码 B. Unicode C. UTF-8 D. 十进制编码 D 下列关于round()函数的表述,错误的是 A. round()函数只有一个参数时,返回一个整数,而且是最靠近的整数 B. 在Python版本2和3中...
  • 以下关于函数说法错误的是

    千次阅读 2020-12-09 23:40:37
    【单选题】S 和 T 是两个集合,哪个选项对 S^T 的描述是正确的?【单选题】关于 turtle 库的画笔控制函数,哪个选项的描述是错误的?【 】【单选题】哪个选项对 turtle.done() 的描述是正确的?【 】【单选题】下列程序的...
  • 样本平衡问题分析与部分解决办法

    万次阅读 多人点赞 2019-01-20 14:11:03
    最近工作中在处理文本分类问题遇到了分类均衡的问题,主要还是样本太少还同时非常的均衡正负样本1:10(类别平衡比例超过4:1,就会造成偏移),就使用了SMOTE方法。 注意:在进行数据增广的时候一定要将测试集...
  • 2.1python安装1、【单选题】以下属于 Python 机器学习第三方库的是:A、JiebaB、SnowNLPC、LosoD、sklearn2、【单选题】以下属于 Python Web 开发框架第三方库的是:A、Panda3DB、cocos2dC、PygameD、Flask3、【单选题...
  • 数据统计分析常用指标

    千次阅读 2020-05-13 14:12:28
    下面是数据统计分析常用的指标或术语:    1.平均数  一般指算术平均数。算术平均数是指全部数据累加除以数据个数。它是非常重要的基础性指标。  几何平均数:适用于对比率数据的平均,并主要用于计算数据平均...
  • 2021-01-05

    千次阅读 多人点赞 2021-01-05 16:38:55
    1、 大数据具有哪些特点?...1、 下列哪个不属于Hadoop的特性?A (A) 成本高 (B) 高可靠性 (C) 高容错性 (D) 运行在Linux平台上 2、 Hadoop框架中最核心的设计是什么?A (A) 为海量数据提供
  • 描述分析(描述统计分析)就是用来概括、描述数据的整体状况以及数据各特征的统计方法。 描述的内容分为: 集中趋势:平均数,众数、中位数、四分位数 离散程度:方差、标准差、极差、变异系数、四分位差 分布...
  • 下面的这些数学问题,在深度学习都得到了应用: 数值分析: 数值分析(numerical analysis),为数学的一个分支,是研究分析用计算机求解数学计算问题的数值计算的方法及其理论的学科。它以数字计算机求解数学问题的...
  • 2.对应上述数据的运行结果:import matplotlib.pyplot as pltwith open('test.txt') as fob:lines=fob.readlines()#去除掉每行最后一个换行符,就可以正确统计了,我也真知道是为什么for i in range(len(lines)):...
  • 自然语言处理中的分词问题总结

    千次阅读 2018-10-29 13:47:46
    众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。本文 转载自明略研究院...
  • 如何利用Python进行文本词频统计

    千次阅读 2020-12-03 15:23:37
    问题描述Python在自然语言处理这个方面,有其天然的优势:简单,快捷。所以我们经常会遇到利用Python从一篇文档中,统计文本词频的问题。以《三国演义》这部名著为例,文中哪些人物的出场次数最多呢?让我们用Python...
  • python数据分析课后习题

    千次阅读 2021-11-15 19:52:46
    目录 第一章: ...5.(单选题)下列不属于数据分析应用场景的是(D) 6.(单选题)下列不属于Python优势的是(C) 7.(单选题)Jupyter Notebook不具备的功能是(B) 8.(多选题)【多选】下列关于JupyterNote...
  • 2020网络安全NISP一级(模拟题五)

    千次阅读 2020-10-25 15:40:23
    目前,我国对网络安全形势高度重视,以下关于网络安全形势的描述中,错误的是( ) A.我国的网络安全态势非常好,面临任何攻击的威胁;B.高级持续性威胁常态化,我国面临的攻击十分严重;C.大量联网智能设备遭受...
  • 【多元统计分析】课程总结

    千次阅读 2020-11-11 17:28:38
    参考文献:《多元统计分析》高慧璇 编著 ,北京大学出版社 刚考完,做个总结,意在搭个学习《多元统计分析》的简单架子,方便日后复习,虽然只学了一点皮毛,但是架不住老年人的脑子(“好记性,不如烂blog”)。...
  • 人工智能存在的问题是什么(一)

    千次阅读 2019-01-29 10:41:40
    人工智能的出现方便了我们大众的生活,自从出现了人工智能以后,人工智能得到了大家的关注以及各个...现阶段,人工智能存在着十个问题下面我们就给大家详细的介绍一下这些问题。 首先给大家介绍一下人工智能存在...
  • 网络安全竞赛习题

    千次阅读 2020-07-22 12:34:37
    网络竞赛习题 我国的( )主要规定了关于数据电文...人员管理是信息安全管理体系的重要组成部分,下列关于人员管理的描述中错误的是( ) A.人员管理应该全面提升管理人员的业务素质、职业道德、思想素质等。;B.网络

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,797
精华内容 35,518
关键字:

下面不属于描述统计问题的是