大数据ETL流程:Power BI数据清洗全攻略

大数据ETL流程:Power BI数据清洗全攻略

一、引言:为什么数据清洗是ETL的“灵魂”?

在大数据时代,企业的决策越来越依赖数据,但**“垃圾进,垃圾出”(Garbage In, Garbage Out)的定律从未改变。根据Gartner的报告,数据科学家花费在数据清洗上的时间占比高达60%-80%,而Power BI作为全球最流行的商业智能工具,其数据清洗能力**(基于Power Query Editor)正是支撑精准分析的核心基石。

本文将以**“大数据ETL流程”为框架,聚焦Power BI中的数据清洗环节,从基础概念**、工具操作实战案例高级技巧,全方位拆解数据清洗的方法论与实践路径。无论你是刚接触Power BI的分析师,还是希望提升效率的资深开发者,都能从本文中找到有价值的 insights。


二、ETL流程概述:从“数据 raw 料”到“分析食材”

ETL(Extract-Transform-Load)是大数据处理的核心流程,其目标是将分散、异构、脏乱的数据转化为统一、干净、可分析的结构化数据。三者的职责分工如下:

阶段核心任务Power BI工具支撑
Extract(提取)从数据库(SQL/NoSQL)、Excel、CSV、云服务(Azure Data Lake)等源获取数据Power BI数据连接功能(支持100+数据源)
Transform(转换/清洗)处理缺失值、重复值、异常值,规范数据格式,整合多源数据Power Query Editor(核心工具)
Load(加载)将清洗后的数据加载到数据模型(Data Model),供可视化或分析使用Power BI数据模型(支持DAX计算)

1. 数据清洗的核心目标

数据清洗并非“删除所有脏数据”,而是保留数据的真实性与可用性,具体目标包括:

  • 完整性:处理缺失值(如null、空字符串);
  • 唯一性:删除重复记录(如重复订单ID);
  • 一致性:统一数据格式(如日期格式从“2024-05-01”到“2024/05/01”);
  • 准确性:修正错误数据(如“订单金额=-100”);
  • 规范性:将非结构化数据转换为结构化(如拆分“客户地址”为“省/市/区”)。

2. Power BI数据清洗的优势

相比Python(Pandas)、SQL等工具,Power BI的Power Query Editor更适合业务分析师非程序员,其优势在于:

  • 可视化操作:通过拖拽、点击完成复杂转换,无需编写代码;
  • 步骤可追溯:所有清洗操作都记录在“查询步骤”面板,支持撤销/重做;
  • 多源整合:无缝连接Excel、SQL Server、Azure等数据源,统一清洗;
  • 实时预览:每一步操作都能实时看到数据变化,避免误操作。

三、Power BI数据清洗工具:Power Query Editor详解

Power Query Editor是Power BI的“数据清洗实验室”,所有转换操作都在这里完成。我们先通过一个流程图梳理其核心 workflow:

连接数据源(Extract)

提升标题(将第一行设为列名)

数据探查(查看缺失值/重复值/数据类型)

缺失值处理(填充/删除)

重复值处理(删除重复项)

数据类型转换(日期/数值/文本)

异常值处理(筛选/标记)

文本清洗(拆分/替换/提取)

数据整合(合并/追加查询)

加载到数据模型(Load)

1. 界面介绍(快速上手)

打开Power BI Desktop,点击“获取数据”→选择数据源(如Excel)→导入数据后,点击“编辑查询”进入Power Query Editor,界面主要分为以下区域:

  • 功能区:顶部菜单栏,包含“开始”“转换”“添加列”等标签,提供所有清洗工具;
  • 查询步骤:右侧面板,记录所有操作步骤(如“提升标题”“替换值”),支持重命名/删除步骤;
  • 数据预览区:中间区域,显示当前步骤的数据结果,支持选中列/行操作;
  • 列属性:右侧面板,显示选中列的数据类型(如文本、日期)、统计信息(如非重复值数量)。

