当前位置: 首页 > news >正文

Shapiro-Wilk与Shapiro-Francia检验:正态性检验原理与实战指南

简介:本资源是一份面向统计分析初学者与科研人员的正态性检验工具包,聚焦于小样本至中等样本(3≤n≤5000)下数据分布形态的严格检验问题,特别适用于假设检验前的数据预处理、回归残差诊断及非参数方法适用性评估等场景。压缩包仅含1个MATLAB函数文件(.m),基于Royston R94算法实现Shapiro-Wilk检验,并自动对平峰态(platykurtic)样本补充Shapiro-Francia检验,兼顾精度与鲁棒性。资源体积精简,仅3KB,开箱即用,无需额外依赖,可直接集成至MATLAB统计分析流程中。目前已有944人学习下载,使用者可立即获得一个经过验证的复合正态性检验函数,包含完整输入校验、双检验逻辑切换、p值与统计量返回机制,以及清晰的注释说明,显著降低统计建模前期的数据分布验证门槛。

1. 项目概述:从“看起来像”到“统计上像”的正态性检验

在数据分析、模型构建和假设检验的日常工作中,我们经常听到一个要求:“数据需要服从正态分布”。无论是做T检验、方差分析(ANOVA),还是建立线性回归模型,正态性假设往往是许多经典统计方法的基石。但问题来了,我们怎么知道手头这组数据到底“像不像”正态分布?光靠画个直方图或者QQ图,用肉眼判断“看起来挺像的”,在严谨的科研或工业分析中是远远不够的。这时候,我们就需要借助统计检验的力量,给“正态性”一个量化的判决。在众多正态性检验方法中,Shapiro-Wilk检验Shapiro-Francia检验是两种高效且常用的专门针对中小样本的利器。这个项目,就是带你深入理解这两种检验方法的核心原理、适用场景、实操步骤以及那些教科书上不会写的避坑经验。

简单来说,Shapiro-Wilk(夏皮罗-威尔克)检验和Shapiro-Francia(夏皮罗-弗朗西亚)检验,都是通过计算一个特定的统计量W(或W'),来评估样本数据与理想正态分布的吻合程度。它们的原假设(H0)通常是“样本来自一个正态分布的总体”。如果检验得出的p值小于我们设定的显著性水平(如0.05),我们就有理由拒绝原假设,认为数据不服从正态分布;反之,则没有足够证据拒绝正态性。对于数据分析师、科研工作者和质量控制工程师而言,掌握这两种检验,意味着你能更可靠地为后续的统计分析把好第一道关,避免因误用基于正态假设的方法而导致结论错误。

2. 核心原理与算法思想拆解

要真正用好一个工具,不能只停留在调用shapiro.test()函数看p值的层面。理解其背后的统计思想,能帮助你在结果存疑时做出更明智的判断。

2.1 Shapiro-Wilk检验:基于顺序统计量的相关性检验

Shapiro-Wilk检验的核心思想非常直观:如果一个样本真的来自正态分布,那么样本的顺序统计量(即排序后的数据)与来自标准正态分布的理论分位数之间,应该存在高度的线性关系。

我们来拆解一下这个思想:

  1. 顺序统计量:假设我们有一组样本数据[x1, x2, ..., xn],我们将它们从小到大排序,得到x(1) ≤ x(2) ≤ ... ≤ x(n),这些就是顺序统计量。
  2. 理论分位数:对于一个标准正态分布,我们也可以计算出一组对应的分位数m1, m2, ..., mn。其中mi是标准正态分布中第(i - 0.375) / (n + 0.25)分位点的值(这个公式是Shapiro和Wilk提出的系数计算的一部分,目的是获得理论分位数的良好估计)。
  3. 计算相关性:Shapiro-Wilk检验的统计量W,本质上就是这组顺序统计量x(i)与理论分位数mi之间线性回归的确定系数(R²)。更具体地说,W的计算公式为: [ W = \frac{(\sum_{i=1}^n a_i x_{(i)})^2}{\sum_{i=1}^n (x_i - \bar{x})^2} ] 其中,a_i是一组精心计算的系数,它依赖于样本量n和标准正态分布的顺序统计量的期望协方差矩阵。分子部分可以看作是基于顺序统计量的加权平方和,分母是通常的样本方差平方和。
  4. 统计推断:W的值介于0和1之间。W值越接近1,表明样本数据与正态分布的线性关系越好,即越可能服从正态分布。通过复杂的计算或查表,我们可以得到在正态假设下W统计量的分布,从而计算出对应的p值。

注意:Shapiro-Wilk检验对系数a_i的依赖意味着其计算相对复杂,且对于不同的样本量n,都需要一套特定的系数。这也是为什么在早期,它的应用受限于样本量(通常n≤50),因为系数表只编制到一定范围。现代计算机软件通过算法动态计算这些系数,才使其得以广泛应用。

2.2 Shapiro-Francia检验:一种简化与扩展

Shapiro-Francia检验可以看作是Shapiro-Wilk检验的一个简化变体。Francia观察到,当样本量较大时,Shapiro-Wilk检验中的系数a_i可以近似地用理论分位数mi来替代。

其统计量W'的计算公式为: [ W' = \frac{(\sum_{i=1}^n m_i x_{(i)})^2}{\sum_{i=1}^n m_i^2 \sum_{i=1}^n (x_i - \bar{x})^2} ] 比较W和W'的公式,你会发现W'的分子中直接用m_i代替了a_i,分母也做了相应调整。这使得W'的计算大大简化。

