- SciPy 教程
- SciPy - 首页
- SciPy - 简介
- SciPy - 环境设置
- SciPy - 基本功能
- SciPy - 聚类
- SciPy - 常量
- SciPy - FFTpack
- SciPy - Integrate (积分)
- SciPy - Interpolate (插值)
- SciPy - 输入和输出
- SciPy - 线性代数 (Linalg)
- SciPy - 图像处理 (Ndimage)
- SciPy - 优化 (Optimize)
- SciPy - 统计
- SciPy - 图论 (CSGraph)
- SciPy - 空间数据处理 (Spatial)
- SciPy - 正交距离回归 (ODR)
- SciPy - 特殊函数包 (Special Package)
- SciPy 有用资源
- SciPy - 参考
- SciPy - 快速指南
- SciPy - 有用资源
- SciPy - 讨论
SciPy - 统计
所有统计函数都位于子包scipy.stats中,可以使用info(stats)函数获得这些函数的相当完整的列表。还可以从stats子包的文档字符串 (docstring)中获得可用随机变量的列表。此模块包含大量概率分布以及不断增长的统计函数库。
每个单变量分布都有其自己的子类,如下表所述:
序号 | 类和描述 |
---|---|
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.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])
上述输出不可重现。要生成相同的随机数,请使用seed函数。
均匀分布
可以使用uniform函数生成均匀分布。让我们考虑以下示例。
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. ])
描述性统计
诸如最小值、最大值、均值和方差之类的基本统计数据以NumPy数组作为输入,并返回相应的结果。scipy.stats包中提供的一些基本统计函数在以下表格中进行了描述。
序号 | 函数和描述 |
---|---|
1 | describe() 计算传递数组的几个描述性统计数据 |
2 | gmean() 沿指定轴计算几何平均值 |
3 | hmean() 沿指定轴计算调和平均值 |
4 | kurtosis() 计算峰度 |
5 | mode() 返回众数 |
6 | skew() 检验数据的偏度 |
7 | f_oneway() 执行单因素方差分析 (ANOVA) |
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中使用不同的值并测试相同的内容。