SciPy Stats SciPy优化 SciPy CSGraph 所有的统计函数都位于子包 scipy.stats中, 并且可以使用 info(stats) 函数获得这些函数的完整列表。可用的随机变量列表也可以从stats子包的 docstring中 获得。该模块包含大量的概率分布以及不断增长的统计函数库。 每个单变量分布都有它自己的子类,如下表所述 - 序号 类和说明 1 rv_continuous 用于子类化的通用连续随机变量类 2 rv_discrete 用于子类化的通用离散随机变量类 3 rv_histogram 生成由直方图给出的分布 正态连续随机变量 随机变量X可以取任何值的概率分布是连续的随机变量。位置(loc)关键字指定平均值。比例(比例)关键字指定标准偏差。 作为 rv_continuous 类的一个实例, 规范 对象从中继承了一系列泛型方法,并使用特定于此特定分布的细节完成它们。 要计算多个点的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.9986501 , 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.25, 0.5 , 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.25, 0.5 , 0.75, 1. ]) 描述性统计 诸如Min,Max,Mean和Variance等基本统计数据将NumPy数组作为输入并返回相应的结果。下表描述了 scipy.stats包 中的一些基本统计函数。 序号 功能说明 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.0, 6.666666666666667) T-测试 让我们了解T检验在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中 使用不同的值并测试相同的值。 SciPy优化 SciPy CSGraph