尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

3分钟学会正态性检验(含直方图、P-P图、Q-Q图)

3分钟学会正态性检验(含直方图、P-P图、Q-Q图) 在统计学中正态性检验是判断数据是否符合正态分布的重要步骤。正态分布是一种对称的钟形分布广泛应用于数据分析和建模中。为了更直观地展示数据是否符合正态分布我们可以通过绘制直方图、P-P图和Q-Q图来辅助分析本文将使用 Python 实现正态性检验并生成上述三种图表。数据存储在路径C:\Users\bai\Downloads\正态性检验.xlsx中文件包含两列数据电话银行月费和最近一个月消费金额。如下表电话银行月费最近一个月消费金额4146420.029652176397.135067070157.421311131209.615253226960.0278181102817.79261150003.535397554892.675941476285.550982526529.54657步骤1准备数据首先我们需要读取 Excel 文件中的数据。以下是代码示例import pandas as pd # 读取数据 data pd.read_excel(C:/Users/bai/Downloads/正态性检验.xlsx) # 查看数据结构 data.head()步骤2进行正态性检验我们可以使用scipy.stats库中的函数来完成正态性检验。以下是一个简单的 Shapiro-Wilk 检验示例from scipy import stats # 对“最近一个月消费金额”进行正态性检验 stat, p stats.shapiro(data[最近一个月消费金额]) # 输出结果 print(fStatistic: {stat}, p-value: {p}) alpha 0.05 if p alpha: print(数据符合正态分布) else: print(数据不符合正态分布)输出结果如下步骤3绘制可视化图表为了更直观地展示数据分布我们将绘制直方图、P-P图和Q-Q图。1. 绘制直方图直方图可以显示数据的分布形态帮助我们初步判断数据是否接近正态分布import matplotlib.pyplot as plt import seaborn as sns # 设置绘图风格 sns.set(stylewhitegrid) # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 # 绘制直方图 plt.figure(figsize(8, 6)) sns.histplot(data[最近一个月消费金额], kdeTrue, colorblue) plt.title(直方图与核密度估计 (KDE), fontsize16) plt.xlabel(最近一个月消费金额, fontsize14) plt.ylabel(频率, fontsize14) plt.show()输出结果如上图由上图可知最近一个月消费金额的正态性检验直方图较为明显为钟形故满足正态性。2. 绘制 P-P 图P-P 图概率-概率图用于比较样本数据的累积分布函数 (CDF) 与理论正态分布的 CDFfrom scipy.stats import probplot # 绘制 P-P 图 plt.figure(figsize(8, 6)) probplot(data[最近一个月消费金额], distnorm, plotplt) plt.title(P-P 图, fontsize16) plt.show()根据P-P图散点与直线重合度较高因此服从正态分布3. 绘制 Q-Q 图Q-Q 图分位数-分位数图用于比较样本数据的分位数与理论正态分布的分位数。import statsmodels.api as sm # 绘制 Q-Q 图 plt.figure(figsize(8, 6)) sm.qqplot(data[最近一个月消费金额], lines) plt.title(Q-Q 图, fontsize16) plt.show()根据Q-Q图散点与直线重合度较高因此服从正态分布完整代码import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from scipy import stats from scipy.stats import probplot import statsmodels.api as sm # 设置绘图风格 sns.set(stylewhitegrid) # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 # Step 1: 读取数据 data pd.read_excel(C:/Users/bai/Downloads/正态性检验.xlsx) # 查看数据结构 print(数据前几行) print(data.head()) # Step 2: 正态性检验Shapiro-Wilk 检验 stat, p stats.shapiro(data[最近一个月消费金额]) # 输出检验结果 print(\n正态性检验结果) print(fStatistic: {stat}, p-value: {p}) alpha 0.05 if p alpha: print(数据符合正态分布) else: print(数据不符合正态分布) # Step 3: 绘制可视化图表 # (1) 直方图与核密度估计 (KDE) plt.figure(figsize(8, 6)) sns.histplot(data[最近一个月消费金额], kdeTrue, colorblue) plt.title(直方图与核密度估计 (KDE), fontsize16) plt.xlabel(最近一个月消费金额, fontsize14) plt.ylabel(频率, fontsize14) plt.show() # (2) P-P 图 plt.figure(figsize(8, 6)) probplot(data[最近一个月消费金额], distnorm, plotplt) plt.title(P-P 图, fontsize16) plt.show() # (3) Q-Q 图 plt.figure(figsize(8, 6)) sm.qqplot(data[最近一个月消费金额], lines) plt.title(Q-Q 图, fontsize16) plt.show()通过以上方法我们不仅可以通过统计检验如 Shapiro-Wilk 检验得到量化结果还可以通过可视化图表直方图、P-P 图、Q-Q 图直观地判断数据是否符合正态分布。希望这篇文章能帮助你快速掌握正态性检验的方法注意事项通常现实研究情况下很难满足检验若其样本峰度绝对值小于 10 并且偏度绝对值小于 3结合正态分布直方图、PP 图或者 QQ 图可以描述为基本符合正态分布若正态分布直方图基本上呈现出钟形中间高两端低则说明数据虽然不是绝对正态但基本可接受为正态分布小数据样本即一般样本数 50 以下进行 Shapiro-Wilk大数据样本即一般样本数 50 以上使用 Kolmogorov–Smirnov 检验。
返回列表