两种检验的关键区别与联系:

  • 计算复杂度:Shapiro-Francia检验计算更简单、更快速。
  • 功效:在大多数情况下,尤其是样本量不是特别小的时候,两种检验的功效(即正确检测出非正态数据的能力)非常接近。一些研究表明,对于某些特定的非正态分布(如重尾分布),Shapiro-Francia检验可能略微更敏感一些。
  • 样本量限制:Shapiro-Wilk检验最初针对小样本(n ≤ 50)设计,但现在算法已支持更大的n(如n ≤ 5000)。Shapiro-Francia检验则没有明确的严格上限,常被推荐用于中等乃至大样本(例如n > 50)的正态性检验。
  • 软件实现:在R语言中,shapiro.test()函数实现的是Shapiro-Wilk检验。Shapiro-Francia检验则有独立的包如nortest中的sf.test()函数。在Python的SciPy库中,scipy.stats.shapiro也是实现的Shapiro-Wilk检验。

2.3 为什么是它们?与其他检验的对比

除了S-W和S-F,常见的正态性检验还有Kolmogorov-Smirnov检验(K-S检验)、Anderson-Darling检验(A-D检验)、Lilliefors检验等。了解它们的区别有助于你正确选择。

  • Kolmogorov-Smirnov检验:比较样本经验分布函数与理论分布函数的最大垂直距离。它是一个非常通用的分布拟合优度检验,但对于正态性检验而言,它的功效通常低于S-W检验,特别是当备择假设是分布偏斜或峰度不同时。另一个致命缺点是,标准的K-S检验需要完全指定的理论分布(即已知均值和标准差),这在实践中很少见。Lilliefors检验是对K-S检验的修正,用于当均值和标准差由样本估计时的情况。
  • Anderson-Darling检验:类似于K-S检验,但给分布尾部的差异赋予了更大的权重。因此,它对分布的尾部特性更为敏感。在正态性检验中,A-D检验的功效通常很高,尤其是对于重尾或轻尾分布。
  • Shapiro-Wilk / Shapiro-Francia检验:如上所述,它们是专门为正态性检验设计的,通过评估顺序统计量与理论分位数的线性关系来工作。对于中小样本(n < 50 ~ 100),S-W检验被广泛认为是功效最强的正态性检验之一。这也是它成为许多统计软件默认或推荐选项的原因。

选择建议

  • 小样本(n < 50):优先使用Shapiro-Wilk检验
  • 中等至大样本(n > 50)Shapiro-Wilk检验Shapiro-Francia检验都是很好的选择,后者计算更快。也可以考虑Anderson-Darling检验,它对尾部异常更敏感。
  • 大样本(n > 500):几乎所有检验都会变得非常“敏感”,微小的偏离也可能导致p值显著。此时,应更侧重于图形化工具(如QQ图)并结合领域知识判断偏离是否具有实际意义,而不是完全依赖检验的p值。

3. 实操流程与软件实现详解

理论懂了,我们来看看怎么用。这里以最常用的R和Python为例,展示完整的操作流程,并解释输出结果。

3.1 环境与数据准备

