
简介面向《数据采集与预处理》课程的PDF教学教案围绕“认识数据预处理技术”任务展开适用于课堂讲授数据清洗、数据集成、数据变换与数据归约等关键环节。内容先概括数据预处理的目标与常见问题再依次讲解数据采样、数据清理、数据集成、数据归约、特征选择与特征提取等技术要点其中缺失值补齐、噪声平滑、实体识别、维归约等技术细节均有简明说明。后半部分专门演示Pig和Kettle两个工具的环境搭建涵盖下载解压、重命名、配置环境变量及验证安装便于教学演示与课堂同步实操。全篇按知识准备与任务实施两段组织步骤完整适合作为高校数据科学相关课程的辅助教案也便于学生课后对照练习工具部署与预处理操作。资源共1个文件为PDF格式整包约149KB体积精简便于快速下载与分发目前已有332人学习下载。1. 数据采集之后为什么必须接数据预处理脏数据的三副面孔与一条落地路径做数据采集的人都知道数据到手只算开始数据预处理才是决定分析结果下限的那一步。不管数据来自 LabVIEW DAQ 采集卡、注塑机联网上报的工艺参数还是爬虫抓下来的行情文本原始数据普遍缺字段、带噪声、格式混乱直接喂给算法基本都是翻车现场。这份教案把数据清洗、集成、转换、归约、特征选择、特征提取整条链路拆开每步讲清“到底在解决什么问题”再布置 Pig 0.17.0 和 Kettle 7.0 两套环境搭建任务收尾。它适合准备实训课的老师也适合刚把数据采回来、手上有脏数据不知道怎么处理的入门者照着教案顺序走一遍基本能把一条从“原始数据”到“可分析数据”的管道搭出来。2. 数据预处理到底做什么从采样、清洗到集成、归约与特征提取教案把数据预处理的定义写得相当克制在数据挖掘以前先对原始数据进行清理、集成、转换、离散、归约、特征选择和提取等一系列处理达到挖掘算法进行知识获取所要求的最低规范和标准。翻译成大白话是把不能直接进模型的原始数据洗成模型能认识的样子。数据采样、数据清理、数据集成、数据归约、特征选择、特征提取这几个动作才是数据预处理的主体而不是很多人以为的“删掉空行”那么简单。2.1 采样是第一步加权、随机、分层各自解决什么问题教案把数据采样列为数据预处理的第一类常见问题并划分成加权采样、随机采样、分层采样三类。随机采样最常用适合数据分布均匀的场景加权采样给不同样本设置不同的数值系数让样本呈现希望的相对重要性比如业务上认定近期数据更重要就把近期样本权重调高分层采样针对分布不均衡的数据控制每一类在样本里的出现频率。做注塑机故障预测时这个差别尤其明显良品记录远多于故障记录如果直接随机采样故障样本可能只有个位数模型根本学不到故障特征。分层采样按故障/良品比例分别抽样保证两类数据都保留足够数量。反过来说如果一个采集任务里各来源数据都算均衡随机采样就是性价比最高的选择。Pig 里做采样习惯用 SAMPLE 或 SPLIT 语句Kettle 里有现成的“取样”步骤这一步在后续环境搭建里都会碰到。2.2 原始数据为什么不能直接用不完整、含噪声、杂乱性三个信号教案把散乱原始数据的特征归纳成三类不完整性、含噪声、杂乱性。这三个词对应到工程现场非常具体。不完整性最常见传感器某段时间没上报或者爬虫抓页面时字段缺失数据表里就会出现大片的空值。含噪声则表现为传感器偶尔跳一个尖刺或爬虫抓来的行情文本混进乱码块。杂乱性更多来自多源数据合并同一个企业在 A 系统里叫“华东精密”在 B 系统里叫“华东精密有限公司”程序一匹配就傻眼。看到这三种信号基本上就可以判断该上预处理了。像 NPP 夜间灯光这类遥感数据从原始影像到可分析栅格中间的去噪、拼接、裁剪、重投影本质上就是数据清理和数据转换的组合。也就是说数据预处理并不是某一类数据的专属流程而是所有数据在进入分析前的必经之路。2.3 数据清理与数据集成补齐缺失值、平滑噪声、解决四类冲突数据清理是教案着墨最多的部分核心是三类操作填补遗漏的数据值、平滑有噪声数据、识别或除去异常值。处理不完备数据集的方法分为删除元组和数据补齐两大类其中补齐方法非常多教案一口气列了八种。直接看对照表更清楚方法思路好用在哪注意什么删除元组把有缺失属性的记录整体删掉缺失比例低时最简单缺失多时会丢大量信息人工填写人工逐条补关键字段少、数据量小时准确成本高不适合大表特殊值填充用“unknown”等占位符填充类别字段常用保留缺失语义模型可能把占位符当成真实类别平均值填充用该列均值填充缺失值数值字段快速处理受异常值影响大会压低方差热卡填充找最相似完整记录的值来补比平均值更贴近真实分布需要定义相似度计算量偏大k近邻法找k个近邻样本加权填充精度较高工程常用数据量大时计算开销明显所有可能值填充分别填充所有可能取值再建模信息保留完整要跑多个模型费算力组合完整化方法多种方法组合着补工业项目最常见做法需要验证每种方法的补全效果回归用其他字段回归预测缺失值字段间相关性较强时效果好容易过拟合需要交叉验证平滑有噪声数据的常用方法则是分箱、回归、聚类。分箱把数据分成若干箱用箱均值或箱中位数替代箱内数据回归用拟合曲线抹平波动聚类把类似的值聚成群或簇直观地讲落在簇集合之外的值就被视为离群点。后面做 Kettle 转换时“过滤记录”步骤就是在做这类清洗动作。数据集成解决的是多数据源合并的一致性问题教案归纳为四类实体识别、冗余和相关分析、元组重复、数据值冲突的检测与处理。实体识别判断两个来源里的记录是不是同一个实体冗余处理去掉重复字段元组重复解决重复记录数据值冲突最典型的是 A 表单价是含税价、B 表单价是不含税价合并前必须约定统一口径。这些在注塑机数据采集联网场景里会集中爆发——不同车间的设备协议不同、字段命名不同不先做集成汇总表根本没法用。2.4 数据归约、特征选择与特征提取减少数据量但不丢信息数据归约策略包括维归约、数量归约和数据压缩。维归约减少列的数量删掉冗余属性或做属性合并数量归约用替代的、较小的数据表示形式替换原数据比如用聚类中心代表一组样本数据压缩则通过编码方式降低存储。归约的目的是在尽量不损失信息的前提下把数据量压下来减少后续算法的计算压力。特征选择和特征提取容易被当成同一件事但教案分得很清楚特征选择是从原始特征里挑出最有代表性的子集有过滤式、封装式、嵌入式三种类型特征提取是利用已有特征构造一个较低维数的特征空间把原始特征中有用的信息映射到少数几个特征上忽略不相干信息。三者的对比如下类型评估依据特点典型场景过滤式统计指标打分不依赖模型速度快忽略特征间组合关系高维数据快速初筛封装式用模型效果评价特征子集精准但计算开销大特征数较少的小数据集嵌入式模型训练过程中自动选特征兼顾效果与效率L1正则、决策树分裂特征提取在工程里的例子很多PCA 主成分分析是典型做法高分二号影像在 QGIS 里做预处理时的波段组合与主成分变换也属于这一类。除此之外教案在教学目的里还提到数据转换归一化、离散化、独热编码都在这个范畴通常在归约和特征选择之前完成。理论这段有个关键理解Pig 和 Kettle 做的事其实就是把上面这套数据清理、转换、归约的逻辑落到具体工具上。Pig 偏向把清洗转换写成脚本批量执行适合处理大文件Kettle 偏向图形化拖拽适合看清每一步的数据流向。接下来两章分别把这两个环境搭起来。3. Pig 0.17.0 环境搭建从源码包解压到 Grunt 跑通一条加载链路教案在“任务实施”部分把 Pig 的搭建分成下载解压、重命名、配置环境变量、验证四步。这套环境是后续跑数据清洗脚本的基础也是理解 Pig Latin 语法的最低配置。Pig 本身是跑在 Hadoop 之上的脚本语言工具但单机教学环境可以用 local 模式运行不依赖 HDFS 集群也能完成清洗逻辑的练习。3.1 下载源码包还是预编译包先决定省不省这一步教案原文要求下载 pig-0.17.0-src.tar.gz注意这个包是源码包。src 版需要自己用构建工具编译在教学电脑上能跑但等待时间长还可能缺依赖。实际操作时我更建议直接下载同版本的预编译 bin 包文件名通常不带 -src解压即用。如果已经按教案下了 src 包也有一条路可以走。# 方案A按教案用源码包解压到 /usr/local sudo tar -zxf pig-0.17.0-src.tar.gz -C /usr/local cd /usr/local # 重命名缩短路径后续配置变量更方便 sudo mv pig-0.17.0-src pig # 方案B教学环境建议直接用预编译包 # sudo tar -zxf pig-0.17.0.tar.gz -C /usr/local # cd /usr/local sudo mv pig-0.17.0 pig-C /usr/local指定解压目标目录避免文件散落在当前目录。重命名成pig是为了统一路径后面环境变量里写/usr/local/pig比写pig-0.17.0-src短得多也避免版本号写错导致路径失效。如果选了方案A源码包还需要额外做一次构建常见做法是在/usr/local/pig目录下执行 Maven 打包命令构建时间取决于机器性能这也是我推荐教学直接用 bin 包的原因。3.2 配置 PIG_HOME 与 PATH环境变量这一步决定能不能找到 pig 命令环境变量配置是新手最容易出错的环节。教案给出的路径是修改~/.bashrc这个文件是当前用户 shell 的启动配置。打开文件后在末尾追加两行。# 编辑当前用户的 shell 配置文件 sudo vim ~/.bashrc文件末尾追加以下内容并保存# PIG_HOME 指向解压根目录不是 bin 目录 export PIG_HOME/usr/local/pig # PATH 里需要追加的是 $PIG_HOME/bin而不是 PIG_HOME 本身 export PATH$PIG_HOME/bin:$PATH保存后执行命令让配置在当前会话生效source ~/.bashrc有两个细节值得单独说明。第一PIG_HOME必须指向/usr/local/pig这个根目录而不是/usr/local/pig/bin因为后续脚本会基于PIG_HOME去拼bin、lib等子目录。第二source只对当前终端窗口生效新开的终端会自动加载~/.bashrc不需要重复 source。这里有个隐含坑位如果用sudo vim改的是 root 用户的.bashrc而当前登录的是普通用户改完怎么 source 都没用后文避坑章节会展开。3.3 验证安装并跑通 Grunt一条 LOAD 到 DUMP 的最小链路环境变量配好后第一步验证版本号是否能正常输出。在终端输入# 输出版本号确认 pig 命令已进入 PATH pig -version能打印出版本信息说明命令可以被找到。接下来建议进入 Grunt 交互模式这是 Pig 提供的一个类似 shell 的执行环境后续写清洗脚本都在这里面调试。# 进入 Grunt-x local 指定本地模式不依赖 HDFS 集群 pig -x local在 Grunt 提示符下执行一段最小数据处理链路-- 读取本地 CSV 文件逗号作为字段分隔符 orders LOAD /home/user/orders.csv USING PigStorage(,) AS (id:int, amount:double); -- 过滤掉 amount 为空的脏数据对应教案里的数据清理 clean_orders FILTER orders BY amount IS NOT NULL; -- 按金额降序排列 top_orders ORDER clean_orders BY amount DESC; -- 打印到屏幕验证结果 DUMP top_orders;这段脚本把教案里的数据清理落到了真实语法上PigStorage(,)指定分隔符AS后面定义字段名和类型FILTER ... IS NOT NULL把空值记录过滤掉ORDER BY做排序DUMP打印结果。local模式下路径写本地文件的绝对路径如果将来连 Hadoop 集群加载路径需要换成hdfs://开头的地址。这一步跑通说明 Pig 安装真正可用而不只是命令能敲出来。4. Kettle 7.0 环境搭建pdi-ce-7.0.0.0-25 从解压到 spoon.sh 启动Kettle 是图形化 ETL 工具教案安排的环境任务是 pdi-ce-7.0.0.0-25 这个社区版。它和 Pig 正好互补Pig 写脚本适合成批跑、容易自动化Kettle 拖拽图形化适合看数据每一步的流向也适合给初学者建立“清洗管道”的直观印象。Kettle 解压后的目录叫># 解压到 /usr/local sudo unzip pdi-ce-7.0.0.0-25.zip -d /usr/local # 进入目录并重命名 cd /usr/local sudo mv>sudo vim ~/.bashrc追加# KETTLE_HOME 指向解压根目录 export KETTLE_HOME/usr/local/kettle # 把 Kettle 根目录加进 PATH方便直接执行 spoon.sh export PATH$KETTLE_HOME:$PATH保存后 source 并启动source ~/.bashrc # 切换到 kettle 目录启动图形界面 cd /usr/local/kettle ./spoon.sh如果能弹出 Kettle 主界面环境搭建就基本成功。但工程上启动 Kettle 之前我一般会先改一个参数JVM 内存。Kettle 默认的堆内存非常保守数据量稍大就会卡死。打开spoon.sh找到PENTAHO_DI_JAVA_OPTIONS。# 编辑启动脚本 cd /usr/local/kettle vim spoon.sh找到类似下面的配置把默认值调大# 默认一般是 -Xmx512m改到 1G 起、4G 封顶 PENTAHO_DI_JAVA_OPTIONS-Xms1024m -Xmx4096m-Xms1024m表示 JVM 启动时申请 1G 初始堆内存-Xmx4096m表示最大堆内存 4G。改成这个配置后处理几十万行的转换才不会频繁触发 Full GC。如果机器本身只有 8G 内存-Xmx不建议超过物理内存的一半否则系统其他程序会被挤爆。修改完成后必须重启spoon.sh改完不重启不会生效。4.3 用 Kettle 做第一个转换把 CSV 清洗后输出到 Excel环境跑通后建议立刻做一个最小转换把教案里的数据清理步骤可视化出来。操作流程如下启动 Kettle菜单选择“文件 → 新建 → 转换”。左侧面板展开“输入”分类把“CSV 文件输入”拖到画布。双击该步骤设置要读取的 CSV 文件路径、分隔符编码明确选 UTF-8避免中文乱码。从“转换”分类里拖出“过滤记录”步骤设置过滤条件比如过滤掉金额为空或小于 0 的记录这一步对应教案中的数据清理。再拖一个“Excel 输出”步骤把过滤后的数据接到输出端。用鼠标在步骤间连线数据流方向从 CSV 输入指向过滤记录再指向 Excel 输出最后点工具栏“运行”。连线在 Kettle 里叫 Hop表示数据从一个步骤流向另一个步骤。这个转换完成后保存成.ktr文件如果以后要走命令行调度直接用kitchen.sh执行对应作业即可。图形化的好处是每一步都能预览数据调试清洗逻辑比纯脚本直观得多这也是 Kettle 在教学场景里的核心价值。5. 常见问题与排查Pig 和 Kettle 搭建中的五个高频坑环境搭建的坑主要集中在路径、版本和数据编码三类。以下五条是我在教学和项目里反复遇到的每条都按现象、原因、解决的顺序拆开。5.1 找不到命令与改完不生效现象1安装完成后输入pig或spoon.sh终端提示command not found。 原因1PATH没有包含对应 bin 目录或者环境变量写错了位置。比如把PIG_HOME直接写成/usr/local/pig/bin导致$PIG_HOME/bin实际变成/usr/local/pig/bin/bin。 解决1先检查当前生效的变量值确认问题出在哪。# 查看 PIG_HOME 实际指向 echo $PIG_HOME # 查看 PATH 里是否有 pig 的 bin 目录 echo $PATH | grep pig如果$PIG_HOME为空回去检查.bashrc里的 export 是否写对如果PIG_HOME对但 PATH 里没有检查 export 那行是不是漏了$PIG_HOME/bin。改完记得 source。现象2source ~/.bashrc后当前窗口能用新开终端又失效。 原因2export 写到了别的 shell 配置文件或者用sudo vim修改的是 root 用户的家目录配置当前登录用户根本没加载到。 解决2先执行whoami确认当前用户再确认编辑的是当前用户的~/.bashrc。普通用户不要用 sudo 去改 root 的配置文件改完一定不生效。5.2 版本不匹配Hadoop/JDK 与工具对不上现象pig -version能正常输出但加载 HDFS 路径时报出一堆 ClassNotFoundException或者spoon.sh双击后没反应、闪退控制台输出UnsupportedClassVersionError。 原因Pig 0.17.0 是 2017 年左右的版本默认匹配 Hadoop 2.x 和 JDK 8Kettle 7.0 同样要求 JDK 8。机器上装的是 JDK 11 或 17字节码版本不兼容工具就跑不起来。 解决先确认 Java 版本。java -version如果不是 JDK 8安装一个 JDK 8 并设置JAVA_HOME指向它。需要连集群时确认 Pig 版本与集群 Hadoop 版本匹配如果只是做教学练习建议直接pig -x local走本地模式绕开大部分集群兼容问题。Kettle 同理装好 JDK 8 后spoon.sh基本就能正常弹窗。5.3 数据侧细节中文乱码与 spoon 卡死现象1Kettle 里读取 CSV 文件后中文字段全是乱码过滤条件也匹配不上。 原因1CSV 文件输入步骤没有显式设置文件编码。UTF-8 的文件被按系统默认编码中文 Windows 通常是 GBK解析中文字符自然全乱。 解决1在“CSV 文件输入”步骤里的“编码”字段显式改成 UTF-8如果源文件本身是 GBK 生成的就选 GBK以源文件的真实编码为准。这个坑在数据清洗任务里出现频率极高教案里没细写但实际一跑准会遇到。现象2spoon.sh启动后长时间卡在 Logo 界面或者跑大转换时界面假死、报 OutOfMemoryError。 原因2Kettle 默认 JVM 堆内存太小编辑器的默认值往往只有 512MB转换步骤一多内存立刻不够用。 解决2按 4.2 节改PENTAHO_DI_JAVA_OPTIONS将-Xmx调大。机器内存紧张时控制在物理内存一半以内。注意改完必须完全关闭 Kettle 再重启只重开窗口不会加载新配置。6. 留给自己的验收习惯搭建后先跑通三条命令环境搭完不是看图标能打开就算成功。我一般会强制自己跑三条命令做最小验收每条命令都对应验证一个关键组件。# 1. 确认 Java 版本与工具匹配Pig 和 Kettle 都需要 JDK 8 java -version # 2. Pig 端到端跑一条最小链路-e 表示直接执行脚本不进入交互界面 pig -x local -e a LOAD /tmp/a.csv USING PigStorage(,) AS (x:int,y:int); DUMP a; # 3. Kettle 命令行执行器能正常启动并输出版本 /usr/local/kettle/kitchen.sh -version三条命令对应的验收标准如下命令预期结果对应组件java -version输出 Java 版本信息建议为 1.8JDKpig -x local -e …打印出/tmp/a.csv中的数据Pigkitchen.sh -version输出 Kettle 版本号Kettle这个顺序是有讲究的。Java 不对后面两个工具根本跑不起来先验证 Java 能省掉后面排查的大半时间。Pig 用-e参数可以直接执行一段脚本而不进入交互界面适合做无人值守验证如果执行时提示路径不存在先创建/tmp/a.csv并写入两行逗号分隔的整数。Kettle 用kitchen.sh而不是spoon.sh是因为命令行执行器不弹 GUI在服务器上也能测输出版本号即代表整个 Kettle 环境可启动。如果不想用命令行那就打开一次spoon.sh主界面再关掉效果相同。从那以后我每次在教室或新机器上搭完环境都强制把这三条命令走一遍五分钟左右就能确认工具是真能干活而不是“看起来装上了”。数据预处理理论的笔记可以慢慢做环境落地这件事一次跑通最省心。希望帮到你。本文还有配套的精品资源点击获取