📌 目录
scipy.stats
模块简介- 常见的统计分布
- 描述性统计:均值、标准差等
- 假设检验:t检验、卡方检验等
- 回归分析:线性回归
- 相关性分析:皮尔逊相关系数
- 示例:t检验与卡方检验
- 出站链接与参考资料
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}")
🔗 出站链接与参考资料
📘 官方文档
- SciPy
stats
模块:
https://docs.scipy.org/doc/scipy/reference/stats.html ttest_1samp
函数:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_1samp.htmlchi2_contingency
函数:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2_contingency.html
🎓 教程与实战
- SciPy 统计教程:
https://scipy-lectures.org/advanced/statistics/ - Real Python 统计与数据分析:
https://realpython.com/python-statistics/
发表回复