首先,你需要一份待检验的数据。数据可以来自实验测量、调查问卷、生产监控等任何渠道。在进行分析前,进行基本的数据清洗是必不可少的:

  1. 处理缺失值:检查并决定是删除缺失记录还是进行插补。
  2. 检查数据录入错误:明显的异常值(如身高3米)需要核实。
  3. 了解数据背景:这组数据理论上应该服从正态分布吗?例如,测量误差通常假设为正态,但收入数据通常不是。

我们以一个模拟的例子开始。假设我们测量了30个零件的尺寸(单位:mm)。

在R中:

# 设置随机种子保证结果可复现 set.seed(123) # 模拟一组来自正态分布的数据,均值=10,标准差=0.5 data_normal <- rnorm(30, mean = 10, sd = 0.5) # 模拟一组来自指数分布(明显非正态)的数据,作为对比 data_exp <- rexp(30, rate = 0.5)

在Python中:

import numpy as np import scipy.stats as stats import matplotlib.pyplot as plt # 设置随机种子 np.random.seed(123) # 模拟正态数据 data_normal = np.random.normal(loc=10, scale=0.5, size=30) # 模拟指数数据 data_exp = np.random.exponential(scale=2, size=30) # scale=1/rate

3.2 执行Shapiro-Wilk检验

R语言实现:R内置的stats包提供了shapiro.test()函数,非常方便。

# 对正态数据做检验 result_sw_normal <- shapiro.test(data_normal) print(result_sw_normal) # 对非正态数据做检验 result_sw_exp <- shapiro.test(data_exp) print(result_sw_exp)

输出解读:对于data_normal,你可能会得到类似下面的结果:

Shapiro-Wilk normality test data: data_normal W = 0.98157, p-value = 0.8493
  • W = 0.98157:这是Shapiro-Wilk统计量,非常接近1。
  • p-value = 0.8493:远大于常用的显著性水平0.05。
  • 结论:没有足够证据拒绝原假设,即认为这组数据服从正态分布。

对于data_exp,结果可能截然不同:

Shapiro-Wilk normality test data: data_exp W = 0.77265, p-value = 1.038e-05
  • W = 0.77265,距离1较远。
  • p-value = 1.038e-05,远小于0.05。
  • 结论:拒绝原假设,认为这组数据不服从正态分布。

Python (SciPy) 实现:

# 对正态数据做检验 W_stat_normal, p_value_normal = stats.shapiro(data_normal) print(f"Shapiro-Wilk Test for normal data: W={W_stat_normal:.5f}, p={p_value_normal:.5f}") # 对非正态数据做检验 W_stat_exp, p_value_exp = stats.shapiro(data_exp) print(f"Shapiro-Wilk Test for exponential data: W={W_stat_exp:.5f}, p={p_value_exp:.5f}")

输出解读与R语言完全一致。

3.3 执行Shapiro-Francia检验

在R中,Shapiro-Francia检验不是基础包的一部分,需要安装nortest包。

# 安装并加载nortest包 # install.packages("nortest") library(nortest) # 执行Shapiro-Francia检验 result_sf_normal <- sf.test(data_normal) print(result_sf_normal) result_sf_exp <- sf.test(data_exp) print(result_sf_exp)

输出格式与shapiro.test()类似,提供统计量W'和p值,解读方法也相同。

在Python的SciPy中,没有直接内置的Shapiro-Francia检验函数。你可以使用statsmodels库,或者根据公式自行实现。这里展示一个使用statsmodels的简单示例(需先安装pip install statsmodels):

import statsmodels.api as sm # statsmodels的Shapiro-Francia检验在sandbox模块中,但请注意API可能变化 # 一种更稳定的方法是使用pingouin库 # pip install pingouin import pingouin as pg # 使用pingouin进行Shapiro-Francia检验 result_sf_normal = pg.normality(data_normal, method='shapiro-francia') print(result_sf_normal) result_sf_exp = pg.normality(data_exp, method='shapiro-francia') print(result_sf_exp)

pingouin库提供了一个统一的normality函数,通过method参数可以选择多种正态性检验,输出为DataFrame,包含检验统计量和p值,非常清晰。

3.4 结果可视化辅助判断

永远不要单独依赖p值!结合图形化工具是黄金准则。最常用的是Q-Q图

在R中:

par(mfrow=c(1,2)) # 设置1行2列的图形布局 # 正态数据的QQ图 qqnorm(data_normal, main="Q-Q Plot (Normal Data)") qqline(data_normal, col="red") # 添加理论直线 # 非正态数据的QQ图 qqnorm(data_exp, main="Q-Q Plot (Exponential Data)") qqline(data_exp, col="red")

在QQ图中,如果数据点大致沿着红色参考线分布,则表明服从正态分布。对于data_exp,你会看到数据点严重偏离直线,尤其是在尾部。

在Python中:

fig, axes = plt.subplots(1, 2, figsize=(12, 5)) # 正态数据的QQ图 stats.probplot(data_normal, dist="norm", plot=axes[0]) axes[0].set_title("Q-Q Plot (Normal Data)") # 非正态数据的QQ图 stats.probplot(data_exp, dist="norm", plot=axes[1]) axes[1].set_title("Q-Q Plot (Exponential Data)") plt.tight_layout() plt.show()

图形解读同R语言。通过对比检验p值和QQ图,你可以对数据的正态性有一个稳健的判断。

4. 深入解析:统计量的计算、功效与局限性

4.1 统计量W的计算细节与查表

虽然我们不需要手算,但了解其计算过程有助于理解输出。以Shapiro-Wilk检验为例,其计算步骤可概括为:

  1. 将样本数据x按升序排列,得到x_(i)
  2. 计算样本均值bar{x}和方差s^2
  3. 根据样本量n,从预计算的表中或通过算法获取系数a_i和理论分位数m_i。这些系数是标准正态分布顺序统计量期望值的函数。
  4. 计算W = (sum(a_i * x_(i))^2) / (sum(x_i - bar{x})^2)
  5. 根据nW值,通过查表或算法转换得到p值。

实操心得:早期统计学家编制了详细的W统计量临界值表(针对不同的n和显著性水平α)。现在软件都内置了精确算法。但当你阅读一些老文献时,可能会看到“W=0.92,查表得p<0.05”这样的表述,指的就是查这些表。现代分析中,我们完全信任软件计算的精确p值即可。

4.2 检验的功效分析

检验的“功效”是指当原假设为假(即数据确实非正态)时,正确拒绝原假设的概率。我们希望功效越高越好。

  • 样本量的影响:功效随样本量增加而增加。对于很小的样本(如n=5),即使数据明显非正态,检验也可能无法拒绝H0(p值很大),这是因为小样本提供的信息有限,检验“无力”检测出偏离。这就是为什么对于极小样本,即使正态性检验不显著,也应谨慎对待,并结合图形和先验知识判断。
  • 偏离类型的影响:S-W检验对于偏态(分布不对称)和峰度(分布尾部厚度)偏离都比较敏感,但可能对某些特定的非正态分布(如均匀分布)不如A-D检验敏感。
  • 显著性水平α的选择:降低α(如从0.05降到0.01)会降低犯第一类错误(弃真)的概率,但同时也降低了功效(增加了取伪的概率)。通常α=0.05是一个平衡点。

4.3 方法的局限性

  1. 样本量依赖:如前所述,小样本时功效不足,大样本时过于敏感。这是一个固有的矛盾。
  2. 仅针对完全正态:S-W和S-F检验的原假设是“数据来自一个完全的正态分布”。现实中,绝对完美的正态分布几乎不存在。检验关心的是“偏离是否严重到影响后续分析”。例如,对于大样本,一个在QQ图上仅有轻微尾部偏离的数据集,可能会产生一个极小的p值(如p=0.001),导致拒绝正态性。但从实际应用角度看,这种轻微偏离可能对后续的T检验或回归分析结果影响微乎其微。
  3. 对异常值敏感:由于检验基于顺序统计量,个别极端异常值会严重影响W统计量的值,可能导致错误地拒绝正态性。因此,在检验前,探查和处理异常值是一个重要步骤。
  4. 不能用于分组比较:S-W检验一次只检验一组数据。如果你想比较多组数据的正态性,需要对每组分别进行检验,并注意多重比较问题。

5. 常见问题、陷阱与实战应对策略

在实际项目中,你会遇到各种教科书没讲清楚的情况。下面是我踩过坑后总结的经验。

5.1 p值大于0.05,就万事大吉了吗?