2. 核心功能拆解(必学操作)

下面我们以电商销售数据(包含“订单ID”“客户ID”“订单日期”“订单金额”“客户地址”“产品ID”等字段)为例,讲解Power Query Editor的高频清洗操作

(1)数据探查:定位“脏数据”

数据清洗的第一步是了解数据质量,Power Query Editor提供了数据质量功能(右侧面板→“数据质量”),可以快速查看每列的:

  • 缺失值比例(如“订单金额”列有10%的null);
  • 重复值比例(如“订单ID”列有5%的重复);
  • 数据类型分布(如“订单日期”列有80%是文本类型,20%是日期类型)。

操作步骤

  1. 选中“订单金额”列;
  2. 右侧“数据质量”面板显示:缺失值10%,非重复值900条;
  3. 结论:需要处理“订单金额”的缺失值。
(2)缺失值处理:填充还是删除?

缺失值是最常见的“脏数据”,处理方式取决于缺失比例业务意义

  • 缺失比例>30%:删除该列(如“客户备注”列,缺失80%,无分析价值);
  • 缺失比例<30%:填充值(如“订单金额”列,缺失10%,用均值填充)。

Power Query操作

  • 方式1:替换null为固定值(适合数值列):
    选中“订单金额”列→点击“转换”→“替换值”→“查找值”输入null→“替换为”输入0→点击“确定”。
    对应的M语言代码(Power Query的底层语言):
    Table.ReplaceValue(源, null, 0, Replacer.ReplaceValue, {"订单金额"})
  • 方式2:用均值填充(适合数值列):
    选中“订单金额”列→点击“添加列”→“自定义列”→输入公式:
    if [订单金额] = null then List.Average(Table.Column(源, "订单金额")) else [订单金额]
  • 方式3:向下填充(适合时间序列数据):
    选中“订单日期”列→点击“转换”→“填充”→“向下填充”(将上一行的日期填充到当前null行)。
(3)重复值处理:删除还是保留?

重复值会导致分析结果偏差(如重复计算订单数量),处理方式是基于唯一键删除(如“订单ID”)。

Power Query操作

  1. 选中“订单ID”列(唯一键);
  2. 点击“开始”→“删除重复项”;
  3. 确认删除后,“查询步骤”会新增“删除重复项”步骤。

注意:如果没有唯一键,可以选择多列组合(如“订单ID+客户ID”)作为唯一标识。

(4)数据类型转换:避免“文本型日期”陷阱

数据类型错误是分析的“隐形杀手”(如“订单日期”是文本类型,无法计算月份销量),Power Query Editor支持自动转换手动转换

常见转换场景

  • 文本→日期:选中“订单日期”列→点击“开始”→“数据类型”→选择“日期”(Power Query会自动识别常见日期格式,如“2024-05-01”“2024/05/01”);
  • 文本→数值:选中“订单金额”列→点击“数据类型”→选择“ decimal (小数)”(避免计算时出现“文本+数值”的错误);
  • 数值→文本:选中“客户ID”列→选择“文本”(客户ID是标识,不需要计算,文本类型更节省空间)。

解决“无法转换”的问题
如果日期格式不标准(如“2024年5月1日”),可以用自定义函数转换:

let 转换日期 = (textDate as text) as date => let 替换字符 = Text.Replace(textDate, "年", "-"), 替换字符2 = Text.Replace(替换字符, "月", "-"), 替换字符3 = Text.Replace(替换字符2, "日", ""), 转换为日期 = Date.From(替换字符3) in 转换为日期 in 转换日期

应用到“订单日期”列:

Table.AddColumn(源, "标准日期", each 转换日期([订单日期]))
(5)异常值处理:识别与修正“离群点”

