【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.pswp.cn/diannao/70471.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70471.shtml
英文地址,請注明出處:http://en.pswp.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 接口文檔 中已經說明,使用騰訊的話需要開啟云服務,具體可看官網,這就是為什么使用時直接不顯示的原因,所以我使用的高德,但又出現…