ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 15 课 | 数据清洗与结构化:把「垃圾」变成「资产」

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 15 课 | 数据清洗与结构化:把「垃圾」变成「资产」 第 15 课 | 数据清洗与结构化把「垃圾」变成「资产」爬虫吐出的数据是脏的重复、缺失、格式混乱。Agent 需要的是干净、结构化的知识。这节课我们用 pandas LLM 把原始数据加工成高质量资产。一、业务价值脏数据的代价1.1 一个真实的痛点第 13、14 课我们爬到了数据但直接喂给 Agent 会怎样问题脏数据后果重复新闻同一篇新闻爬了 3 次Agent 检索到 3 条相同结果浪费 token空标题title向量数据库存了无效条目时间格式混乱2026-8-5、2026/08/05、昨天无法按时间过滤无分类标签只有文本没有类别检索时无法按类别过滤摘要缺失summarynull嵌入向量质量差检索不准垃圾进垃圾出Garbage In, Garbage Out——这是数据工程的第一定律。1.2 数据清洗的价值链脏数据干净结构化原始数据爬虫输出数据清洗pandas 处理数据增强LLM 提取关键词/分类结构化存储SQLiteAI Agent检索分析❌ Agent 效果差✅ Agent 精准回答二、数据质量问题全景2.1 六大常见问题数据质量问题重复数据同一 URL 多次采集缺失值标题/摘要为空格式不一致时间格式各异无分类标签只有文本无结构内容质量问题过短/无意义/广告编码问题乱码/特殊字符2.2 检查清单检查项方法标准完整性检查必填字段是否为空标题不为空URL 不为空唯一性按 URL 去重同 URL 只保留一条一致性时间格式统一全部转为YYYY-MM-DD HH:MM:SS有效性内容长度检查摘要 20 字符排除广告分类LLM 自动打标签每条新闻有 1-3 个分类标签三、pandas 基础清洗3.1 安装uv pip install pandaspandas 是 Python 数据分析的事实标准处理表格数据比手写循环快 10-100 倍。3.2 从 SQLite 加载数据importpandasaspdimportsqlite3 connsqlite3.connect(news.db)dfpd.read_sql(SELECT * FROM news,conn)print(f原始数据:{len(df)}条)print(df.head())3.3 去重# 按 URL 去重保留第一条beforelen(df)dfdf.drop_duplicates(subseturl,keepfirst)print(f去重:{before}→{len(df)}条移除{before-len(df)}条重复)3.4 处理缺失值# 删除标题为空的记录无法使用dfdf.dropna(subset[title])dfdf[df[title].str.strip()!]# 填充空摘要df[summary]df[summary].fillna()df[summary]df[summary].replace(,无摘要)print(f缺失值处理后:{len(df)}条)3.5 过滤低质量内容# 过滤过短的摘要可能是广告或无效数据dfdf[df[summary].str.len()20]# 过滤包含广告关键词的内容ad_keywords[广告,推广,赞助,AD]maskdf[title].str.contains(|.join(ad_keywords),caseFalse)dfdf[~mask]print(f质量过滤后:{len(df)}条)3.6 时间格式统一# 尝试多种格式解析时间df[pub_time_clean]pd.to_datetime(df[pub_time],errorscoerce,# 无法解析的设为 NaTformatmixed# 自动尝试多种格式)# 填充缺失时间df[pub_time_clean]df[pub_time_clean].fillna(pd.Timestamp.now())四、LLM 数据增强关键词提取 分类4.1 为什么需要 LLMpandas 能处理结构化问题但语义理解不行“苹果发布 iOS 19” → 类别是什么pandas 不知道“华为 Mate 80 搭载麒麟芯片” → 关键词是什么pandas 不知道这些需要 LLM 来做。但注意不是逐条调用 LLM那样太慢太贵而是批量处理。4.2 批量关键词提取 分类fromagent_kit.llm_clientimportLLMClient llmLLMClient(backendollama,modelqwen2:7b)defextract_keywords_and_category(text:str)-dict:用 LLM 从文本中提取关键词和分类promptf分析以下新闻文本返回 JSON 格式的提取结果。 文本{text[:300]}请提取 1. keywords: 3-5 个关键词列表 2. category: 一级分类AI/芯片/手机/汽车/互联网/其他 3. companies: 涉及的公司名称列表没有则为空列表 只返回 JSON不要其他内容。格式示例 {{keywords: [苹果, iOS 19, AI], category: 手机, companies: [苹果]}} responsellm.chat(prompt)try:importjsonreturnjson.loads(response)exceptjson.JSONDecodeError:return{keywords:[],category:其他,companies:[]}4.3 为什么用 Qwen2 7B 而不是大模型模型关键词提取能力速度成本选择GPT-495%慢贵精标场景DeepSeek92%中中批量处理Qwen2 7B (本地)88%快免费日常使用纯规则匹配60%极快免费简单场景本地 7B 模型做关键词提取完全够用精度 88% vs 95%但速度快 5 倍、零成本。4.4 批量处理策略defenrich_batch(df,llm,batch_size50):批量 LLM 数据增强enriched[]foridx,rowindf.iterrows():textf{row[title]}{row[summary]}resultextract_keywords_and_category(text)row_dictrow.to_dict()row_dict[keywords],.join(result.get(keywords,[]))row_dict[category]result.get(category,其他)row_dict[companies],.join(result.get(companies,[]))enriched.append(row_dict)if(idx1)%100:print(f 已处理{idx1}/{len(df)}条)returnpd.DataFrame(enriched)五、完整清洗流水线SQLite原始数据1. 加载数据pd.read_sql2. 去重drop_duplicates3. 处理缺失值dropna fillna4. 质量过滤长度 广告词5. 时间标准化pd.to_datetime6. LLM 增强关键词 分类SQLite清洗后数据5.1 完整代码运行cdcode/lesson-15-data-cleaning uv run data_cleaner.py输出示例[1/6] 加载原始数据: 156 条 [2/6] 去重: 156 → 142 条移除 14 条重复 [3/6] 缺失值处理: 142 → 140 条 [4/6] 质量过滤: 140 → 135 条移除 5 条低质量 [5/6] 时间标准化: 完成 [6/6] LLM 数据增强: 135/135 条 清洗完成156 → 135 条保留率 86.5% 新增字段: keywords, category, companies5.2 清洗前后对比指标清洗前清洗后改善数据量156 条135 条去伪存真重复率9%0%完全去重缺失值12%0%全部填充有时间78%100%全部标准化有分类0%100%LLM 自动标注有关键词0%100%LLM 自动提取六、数据质量验证6.1 自动验证脚本defvalidate(df):数据质量验证issues[]# 检查必填字段forcolin[title,url]:null_countdf[col].isna().sum()ifnull_count0:issues.append(f⚠{col}:{null_count}条为空)# 检查 URL 唯一性dup_countdf[url].duplicated().sum()ifdup_count0:issues.append(f⚠ URL 重复:{dup_count}条)# 检查分类覆盖率no_cat(df[category]其他).sum()cat_rate(1-no_cat/len(df))*100ifcat_rate70:issues.append(f⚠ 分类覆盖率仅{cat_rate:.1f}%)ifnotissues:print(✅ 数据质量检查通过)else:forissueinissues:print(issue)returnissues七、总结这节课完成了从「脏数据」到「高质量资产」的转变环节工具核心能力去重/缺失/格式pandas批量处理速度快 100 倍关键词/分类LLM (Qwen2 7B)语义理解本地免费质量验证自动化脚本完整性 唯一性 覆盖率至此数据采集模块第 13-15 课全部完成。现在你拥有了完整的「数据管道」爬取 → 清洗 → 增强 → 结构化存储。从下一课开始我们进入核心模块Agent 框架LangChain让数据真正「活」起来。本课代码code/lesson-15-data-cleaning/data_cleaner.py
返回列表