异常值(如“订单金额=1000000元”,远高于平均订单金额1000元)会影响统计结果(如均值被拉高),处理方式包括:

  • 删除:确认是错误数据(如“订单金额=-100”);
  • 标记:保留数据,但标记为“异常”(如“大额订单”);
  • 修正:用合理值替换(如“订单金额=1000000”可能是多打了一个零,修正为100000)。

常用异常值检测方法

  • Z-score法:计算数据点与均值的偏差,Z = ( X − μ ) / σ Z = (X - \mu) / \sigmaZ=(Xμ)/σ,其中μ \muμ是均值,σ \sigmaσ是标准差。通常∣ Z ∣ > 3 |Z| > 3Z>3视为异常值;
  • 箱线图法:计算四分位距(IQR),异常值定义为< Q 1 − 1.5 ∗ I Q R < Q1-1.5*IQR<Q11.5IQR> Q 3 + 1.5 ∗ I Q R > Q3+1.5*IQR>Q3+1.5IQR,其中Q 1 Q1Q1是第一四分位,Q 3 Q3Q3是第三四分位。

Power Query操作(Z-score法)

  1. 计算“订单金额”的均值与标准差:
    均值 = List.Average(Table.Column(源, "订单金额")), 标准差 = List.StandardDeviation(Table.Column(源, "订单金额"))
  2. 添加“Z-score”列:
    Table.AddColumn(源, "Z-score", each ( [订单金额] - 均值 ) / 标准差 )
  3. 筛选异常值(∣ Z − s c o r e ∣ > 3 |Z-score| > 3Zscore>3):
    Table.SelectRows(添加Z-score列, each Abs([Z-score]) <= 3 )
(6)文本清洗:从“混乱字符串”到“结构化数据”

文本数据(如“客户地址”“产品名称”)是最脏的,常见问题包括:

  • 格式不统一(如“江苏省南京市玄武区”“江苏-南京-玄武”);
  • 包含多余字符(如“客户地址:江苏省-南京市-玄武区”);
  • 需要拆分(如“客户地址”拆分为“省/市/区”)。

Power Query操作

  • 拆分列(将“客户地址”拆分为“省/市/区”):
    选中“客户地址”列→点击“转换”→“拆分列”→“按分隔符”→输入分隔符“-”→选择“拆分为列”→点击“确定”。
    结果:“江苏省-南京市-玄武区”拆分为“江苏省”“南京市”“玄武区”三列。
  • 替换多余字符(如“客户地址:”):
    选中“客户地址”列→点击“转换”→“替换值”→“查找值”输入“客户地址:”→“替换为”留空→点击“确定”。
  • 提取关键信息(如从“产品名称”中提取“品牌”):
    假设产品名称格式为“华为Mate 60 Pro”,需要提取“华为”作为品牌:
    Table.AddColumn(源, "品牌", each Text.BeforeDelimiter([产品名称], "Mate"))
(7)数据整合:合并多源数据

在大数据场景中,数据通常来自多个源(如“销售数据”来自Excel,“产品信息”来自SQL Server),需要合并查询(Join)或追加查询(Union)。

合并查询(内连接)
假设“销售数据”包含“产品ID”,“产品信息”包含“产品ID”“产品名称”“类别”,需要将两者合并:

  1. 在Power Query Editor中,点击“开始”→“合并查询”→“合并查询作为新查询”;
  2. 选择“销售数据”作为左表,“产品信息”作为右表;
  3. 选择连接键“产品ID”;
  4. 选择连接类型“内连接”(只保留两边都有的数据);
  5. 点击“确定”后,展开“产品信息”表的“产品名称”“类别”列。

追加查询( Union )
假设“2023年销售数据”与“2024年销售数据”结构相同,需要合并为一张表:

  1. 选中“2023年销售数据”查询;
  2. 点击“开始”→“追加查询”→“追加查询作为新查询”;
  3. 选择“2024年销售数据”作为要追加的表;
  4. 点击“确定”,得到合并后的“2023-2024年销售数据”。

