SciPy 教程-SciPy 统计
scipy.stats 包含大量统计学和概率分布函数。可以通过 info(stats) 获取统计函数的列表。还可以从统计子包的 docstring 中获取随机变量的列表。
序号 | 函数 | 描述 |
---|---|---|
1. | rv_continuos | 这是一个基类,用于构造连续随机变量的特定分布类和实例。 |
2. | rv_discrete | 这是一个基类,用于构造离散随机变量的特定分布类和实例。 |
3. | rv_histogram | 可以继承自 rv_continuous 类。它生成由直方图给出的分布。 |
正态连续随机变量
对于封装连续随机变量和离散随机变量,已经实现了两个一般分布类。这里我们将讨论连续随机变量:
from scipy.stats import norm
import numpy as np
print(norm.cdf(np.array([3,-1., 0, 1, 2, 4, -2, 5])))
输出:
[0.9986501 0.15865525 0.5 0.84134475 0.97724987 0.99996833
0.02275013 0.99999971]
在上述程序中,首先我们需要从 scipy.stats 中导入 norm 模块,然后我们将数据作为Numpy数组传递给cdf()函数。
要获得分布的中位数,我们可以使用 百分点函数(PPF),这是CDF的逆。
我们可以生成随机数序列;传递size参数是必要的。
from scipy.stats import norm
print(norm.rvs(size = 4))
输出:
[-0.42700905 1.0110461 0.05316053 -0.45002771]
每次运行程序时,输出可能会有所不同。我们可以使用 seed() 函数生成相同的随机数。
描述性统计
描述性统计描述了变量中观测值的数值。有各种统计量,如最小值、最大值和方差,它们将Numpy数组作为输入,并返回特定的结果。scipy.stats包提供的一些基本函数如下图所述。
序号 | 函数 | 描述 |
---|---|---|
1. | describe() | 计算输入数组的各种描述性统计。 |
2. | gmean() | 沿着指定的计算几何平均数。 |
3. | hmean() | 沿指定轴计算谐波平均数。 |
4. | kurtosis() | 计算峰度。 |
5. | mode() | 返回众数值。 |
6. | skew() | 测试数据的偏斜度 |
7. | zscore() | 计算样本中每个值的z得分,相对于样本均值和标准差。 |
考虑以下程序:
import scipy as sp
import numpy as np
from scipy.stats import norm
number_of_data = 100
random_data_set = sp.randn(number_of_data)
print(random_data_set.mean())
print(sp.median(random_data_set))
min_max = np.array([random_data_set.min(),random_data_set.max()])
print(min_max)
sp.stats.describe(random_data_set)
输出:
0.006283818005153084
-0.03008382588766136
[-2.1865825 2.47537921]
DescribeResult(nobs=100, minmax=(-2.1865824992721987, 2.475379209985273), mean=0.006283818005153084, variance=1.0933102537156147, skewness=0.027561719919920322, kurtosis=-0.6958272633471831)
T检验
T检验用于比较两个平均值(均值),并表明这些平均值是否相互不同。T检验也被描述为组间差异的显著性。
T得分
T得分是两组间差异与组内差异的比率。较小的T得分表明两组相对类似,较大的T得分则表明两组间的差异更大。
比较两个样本
给定两个样本,它们可以来自相同或不同的分布,我们想测试这些样本是否具有相同的统计属性。
from scipy import stats
rvs = stats.norm.rvs(loc = 6, scale = 10, size = (50,2))
print(stats.ttest_1samp(rvs,5.0))
输出:
Ttest_1sampResult(statistic=array([0.42271098, 1.1463823 ]), pvalue=array([0.67435547, 0.25720448]))
在上述输出中,p值是样本数据结果偶然发生的概率。P值从0%到100%不等。
SciPy线性回归
线性回归用于发现两个变量之间的关系。SciPy提供了linregress()函数来执行线性回归。语法如下:
scipy.stats.linregress(x,y=None)
参数:
x, y: 这两个参数应该是数组,并且具有相同的长度。
线性回归有两种类型。
- 简单回归
- 多变量回归
简单回归
简单线性回归是使用单一特征预测响应的方法。假设这两个变量是线性相关的,这意味着另一个变量可以准确预测一个变量。例如,使用摄氏度温度,可以准确预测华氏温度。
多变量回归
多元线性回归描述了一个连续因变量和两个或多个自变量之间的关系。
price(dependent variable) = m1*area + m2*bedrooms + m2*age(independent variable)
价格变量依赖于其他变量。