绝对不是!p > 0.05只意味着“没有足够证据拒绝正态性”,不等于“证明了数据是正态的”。尤其是在小样本情况下,这可能仅仅是检验能力不足导致的。你必须结合QQ图、直方图等图形工具综合判断。如果图形显示有明显偏离(如明显的弯曲或离群点),即使p > 0.05,你也应该对数据的正态性持怀疑态度,并考虑使用非参数方法或对数据进行变换。

5.2 样本量很大(n>500),p值几乎总是很小,怎么办?

这是大样本检验的普遍现象。此时,统计显著性不等于实际显著性。一个微小的、在实际应用中可忽略的偏离,也可能产生p < 0.001的结果。应对策略:

  1. 主要依赖图形:仔细查看QQ图。如果数据点紧密地分布在参考线两侧,仅在极远端有轻微偏离,那么可以认为数据“近似正态”,对于许多模型(如线性回归)来说是完全可以接受的。
  2. 考虑效应量:除了p值,关注W统计量本身的值。例如,W=0.995和W=0.900的p值可能都小于0.05,但前者偏离的程度远小于后者。
  3. 使用稳健方法:对于大样本,许多参数方法(如T检验)对正态性偏离具有一定的稳健性,特别是当偏离不是极端偏态时。你也可以直接考虑使用不依赖于正态假设的稳健统计方法或自助法。

5.3 数据明显非正态,下一步该怎么办?

如果检验和图形都强烈提示数据非正态,你有以下几个选择:

  1. 数据变换:尝试对数据进行数学变换,使其更接近正态分布。常用的变换包括:
    • 对数变换:适用于右偏(正偏态)数据,如收入、人口数据。new_x = log(x)log(x+1)(如果x有0值)。
    • 平方根变换:适用于轻度右偏的计数数据。
    • Box-Cox变换:一种更通用的幂变换家族,可以自动寻找最优的变换参数λ。在R中可用MASS::boxcox(),在Python中可用scipy.stats.boxcox

    注意:变换后,记得在变换后的数据上重新进行正态性检验和后续分析,并且最终解释结果时要基于变换后的尺度,这可能不如原始尺度直观。

  2. 使用非参数检验:放弃参数方法,改用不依赖于分布假设的方法。
    • 代替独立样本t检验 →Mann-Whitney U检验(Wilcoxon秩和检验)
    • 代替配对样本t检验 →Wilcoxon符号秩检验
    • 代替单因素方差分析 →Kruskal-Wallis H检验
    • 代替Pearson相关 →Spearman秩相关或Kendall's Tau相关
  3. 使用稳健统计方法:一些参数方法有对应的稳健版本,对偏离正态性和异常值不敏感。例如,可以使用稳健回归代替普通最小二乘回归。
  4. 自助法:通过有放回重抽样来估计统计量的抽样分布,从而进行推断,不依赖于正态假设。

5.4 分组数据正态性检验的批量处理与报告

当你的数据集包含多个分组(例如,不同治疗组的实验数据),你需要分别检验每个组的正态性。手动一个个检验非常低效。

在R中,可以使用循环或tapplyby函数,或者dplyr包:

library(dplyr) # 假设数据框df包含数值变量`value`和分组变量`group` df <- data.frame( group = rep(c("A", "B", "C"), each=20), value = c(rnorm(20), rexp(20), runif(20)) ) normality_results <- df %>% group_by(group) %>% summarise( W_stat = shapiro.test(value)$statistic, p_value = shapiro.test(value)$p.value, .groups = 'drop' ) print(normality_results)

在Python中,可以使用groupbyapply

import pandas as pd # 创建示例数据框 df = pd.DataFrame({ 'group': ['A']*20 + ['B']*20 + ['C']*20, 'value': np.concatenate([np.random.normal(size=20), np.random.exponential(size=20), np.random.uniform(size=20)]) }) def shapiro_test_for_group(series): stat, p = stats.shapiro(series) return pd.Series({'W_stat': stat, 'p_value': p}) results = df.groupby('group')['value'].apply(shapiro_test_for_group).reset_index() print(results)

报告建议:在学术论文或报告中,通常不需要列出每个组的W和p值表格(除非分组很少)。更常见的做法是简单陈述:“经Shapiro-Wilk检验,各组数据均满足正态性假设(所有p > 0.05)”,或者“除XX组外,其余各组数据满足正态性假设”。对于不满足的组,说明你采取了何种处理措施(如数据变换或改用非参数检验)。