四、实战案例:电商销售数据清洗全流程

1. 数据背景

我们有一份电商销售数据(Excel文件),包含以下字段:

订单ID客户ID订单日期订单金额客户地址产品ID
1001C0012024-05-011200江苏省-南京市-玄武区P001
1002C0022024-05-02null浙江省-杭州市-西湖区P002
1003C0032024年5月3日800广东省-广州市-天河区P003
1004C0042024-05-0450000江苏省-苏州市-工业园区P004
1001C0012024-05-011200江苏省-南京市-玄武区P001

2. 清洗目标

  • 处理“订单金额”的null值;
  • 删除重复的“订单ID”;
  • 将“订单日期”统一为“yyyy-MM-dd”格式;
  • 拆分“客户地址”为“省/市/区”;
  • 标记“订单金额”的异常值(Z-score>3)。

3. 分步实现

(1)导入数据并提升标题
  1. 打开Power BI Desktop,点击“获取数据”→“Excel工作簿”→选择文件→点击“导入”;
  2. 在“导航器”中选择“销售数据”工作表→点击“编辑”进入Power Query Editor;
  3. 点击“开始”→“提升标题”(将第一行“订单ID”等设为列名)。
(2)处理缺失值(订单金额)
  1. 选中“订单金额”列→点击“转换”→“替换值”;
  2. “查找值”输入null→“替换为”输入0→点击“确定”;
  3. 结果:“订单金额”的null值变为0。
(3)删除重复值(订单ID)
  1. 选中“订单ID”列→点击“开始”→“删除重复项”;
  2. 确认删除后,“订单ID=1001”的重复记录被删除。
(4)统一订单日期格式
  1. 选中“订单日期”列→点击“数据类型”→选择“日期”;
  2. 发现“2024年5月3日”无法转换为日期(Power Query不识别“年”“月”“日”字符);
  3. 点击“添加列”→“自定义列”→输入公式:
    标准日期 = Date.From(Text.Replace(Text.Replace(Text.Replace([订单日期], "年", "-"), "月", "-"), "日", ""))
  4. 删除原始“订单日期”列→将“标准日期”重命名为“订单日期”。
(5)拆分客户地址
  1. 选中“客户地址”列→点击“转换”→“拆分列”→“按分隔符”;
  2. 输入分隔符“-”→选择“拆分为列”→点击“确定”;
  3. 将拆分后的列重命名为“省”“市”“区”。
(6)标记异常值(订单金额)
  1. 计算“订单金额”的均值与标准差:
    在“查询步骤”面板点击“添加自定义步骤”→输入:
    均值 = List.Average(Table.Column(前一步骤, "订单金额")), 标准差 = List.StandardDeviation(Table.Column(前一步骤, "订单金额"))
  2. 添加“Z-score”列:
    点击“添加列”→“自定义列”→输入:
    Z-score = ( [订单金额] - 均值 ) / 标准差
  3. 添加“异常标记”列:
    点击“添加列”→“自定义列”→输入:
    异常标记 = if Abs([Z-score]) > 3 then "异常" else "正常"
  4. 结果:“订单金额=50000”的Z-score远大于3,被标记为“异常”。
(7)加载到数据模型

点击“开始”→“关闭并应用”,将清洗后的数据加载到Power BI数据模型,供后续可视化分析(如制作“月度销量趋势图”“Top 10 产品销量图”)。


五、高级技巧:提升数据清洗效率

1. 自定义函数:复用重复操作

如果需要处理多个类似的文本字段(如“客户地址”“供应商地址”),可以编写自定义函数复用代码。例如,拆分地址的函数:

let SplitAddress = (address as text) as record => let parts = Text.Split(address, "-"), 省 = parts{0}, 市 = parts{1}, 区 = parts{2} in [省=省, 市=市, 区=区] in SplitAddress

应用到“供应商地址”列:

Table.AddColumn(源, "供应商地址拆分", each SplitAddress([供应商地址]))

