【ETL】从理论到Python实践的数据处理

引言

ETL(Extract, Transform, Load)是一种数据处理过程,用于将数据从一个或多个源提取出来,进行清洗、转换和整合,然后加载到目标数据仓库或数据库中。ETL 是数据仓库和数据分析领域中不可或缺的一部分,广泛应用于企业数据集成、数据迁移和数据治理等场景。

一、ETL的基础与工作原理

ETL 的工作原理可以分为三个核心阶段:提取(Extract)、转换(Transform)和加载(Load)。

1. 提取(Extract)
  • 定义:从数据源中读取数据。

  • 功能:提取阶段的主要任务是从各种数据源中获取数据,并将其传输到中间存储区域(如暂存区或内存)

2. 转换(Transform)
  • 定义:对提取的数据进行清洗、转换和整合。

  • 功能

    • 数据清洗:去除重复数据、填补缺失值、纠正错误数据等。

    • 数据转换:将数据格式从一种格式转换为另一种格式,例如日期格式转换、数值单位转换等。

    • 数据整合:将来自多个数据源的数据进行合并,消除数据冗余,实现数据的一致性。

    • 数据聚合:对数据进行汇总和统计,例如计算总和、平均值等。

    • 数据映射:将数据字段映射到目标数据仓库的表结构中。

3. 加载(Load)
  • 定义:将转换后的数据加载到目标数据仓库中。

  • 功能

    • 数据插入:将数据插入目标数据仓库的表中。

    • 数据更新:如果目标数据仓库中已存在数据,则需要根据业务逻辑进行更新。

    • 数据删除:在某些情况下,可能需要删除目标数据仓库中不再需要的数据。

二、ETL过程中的工具选择与实际操作

提取数据的ETL流程可能会选择不同的工具来执行每一个步骤,下面来介绍几种常见的ETL工具,并具体解释每个步骤

1. 提取(Extract)

提取数据通常是从外部数据源(如数据库、API或文件)获取数据。以下是常见的工具和技术

SQL查询:对于关系型数据库(如MySQL、PostgreSQL)、通常使用SQL查询语句来提取数据

APIS:对于第三方服务的数据,可能需要调用API来提取数据(例如:Python的requests库)。

日志文件:使用文件读取工具(Python的pandas或csv库)来读取存储在日志中的数据

代码示例:从MySQL提取数据

import pymysql
import pandas as pd
from sqlalchemy import create_engine # 创建 SQLAlchemy 引擎
engine = create_engine('mysql+pymysql://root:root@localhost/homedo')
#创建sql
sql_query = """select account_id,order_id,order_date,sum(received_amount) as amount 
from dwd_trd_order_order 
where order_date >= '2024-05-01'
group by account_id,order_id,order_date;"""
# 使用 SQLAlchemy 引擎执行查询并将结果加载到 DataFrame 中
df = pd.read_sql(sql_query, engine)# 关闭引擎连接(可选,因为 SQLAlchemy 会自动管理连接)
engine.dispose()# 打印结果
print(df.head())
2. 转换(Transform)
  1. 转换是ETL流程中的核心步骤,涉及对数据的清洗、格式化和转换
  2. 数据清洗:去除重复项,处理缺失值、数据格式化
  3. 数据标准 :统一日期格式等
  4. 数据聚合计算:计算总销售、平均价格等

代码示例:

dfs = pd.DataFrame(df)
#假设df从数据库提取的数据
dfs['order_date'] = pd.to_datetime(df['order_date'], errors='coerce')
# 替换空值(NaT)为默认日期
default_date = pd.to_datetime('2025-01-01')
dfs['order_date'] = dfs['order_date'].fillna(default_date) 
print(df)
3. 加载(Load)

此处是加载到MySQL数据库中

df = pd.DataFrame(dfs)
#创建MySQL数据库连接
engine = create_engine('mysql+pymysql://root:root@localhost/homedo')
#将DataFrame加载到数据库中的指定表格
df.to_sql('dwd_index',engine,if_exists='replace',index=False)
print('数据加载成功!')

三、ETL操作流程:

1. 需求分析
  • 确定数据源和目标数据仓库。

  • 明确数据处理需求(如数据清洗、转换、实时性等)。

2. 工具选择
  • 根据需求选择合适的ETL工具。例如:

    • 如果需要强大的数据转换功能,可以选择Kettle。

    • 如果需要实时数据处理,可以选择Apache NiFi。

    • 如果需要简单易用的工具,可以选择ETLCloud。

3. 数据提取(Extract)
  • 配置数据源连接,从源系统中提取数据。

  • 使用ETL工具的连接器或适配器支持多种数据源。

4. 数据转换(Transform)
  • 清洗数据,去除重复、填补缺失值。

  • 转换数据格式,如日期格式、数值单位等。

  • 整合数据,消除冗余,实现一致性。

5. 数据加载(Load)
  • 将转换后的数据加载到目标数据仓库。

  • 根据需求选择批量加载或实时加载。

6. 监控与维护
  • 监控ETL流程的运行状态,确保数据的完整性和一致性。

  • 定期维护ETL任务,优化性能。

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

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

相关文章

若依Flowable工作流版本监听器使用方法

1.前言 本文详细介绍如何在若依Flowable工作流版本(RuoYi-Vue-Flowable)中配置执行监听器和任务监听器。是以我二次开发的代码为基础,介绍如何配置监听器,已解决源码在新增或删除监听器出现的问题,如果需要二次开发的…

纷析云开源版- Vue2-增加字典存储到localStorage

main.js //保存字典数据到LocalStorage Vue.prototype.$api.setting.SystemDictType.all().then(({data}) > {loadDictsToLocalStorage(data) })新增 dictionary.js 放在 Utils文件夹里面 // 获取字典数据 export function getDictByType(dictType) {const dicts JSON.par…

jQuery UI CSS 框架 API

jQuery UI CSS 框架 API 概述 jQuery UI 是一个基于 jQuery 的用户界面和交互库,它提供了一套丰富的交互组件和视觉效果,旨在帮助开发者快速构建具有吸引力和互动性的网页应用。jQuery UI CSS 框架 API 是 jQuery UI 的一部分,它允许开发者通过简单的 CSS 类来控制 UI 组件…

VSCode自定义快捷键和添加自定义快捷键按键到状态栏

VSCode自定义快捷键和添加自定义快捷键按键到状态栏 📄在VSCode中想实现快捷键方式执行某些指令操作,可以通过配置组合式的键盘按键映射来实现,另外一种方式就是将执行某些特定的指令嵌入在面板菜单上,在想要执行的时候&#xff0…

【C语言】指针(5)

前言:上篇文章的末尾我们使用了转移表来解决代码冗余的问题,那我们还有没有什么办法解决代码冗余呢?有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一,回调函数二,qsort实现快速排序1…

【python】网页批量转PDF

安装wkhtmltopdf 网站:wkhtmltopdf wkhtmltopdf http://www.baidu.com/ D:website1.pdf 安装pdfkit库 pip install pdfkit 批量转换代码 import os import pdfkit path_wkthmltopdf rE:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe config pdfkit.configu…

游戏引擎学习第113天

仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板:优化的基本过程 在游戏编程中,优化是一个非常重要的学习内容,尤其是想要成为专业开发者时。优化的核心是理解代码的执行速度,以及如何提升其性能。在这个阶段,已经…

通义灵码AI程序员

通义灵码是阿里云与通义实验室联合打造的智能编码辅助工具,基于通义大模型技术,为开发者提供多种编程辅助功能。它支持多种编程语言,包括 Java、Python、Go、TypeScript、JavaScript、C/C、PHP、C#、Ruby 等 200 多种编码语言。 通义灵码 AI…

SeaTunnel社区「Demo方舟计划」首期活动上线—— MySQL CDC实时同步至PostgreSQL实战

引言 凌晨2点,某电商公司的数据工程师小李正对着屏幕抓狂——业务部门临时要求将MySQL的订单表实时同步到PostgreSQL进行分析,众所周知,在数据驱动的业务场景中,异构数据源同步是高频刚需。 以MySQL到PostgreSQL的CDC同步为例&a…

