有关统计的函数在stats类中

(1)统计描述 describe函数

x = np.array([1,2,3,4,5,6,7,8,9,10])
print(stats.describe(x))
#输出很多量依次为:样本数、最大最小值、平均值、方差、偏度、峰度

这个函数的输出有很多,按顺序依次是:样本数、最大最小值、平均值、方差、偏度、峰度

(2)几何平均、中位数、众数、方差、标准差、协方差、相关系数

#几何平均数
print(stats.gmean(x))
#中位数
print(np.median(x))
#众数
print(stats.mode(x))
#方差
print(np.var(x))
#标准差
print(np.std(x))
#协方差
print(np.cov(x))
#相关系数
print(np.corrcoef(x))

(3)t检验

t检验主要有三个用法,1是用样本的检验总体的均值是不是用样本求出来的 2是检验两组数据是否有显著性差异 3是用来检验一组数据前后有没有显著差异,注意单独t检验样本要满足正态分布,数据间独立,如果是两组样本还要满足方差相同。

第一种用法:样本的检验总体的均值

np.random.seed(42)
data = np.random.normal(loc=5, scale=2, size=100)  
# 均值为5、scale是标准差的正态分布数据
# 进行单样本t检验,检验均值是否等于5
t_stat, p_value = stats.ttest_1samp(data, 5)#数据+检验均值
print(f"单样本t检验结果:")
print(f"t统计量 = {t_stat:.4f}")
print(f"p值 = {p_value:.4f}")
# 解释结果
if p_value > 0.05:
    print("不能拒绝原假设:样本均值可能等于5")
else:
    print("拒绝原假设:样本均值显著不等于5")

输出有两个值 t_stat和p_value,其中t_stat的绝对值反应样本均值与假设均值的差异,越大说明样本均值与假设均值有差异,越大说明内部数据波动越明显。p是置信度,一般要大于0.05才能认为是能接受原假设。

第二种用法:检验两组数据是否有显著差异

#双样本t检验
# 生成两组示例数据
np.random.seed(42)
group1 = np.random.normal(loc=5, scale=2, size=100)  # 第一组:均值为5
group2 = np.random.normal(loc=5.5, scale=2, size=100)  # 第二组:均值为5.5

t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"\n独立样本t检验结果:")
print(f"t统计量 = {t_stat:.4f}")
print(f"p值 = {p_value:.4f}")
# 解释结果
if p_value > 0.05:
    print("不能拒绝原假设:两组均值可能相等")
else:
    print("拒绝原假设:两组均值存在显著差异")

第三种用法:检验一组数据前后是否有显著差异

np.random.seed(42)
before = np.random.normal(loc=5, scale=2, size=100)  # 处理前
after = before + np.random.normal(loc=0.5, scale=1, size=100)  # 处理后
t_stat, p_value = stats.ttest_rel(before, after)
print(f"\n配对样本t检验结果:")
print(f"t统计量 = {t_stat:.4f}")
print(f"p值 = {p_value:.4f}")
# 解释结果
if p_value > 0.05:
    print("不能拒绝原假设:处理前后没有显著差异")
else:
    print("拒绝原假设:处理前后存在显著差异")

(4)K-S检验

KS检验能检验数据是否服从某种分布

检验数据是否服从正态分布

x = np.random.randn(1000)
print(stats.kstest(x,'norm'))
输出:KstestResult(statistic=0.019564968167023827, pvalue=0.8311892490632018,
           statistic_location=-1.2235290568288415, statistic_sign=-1)

statistic 反映的是经验分布函数与理论分布函数之间最大绝对值之差,越小越好

pvalue 反映的是显著水平,一般大于0.05能被接受原假设

statistic_location x为它时,statistic最大,

statistic_sign统计量符号-1表示理论函数高于经验函数 +1表示理论函数低于经验函数

检验数据是否符合均匀分布

print(stats.kstest(x,'uniform'))

输出同上

检验数据是否符合卡方分布

print(stats.kstest(x,stats.chi2(df=1).cdf))#检验是否属于卡方分布
#要制定卡方维度,这里指定为1 主要看第二个参数,如果大于0.05则通常可以认为是

(5)卡方检验

卡方检验主要用于两种情况,其一是拟合度检验(检验观察频率和预期是否一致),其二是进行独立性检验

拟合度检验:

# 检验骰子是否公平
# 观测频数:掷骰子100次的结果
observed = np.array([15, 20, 18, 16, 17, 14])  # 6个面的观测次数

# 期望频数:如果是公平骰子,每个面应该出现100/6次
expected = np.array([100/6] * 6)  # 6个面的期望次数

# 进行卡方拟合优度检验(参数:观察值,预期值)
chi2_stat, p_value = stats.chisquare(f_obs=observed, f_exp=expected)

print("卡方拟合优度检验结果:")
print(f"卡方统计量 = {chi2_stat:.4f}")
print(f"p值 = {p_value:.4f}")

if p_value > 0.05:
    print("不能拒绝原假设:骰子可能是公平的")
else:
    print("拒绝原假设:骰子可能不公平")

(2)独立性检验

# 示例:检验性别与偏好是否独立
# 创建列联表
# 行:性别(男、女)
# 列:偏好(A、B、C)
observed = np.array([
    [50, 30, 20],  # 男性
    [40, 45, 15]   # 女性
])
#observed=observed.T一样
# 进行卡方独立性检验
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)

print("\n卡方独立性检验结果:")
print(f"卡方统计量 = {chi2_stat:.4f}")
print(f"p值 = {p_value:.4f}")
print(f"自由度 = {dof}")
print("\n期望频数表:")
print(expected)

if p_value > 0.05:
    print("\n不能拒绝原假设:性别与偏好可能独立")
else:
    print("\n拒绝原假设:性别与偏好可能相关")

更多推荐