2. 参数化查询:动态获取数据

如果需要定期更新数据(如每月导入“销售数据”),可以使用参数化查询动态指定文件路径。例如:

  1. 点击“开始”→“管理参数”→“新建参数”;
  2. 名称设为“文件路径”→类型设为“文本”→当前值设为“C:\销售数据\2024-05.xlsx”;
  3. 在“源”步骤中,将文件路径替换为参数:
    源 = Excel.Workbook(File.Contents(参数[文件路径]), null, true)
  4. 每月更新数据时,只需修改“文件路径”参数的值,无需修改查询代码。

3. 错误处理:避免查询中断

如果数据中包含错误(如“订单金额”为文本“一百元”),Power Query会中断查询。可以使用错误处理函数(如try...otherwise)避免中断:

Table.AddColumn(源, "订单金额(数值)", each try Number.From([订单金额]) otherwise 0 )

上述代码会尝试将“订单金额”转换为数值,如果失败(如“一百元”),则返回0。


六、数据清洗最佳实践

1. 先探查,后清洗

在清洗前,一定要用数据质量功能或统计函数(如List.CountList.Average)了解数据分布,避免盲目删除或填充。

2. 保留原始数据

永远不要修改原始数据,而是复制查询(点击“查询”→“复制”)做清洗,这样可以在需要时回溯原始数据。

3. 文档化清洗步骤

给“查询步骤”添加注释(如“删除重复订单ID”“填充订单金额null值”),方便团队成员理解你的操作。

4. 避免过度清洗

不要为了“干净”而删除有价值的异常值(如“大额订单”可能是重要客户的采购),而是标记为异常,供后续分析使用。


七、Power BI vs 其他工具:数据清洗能力对比

工具优势劣势适合场景
Power BI可视化操作、多源整合、实时预览复杂逻辑需写M语言,性能受限于桌面端业务分析师、非程序员、中小规模数据
Python(Pandas)灵活、支持复杂逻辑、性能强需要编程基础,可视化弱数据科学家、大规模数据、复杂清洗逻辑
SQL数据库端清洗,效率高不支持多源整合,可视化弱数据库管理员、初步清洗(如删除重复值)

八、未来趋势:Power BI数据清洗的进化方向

1. AI自动清洗

Power BI正在整合Copilot(AI助手),可以自动识别缺失值、重复值,并给出清洗建议(如“订单金额有10%的null,建议用均值填充”)。

2. 实时数据清洗

随着流数据(如IoT设备数据、实时订单数据)的普及,Power BI将支持实时数据清洗(基于Azure Stream Analytics),实现“数据流入→清洗→可视化”的端到端实时流程。

3. 云原生整合

Power BI将更深入地整合Azure Data LakeAzure Synapse Analytics等云服务,支持PB级大数据清洗,提升处理效率。


九、总结:数据清洗是分析的“第一道门槛”

数据清洗不是“体力活”,而是业务理解与技术能力的结合。通过Power Query Editor,我们可以高效地将“脏乱的数据”转化为“有价值的资产”,为后续的可视化分析与决策提供坚实基础。

最后给读者的建议

  • 多实践:用真实数据(如 Kaggle 上的电商数据)练习清洗操作;
  • 学M语言:虽然可视化操作方便,但M语言能解决更复杂的问题;
  • 关注更新:Power BI每年都会推出新功能(如2024年推出的“自动数据准备”),保持学习。