iNeuOS工业互联网操作系统,民爆远程运维平台案例

iNeuOS工业互联网操作系统,民爆远程运维平台案例 目 录 1. 概述... 2 2. iNeuOS在民爆生产厂区和北京运维中心配置... 3 1.1 生产厂区配置... 3 1.2 运维中心配置... 7 1. 概述 针对本项目进行初步调研,项目的总体需求为满足新建…

利用websocket检测网络连接稳定性

浏览器中打开F12,控制台中输入以下内容 > 回车 > 等待结果 连接关闭 表示断网 let reconnectDelay 1000; // 初始重连间隔 let pingInterval null; let socketManuallyClosed false; // 标志是否手动关闭function createWebSocket() {if (socketManuallyCl…

Unity shader glsl着色器特效之 模拟海面海浪效果

一个简单的海浪效果,通过波的叠加实现水面起伏的动效,根据波峰斜率来为浪花着色,再根据法线贴图和水花贴图来和调整uv的平滑移动来增强海浪移动的细节。如果需要更逼真的效果可以考虑在满足浪花触发的地方添加粒子系统 前置效果图 因为是很久…

智能经济与个人智能助理有什么发展

智能经济与个人智能助理有什么发展 技术融合创新 研究个人助理与新兴技术(如量子计算、边缘计算)融合,分析对智能经济的推动作用。探索量子计算提升数据处理速度,边缘计算降低延迟,提升个人助理性能的机制&#xff0…

spring日志

前言 入门 这些就是日志 现在开始使用一下 spring是集合了日志的 注意选这个 这样我们就创建好了一个日志对象了 我们就可以这样打印日志了 日志和普通的打印消息相比,区别就是多个一些时间之类的消息 从左到右分别是时间,级别,PID&#x…

整合Salesmart/WhatsApp、开源Odoo模块和Deepseek AI能力,实现针对国外客户的智能客服和个性化推荐服务

一、项目背景 本文提出了一套针对软管制造公司的智能客服与个性化推荐系统实施方案,旨在通过整合开源Odoo模块、Salesmart/WhatsApp以及Deepseek AI能力,打造一个724小时不间断服务的智能化平台,专注于服务国外客户。方案围绕实现不间断服务…

Java中JDK、JRE,JVM之间的关系

Java中的JDK、JRE和JVM是三个核心概念,其关系可概括为JDK > JRE > JVM,具体如下: 一、定义与作用 JDK(Java Development Kit) 定义:Java开发工具包,用于开发和编译Java程序。包含内容&…

用C++ Qt实现安卓电池充电动效 | 打造工业级电量控件

一、为什么需要自定义电池控件? 在工业控制、车机系统、智能硬件等领域的UI开发中,电池状态显示是高频出现的UI组件。通过实现一个支持颜色渐变、动态充电动画、警戒阈值提示的电池控件,开发者可以系统掌握以下核心能力: Qt绘图…

Django+Vue3全栈开发实战:从零搭建博客系统

文章目录 1. 开发环境准备2. 创建Django项目与配置3. 设计数据模型与API4. 使用DRF创建RESTful API5. 创建Vue3项目与配置6. 前端页面开发与组件设计7. 前后端交互与Axios集成8. 项目优化与调试9. 部署上线10. 总结与扩展10.1 项目总结10.1.1 技术栈回顾10.1.2 项目亮点 10.2 扩…

Django 5实用指南(五)模板系统

Django5的模板系统是其核心功能之一,允许开发者将动态数据嵌入到HTML模板中,并根据不同的业务需求渲染页面。Django模板系统基于 Django模板语言(DTL),它提供了一些强大的功能,如模板标签、过滤器、条件语句…

uni-app开发app时 使用uni.chooseLocation遇到的问题

问题一:不显示 问题二:选择地址列表一直在加载中 因为 uni-app 接口文档 中已经说明,使用腾讯的话需要开启云服务,具体可看官网,这就是为什么使用时直接不显示的原因,所以我使用的高德,但又出现…