5.5 自动化脚本与结果解读模板

为了提高效率,你可以将数据读取、检验、绘图和结果输出整合到一个脚本中。下面是一个R Markdown或R脚本的模板框架:

# 1. 加载库和数据 library(ggplot2) my_data <- read.csv("your_data.csv") # 2. 定义要检验的数值变量 variable_to_test <- "your_numeric_column" # 3. 执行Shapiro-Wilk检验 test_result <- shapiro.test(my_data[[variable_to_test]]) # 4. 生成QQ图 qq_plot <- ggplot(my_data, aes(sample = .data[[variable_to_test]])) + stat_qq() + stat_qq_line(color="red") + labs(title = paste("Q-Q Plot for", variable_to_test), subtitle = paste("Shapiro-Wilk W =", round(test_result$statistic, 4), ", p =", format.pval(test_result$p.value, digits=4))) # 5. 打印结果和图形 print(test_result) print(qq_plot) # 6. 结论判断 alpha <- 0.05 if(test_result$p.value > alpha) { cat(sprintf("\n结论:在α=%.2f水平上,不能拒绝正态性原假设(p=%.4f)。结合图形判断,数据可视为近似正态分布。\n", alpha, test_result$p.value)) } else { cat(sprintf("\n警告:在α=%.2f水平上,拒绝正态性原假设(p=%.4f)。数据可能不服从正态分布,建议检查图形并考虑数据变换或非参数方法。\n", alpha, test_result$p.value)) }

这个模板自动化了流程,并提供了结合数值结果和图形的主观判断指引,非常适合在分析报告中嵌入使用。

本文还有配套的精品资源,点击获取

http://www.cnnetsun.cn/news/4278906.html

相关文章:

  • 工厂和实体店用AI做推荐,有没有人试过?
  • Tikhonov正则化与L曲线:病态反问题的稳定求解实战指南
  • SAP ABAP增强重构:从Customer Exits到函数模块的架构优化实践
  • 普通面经(中):从算法手撕到HR面的避坑指南
  • 二级域名分发系统源码详解:部署实践与二次开发指南
  • 你真的会用 AI 辅助学习吗?我的 AI 学习利器:硅基流动 SiliconFlow
  • 基于差分进化算法优化LDPC码度分布的设计与实现
  • CISP-PTE实操题(自写靶场与题类似或变型)
  • 数学建模中的拟合技术:从原理到MATLAB/Python实战
  • GMSL车载HDR相机热插拔技术解析:从链路原理到工程落地
  • 字符串查找与替换:从原理到实战的性能优化与避坑指南
  • 单片机综合设计实战:电压频率采集与实时时钟系统开发指南
  • EN 50155认证铁路计算机:从工业电脑到车载加固平台的进阶之路
  • QT_HTTP协议编程
  • 第 9 篇 OCC OCAF 框架详解:特征树、装配管理、数据持久化、参数化架构
  • AI技能市场化的关键:从提示词操作到稳定交付
  • 8万字BAT面经的高效使用指南:从题海到Offer收割
  • 蓝桥杯算法竞赛备赛全攻略:从省一到国二的实战心法与技巧
  • 两个字段都建了单列索引,为什么加了 OR,执行计划还是全表扫描?
  • Agent Skills 入门到实战:从 Prompt 到可复用技能封装
  • 毕业论文降 AI 什么时候该花钱?快降重 VS 笔灵 AI,教育学硕士知网 AIGC 实测避坑
  • AI时代开发者进阶指南:从Prompt到大模型工程实践
  • GraphRAG实战:基于代码知识图谱的代码库问答实现
  • 硬盘健康监控与故障预警:用Hard Disk Sentinel看懂SMART数据
  • AI应用盈利难?从算力成本到工程优化的实战指南
  • 基于Mahout协同过滤的电影推荐系统:Java工程实践与毕业设计指南
  • WordPress浏览量计数器插件:精准统计、缓存兼容与性能优化全攻略
  • Python学习路线全解析:爬虫、数据分析、AI与自动化办公实战指南
  • 英伟达70%营收预期下,AI算力规划与GPU部署实战指南
  • 2026年Java零基础暑期学习路线:从JDK安装到项目实战全攻略