资源推荐

  • 官方文档:Power Query Editor 文档;
  • 书籍:《Power BI实战:从数据清洗到可视化》《Power Query M语言权威指南》;
  • 社区:Power BI社区(https://community.powerbi.com/)、B站Power BI教程。

数据清洗是一个“永无止境”的过程,随着数据量的增长与业务需求的变化,我们需要不断优化清洗策略。希望本文能成为你Power BI数据清洗之旅的“指南针”,帮助你从“数据搬运工”成长为“数据分析师”。


作者:资深软件架构师/技术博主
公众号:技术领导力
知乎专栏:大数据与BI
备注:本文代码可在GitHub仓库(https://github.com/tech-lead/powerbi-data-cleaning)获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装centos和jdk

1.docker拉取操作系统镜像 docker pull registry.cn-hangzhou.aliyuncs.com/acs/centos:7 2.下载jdk https://adoptium.net/zh-CN/temurin/releases?version17&osany&archany 或者 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 确…

LangChain记忆管理:构建智能体连续性的关键技术(值得收藏)

文章介绍了LangChain框架中的记忆治理机制&#xff0c;分为短期记忆和长期记忆两层。短期记忆基于Thread和Checkpointer维持单次会话连贯性&#xff1b;长期记忆通过Store接口实现跨会话用户偏好沉淀。文章通过代码示例展示两种记忆实现方式&#xff0c;强调记忆治理是智能体从…

Linux 之 Network

网卡从属关系bonding # 查看 bond0 的从属接口 ls -la /sys/class/net/bond0/# 查看 bonding_masters cat /sys/class/net/bonding_masters # 输出&#xff1a;bond0# 查看 bond0 的 slaves cat /sys/class/net/bond0/bonding/slaves # 输出&#xff1a;enp65s0f0np0 enp65s0f1…

Java程序员转行大模型开发全攻略:附CSDN独家学习资料包_大模型应用开发学习路线

本文为Java程序员转型大模型开发提供全面指南&#xff0c;涵盖基础知识学习、工具掌握、数学储备和项目实践四大步骤&#xff0c;并分析了Java程序员的独特优势。文章详细介绍了AI大模型时代的多种高薪岗位&#xff0c;如AI工程师、数据工程师等&#xff0c;提供了从初阶应用到…

破局Oracle迁移困局:破局Oracle迁移困局:直面兼容性与成本的隐性痛点

在企业数字化转型的深水区&#xff0c;数据库迁移早已超越了单纯的数据搬运&#xff0c;演变成一场涉及底层架构重构、业务逻辑适配与成本博弈的系统性工程。特别是在将核心业务系统从Oracle迁移至国产数据库&#xff08;如KingbaseES&#xff09;的过程中&#xff0c;项目团队…

从“会聊天“到“会办事“:AI Agent如何引领大模型新时代

AI Agent是能自主理解目标、规划步骤、调用工具并执行的智能系统&#xff0c;区别于普通AI工具的被动响应。它依靠大模型作为"大脑"&#xff0c;具备规划力、记忆力和执行力&#xff0c;可应用于个人生活、企业运营和行业创新。未来AI Agent将更加主动&#xff0c;能…

2026必备!8个一键生成论文工具,MBA轻松搞定学术写作!

2026必备&#xff01;8个一键生成论文工具&#xff0c;MBA轻松搞定学术写作&#xff01; AI 工具助力论文写作&#xff0c;MBA 人不再焦虑 在当今快节奏的学术环境中&#xff0c;MBA 学生和研究者们面临着越来越高的写作压力。无论是开题报告、文献综述&#xff0c;还是最终的毕…

[mcp 工具传参]

Q: 他是如何传参的? 比如 我现在 weatherFun(location: str) 这里面 有 location ,如何传进去的 A: 这是 LLM(大语言模型)的核心魔法,也是 Agent 的基本工作原理。这个过程是全自动的,不需要你手动传参。 整个流…

从小白到专家:大模型中的Token Embedding完全解析

Token Embedding是大模型处理文本的核心技术&#xff0c;它将文本通过分词器切分为tokens并分配ID后&#xff0c;再将这些ID转换为高维向量。这一过程如同建立了一个从token ID到向量的查找表&#xff0c;使每个词在向量空间中获得坐标。Token Embedding不仅实现了文本的数值化…

草莓成熟情况检测数据集1662张VOC+YOLO格式

草莓成熟情况检测数据集1662张VOCYOLO格式 数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;1662 Annotations文件夹中xml文件总计&#xff1a;1662 labels文件…

导师推荐9个AI论文平台,研究生高效写作必备!

导师推荐9个AI论文平台&#xff0c;研究生高效写作必备&#xff01; AI 工具如何助力论文写作&#xff1f; 在当前研究生学习阶段&#xff0c;论文写作已成为一项不可避免的重要任务。无论是开题报告、文献综述&#xff0c;还是最终的毕业论文&#xff0c;都需要大量时间和精力…

告别查重焦虑!虎贲等考 AI 降重降 AIGC:学术写作的合规通关密码

论文查重率超标&#xff1f;AI 生成痕迹明显被预警&#xff1f;在学术规范日益严苛的今天&#xff0c;这两大难题成了无数毕业生和科研人的 “心头病”。不少人踩坑简易降重工具&#xff1a;要么同义词替换导致语义失真&#xff0c;要么机械改写破坏论文逻辑&#xff0c;甚至越…

2026中国十大童装品牌盘点

2026中国十大童装品牌盘点萌娃也要时尚出圈如今萌娃经济逐渐升温,家长们对童装的需求早已超越基础的遮体保暖,开始更多关注面料品质、设计合理性以及穿着舒适度。毕竟孩子的肌肤娇嫩,日常活动量又大,一件合适的童装…

告别学术 PPT 加班局!虎贲等考 AI PPT:10 分钟拿捏开题答辩硬核质感

还在为开题报告 PPT 逻辑混乱被导师打回&#xff1f;还在为论文答辩 PPT 数据堆砌抓不住重点&#xff1f;熬了三个通宵做的 PPT&#xff0c;却因排版丑、风格杂被吐槽 “不像学术汇报”&#xff1f;作为深耕论文写作科普的教育博主&#xff0c;我实测多款工具后发现&#xff0c…

番茄开花果实成熟情况检测数据集8036张VOC+YOLO格式

番茄开花果实成熟情况检测数据集8036张VOCYOLO格式数据集格式&#xff1a;VOC格式YOLO格式压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计&#xff1a;8036Annotations文件夹中xml文件总计&#xff1a;8036labels文件夹…

一文读懂AI Agent协议栈:从MCP到UCP的层级关系与实战应用,告别“谁赢谁输“的误区

文章指出AI Agent协议不是竞争关系&#xff0c;而是协议栈的不同层级&#xff1a;MCP(工具连接)、A2A(Agent协作)、AG-UI(前端同步)、A2UI(生成UI)、AP2(支付)、UCP(商业逻辑)。开发者应按需引入层级&#xff0c;这种互补而非竞争的关系是Agent工程成熟的标志&#xff0c;解决了…

从软件开发到大模型工程师:我的零基础转行全攻略,非常详细收藏我这一篇就够了!

文章分享了作者从软件开发转行成为大模型应用工程师的成功经验。作为有开发经验的211硕士&#xff0c;作者因软件开发行业环境变化而选择转型AI大模型领域。通过三个月系统学习&#xff08;基础→实战→项目&#xff09;&#xff0c;成功获得知名AI企业offer。作者详细分享了学…

海外短剧app开发源码h5,支持多语言多支付 付费模式广告模式

以下是关于开发支持多语言、多支付及混合盈利模式&#xff08;付费广告&#xff09;的海外短剧H5应用的关键技术方案和实现要点&#xff1a; 技术栈选择 前端框架推荐Vue.js或React&#xff0c;配合i18n实现多语言切换。后端可采用Node.js&#xff08;Express/NestJS&#xf…

菠萝数据集634张VOC+YOLO格式

菠萝数据集634张VOCYOLO格式 数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;634 Annotations文件夹中xml文件总计&#xff1a;634 labels文件夹中txt文件总计…