📌 目录

  1. scipy.stats 模块简介
  2. 常见的统计分布
  3. 描述性统计:均值、标准差等
  4. 假设检验:t检验、卡方检验等
  5. 回归分析:线性回归
  6. 相关性分析:皮尔逊相关系数
  7. 示例:t检验与卡方检验
  8. 出站链接与参考资料

1. scipy.stats 模块简介

scipy.stats 提供了丰富的统计工具,包括常见的概率分布、假设检验方法、回归分析、描述性统计等。它是进行数据分析和统计推断的基础工具之一。


2. 常见的统计分布

SciPy 提供了许多常见的概率分布,包括正态分布、泊松分布、均匀分布等。

正态分布(Normal Distribution)

from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np

# 参数设置:均值=0,标准差=1
mu, sigma = 0, 1

# 生成正态分布样本数据
data = norm.rvs(loc=mu, scale=sigma, size=1000)

# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')

# 绘制正态分布的PDF
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, sigma)
plt.plot(x, p, 'k', linewidth=2)

plt.title("Normal Distribution")
plt.show()

泊松分布(Poisson Distribution)

from scipy.stats import poisson

# 参数:λ=3
lambda_ = 3

# 生成泊松分布样本数据
data = poisson.rvs(mu=lambda_, size=1000)

# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.6, color='b')

# 绘制泊松分布的PMF
xmin, xmax = plt.xlim()
x = np.arange(0, 20)
p = poisson.pmf(x, lambda_)
plt.plot(x, p, 'k', linewidth=2)

plt.title("Poisson Distribution")
plt.show()


3. 描述性统计:均值、标准差等

scipy.stats 提供了计算描述性统计量的函数,如均值、标准差、偏度、峰度等。

计算均值、标准差和偏度

from scipy.stats import describe

# 示例数据
data = np.random.normal(0, 1, 1000)

# 计算描述性统计量
stats = describe(data)

print(f"均值: {stats.mean}")
print(f"标准差: {np.sqrt(statsvariance)}")
print(f"偏度: {stats.skew}")
print(f"峰度: {stats.kurtosis}")


4. 假设检验:t检验、卡方检验等

t检验

t检验用于检验样本均值与某一已知值的差异是否显著。

from scipy.stats import ttest_1samp

# 示例数据
data = np.random.normal(0, 1, 1000)

# 假设检验:检验样本均值是否与0有显著差异
t_statistic, p_value = ttest_1samp(data, 0)

print(f"t统计量: {t_statistic}")
print(f"p值: {p_value}")

卡方检验

卡方检验用于检验类别数据的独立性或分布是否符合预期。

from scipy.stats import chi2_contingency

# 示例列联表
observed = np.array([[10, 20, 30], [6, 9, 17]])

# 卡方检验
chi2_stat, p_val, dof, expected = chi2_contingency(observed)

print(f"卡方统计量: {chi2_stat}")
print(f"p值: {p_val}")


5. 回归分析:线性回归

线性回归用于建立因变量与自变量之间的线性关系。

from scipy.stats import linregress

# 示例数据:x为自变量,y为因变量
x = np.random.normal(5, 2, 100)
y = 2 * x + 3 + np.random.normal(0, 1, 100)

# 线性回归
slope, intercept, r_value, p_value, std_err = linregress(x, y)

print(f"斜率: {slope}")
print(f"截距: {intercept}")
print(f"r值: {r_value}")
print(f"p值: {p_value}")


6. 相关性分析:皮尔逊相关系数

皮尔逊相关系数用于衡量两个变量之间的线性关系。

from scipy.stats import pearsonr

# 示例数据
x = np.random.normal(5, 2, 100)
y = 2 * x + 3 + np.random.normal(0, 1, 100)

# 皮尔逊相关系数
corr_coefficient, p_value = pearsonr(x, y)

print(f"皮尔逊相关系数: {corr_coefficient}")
print(f"p值: {p_value}")


7. 示例:t检验与卡方检验

示例:t检验

假设有两组样本数据,我们想要比较两组数据的均值是否存在显著差异。

from scipy.stats import ttest_ind

# 两组示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(0, 1, 100)

# t检验:比较两组数据均值
t_statistic, p_value = ttest_ind(data1, data2)

print(f"t统计量: {t_statistic}")
print(f"p值: {p_value}")

示例:卡方检验

假设有两个类别变量,我们想要检验它们是否独立。

from scipy.stats import chi2_contingency

# 示例列联表
observed = np.array([[12, 5], [7, 9]])

# 卡方检验
chi2_stat, p_val, dof, expected = chi2_contingency(observed)

print(f"卡方统计量: {chi2_stat}")
print(f"p值: {p_val}")


🔗 出站链接与参考资料

📘 官方文档

🎓 教程与实战