SciPy - 统计数据

所有统计函数都位于子包 scipy.stats 中,可以使用 info(stats)函数获得这些函数的相当完整的列表.还可以从stats子包的 docstring 获取可用随机变量列表.该模块包含大量的概率分布以及不断增长的统计函数库.

每个单变量分布都有自己的子类,如下表所示 :

锶.不.Class&说明
1

rv_continuous

用于子类化的通用连续随机变量类

2

rv_discrete

一般的离散随机变量类用于子类化

3

rv_histogram

生成直方图给出的分布

正常连续随机变量

随机变量X可以取任何值的概率分布是连续随机变量. location(loc)关键字指定平均值. scale(scale)关键字指定标准差.

作为 rv_continuous 类的一个实例, norm 对象继承了它通用方法的集合,并使用特定于此特定分布的详细信息完成它们.

要在多个点计算CDF,我们可以传递列表或NumPy数组.让我们考虑以下示例.

from scipy.stats import norm
import numpy as np
print norm.cdf(np.array([1,-1., 0, 1, 3, 4, -2, 6]))

上述程序将生成以下输出.

 
 array([0.84134475,0.15865525,0.5,0.84134475,0.996501,
 0.99996833,0.02275013,1.])

要查找分布的中位数,我们可以使用百分点函数(PPF),它是CDF的反函数.让我们通过使用以下示例来理解.

from scipy.stats import norm
print norm.ppf(0.5)

上述程序将生成以下输出.

 
 0.0

要生成一系列随机变量,我们应该使用size关键字参数,如下例所示.

from scipy.stats import norm
print norm.rvs(size = 5)

上述程序将生成以下输出.

 
 array([0.20929928,-1.91049255,0.41264672,-0.7135557,-0.03833048])

上述输出不可重复.要生成相同的随机数,请使用种子函数.

均匀分布

可以使用统一函数生成均匀分布.让我们考虑以下示例.

 
 from scipy.stats import uniform 
 print uniform.cdf([0,1,2, 3,4,5,loc = 1,scale = 4)

上述程序将生成以下输出.

 
 array([0,0,0,0.25,0.75,1.])

建立离散分布

让我们生成一个随机样本,并将观察到的频率与概率进行比较.

二项分布

作为 rv_discrete类的一个实例, binom对象从它继承了一组泛型方法,并使用特定于此特定分布的详细信息完成它们.让我们考虑以下示例.

 
 from scipy.stats import uniform 
 print uniform.cdf([0,1,2, 3,4,5,loc = 1,scale = 4)

上述程序将生成以下输出.

 
 array([0,0,0,0.25,0.75,1.])

描述性统计

Min,Max,Mean和Variance等基本统计数据将NumPy数组作为输入并返回相应的结果. scipy.stats包中提供的一些基本统计函数如下表所示.

Sr.不.功能&说明
1

describe()

计算传递数组的几个描述性统计信息

2

gmean()

计算几何平均数沿着指定的轴

3

hmean()

计算沿指定轴的调和平均值

4

kurtosis()

计算峰度

5

mode()

返回模态值

6

skew()

测试数据的偏斜

7

f_oneway()

执行单因素方差分析

8

iqr()

计算沿指定轴的数据的四分位数范围

9

zscore()

计算样本中每个值的z分数,相对于样本均值和标准差

10

sem()

计算输入数组中值的平均值(或标准测量误差)的标准误差

其中一些函数在 scipy.stats.mstats 中有类似的版本,它们适用于屏蔽数组.让我们通过下面的例子来理解这一点.

from scipy import stats
import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9])
print x.max(),x.min(),x.mean(),x.var()

上述程序将生成以下输出.

 
(9 ,1,5,5,66666666666666667)

T-test

让我们了解T-test在SciPy中的用途.

ttest_1samp

计算一组分数均值的T检验.这是零假设的双侧检验,即独立观察样本'a'的预期值(平均值)等于给定的总体平均值, popmean .让我们考虑以下示例.

from scipy import stats
rvs = stats.norm.rvs(loc = 5, scale = 10, size = (50,2))
print stats.ttest_1samp(rvs,5.0)

上述程序将生成以下输出.

 
 Ttest_1sampResult(statistic = array([ -  1.40184894,2.70158009]),
 pvalue = array([0.16726344,0.00945234]))

比较两个样本

在以下示例中,有两个样本,可以来自相同或者来自不同的分布,我们想测试这些样本是否具有相同的统计特性.

ttest_ind : 计算两个独立分数样本均值的T检验.这是零假设的双侧检验,即两个独立样本具有相同的平均(预期)值.该测试假设群体默认具有相同的方差.

如果我们观察来自相同或不同群体的两个独立样本,我们可以使用该测试.让我们考虑以下示例.

from scipy import stats
rvs1 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
rvs2 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
print stats.ttest_ind(rvs1,rvs2)

上述程序将生成以下输出.

 
 Ttest_indResult(statistic = -0.67406312233650278,pvalue = 0.50042727502272966)

您可以使用相同长度的新数组测试相同的数字,但具有不同的均值.在 loc 中使用不同的值并对其进行测试.