【Python】Python在ETL處理的事先準備 - CSV、Excel、SQLite和SQLAlchemy

閱讀時間約 14 分鐘

什麼是ETL?

讓GPT大大來教教我們www

ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區中,為進一步的資料分析做準備。

其中包含三個部分:
- 抽取(Extract):從各種來源系統(如關係型資料庫、檔案等)中抽取出所需的資料。
- 轉換(Transform):對抽取出的原始資料進行清理、轉換、整合等處理,使它們能夠被載入到目標系統。例如解決不一致的問題、轉換資料格式、合併重複資料等。
-載入(Load):將處理好的資料載入到目標資料倉儲或其他資料存放區中,為後續的資料分析、商業智能等做準備。

ETL過程通常是自動化的,透過工具或自行開發的程式來執行。Python同樣可以用於開發ETL流程,利用如Pandas、SQLAlchemy等庫進行資料處理

恩,笨笨的我就把它當作是,對於文檔處理的一個過程吧。那既然提到要處理文檔,python在進行資料處理的,csv、execl、資料庫這些名詞就浮出來了,那本篇想來寫一下這部分。


python處理csv

===== NOTE: 基本讀csv文件的方式 =====

import csv

with open("./DataFile/file.csv", mode="r", newline="", encoding="utf8") as f:
csv_data = csv.reader(f)
for i in csv_data:
print(i)
print(i[1].title())


===== NOTE: 基本寫csv文件的方式 =====

import csv

data = [
['a', 'b', 'c'],
['1', '2', '3'],
['x', 'y', 'z']
]

with open("./OutPutFile/new_file.csv", mode="w", newline="", encoding="utf8") as f:
csv_writer = csv.writer(f, delimiter=",")
for row in data:
csv_writer.writerow(row)


python處理xslx

首先要來了解一下,excel中下方的工作表,在英文中是worksheet

要先安裝指令
> pip install openpyxl

===== NOTE: 基本讀excel文件的方式 =====

from openpyxl import load_workbook

wb = load_workbook("./DataFile/Dodgers.xlsx")
result = []

ws = wb.worksheets[0] # 第一個工作表
for i in ws.iter_rows(): # 選擇行
result.append([j.value for j in i]) # 選擇列

print(result,end="\n")


# TODO: 計算全肥打
sum = 0
for i in result[1:]:
sum+=int(i[11])
print(f"the total homerun:{sum}")

===== NOTE: 基本寫excel文件的方式 =====

讀csv轉成excel

from openpyxl import Workbook
import csv

data_rows = []
with open("./DataFile/file.csv", mode="r", newline="", encoding="utf8") as f:
csv_data = csv.reader(f)
for i in csv_data:
data_rows.append(i)

wb = Workbook()
ws = wb.active
ws.title = "my_file" # 工作表平稱
# 工作表頁籤底色
ws.sheet_properties.tabColor="1072BA"
for i in data_rows:
ws.append(i)

wb.save("./OutputFile/my_file.xlsx")

資料庫 - sqlite3

這邊以sqlite3做示範,因為sqlite3本身就是python的核心liberay之一。

===== NOTE: sqlite3 CRUD =====

這邊直接將CRUD寫在同在一起,再視需求去刪除/下註解(不要傻傻直接複製貼上就執行歐)

import sqlite3

# NOTE:建立db
# sqlite3.connect(":memory:") 會將dn建立在快取記憶體,那當電腦關機時,這個db就會消失
conn = sqlite3.connect("datafile.db")
cursor = conn.cursor()

# 新增資料庫
cursor.execute("""
create table people (
id integer primary key,
name text,
count integer
)
""")
conn.commit() # 執行sql



# NOTE:新增資料
cursor.execute("""
insert into people (name, count) values (?, ?)
""", ("alice", 30))
conn.commit() # 執行sql



# NOTE:取資料(這樣的寫法可以防止sql injection)
result = cursor.execute("""select * from people where name = :username""", {"username":"bob"})
print(result.fetchmany(1)) # 取x筆資料



# NOTE:更新資料
cursor.execute("""
update people set count = 25 where name = 'bob'
""")
conn.commit() # 執行sql
result = cursor.execute("""select * from people""")
print(result.fetchall()) # 取所有資料




# NOTE:刪除資料
cursor.execute("""
delete from people where name = 'bob'
""")
conn.commit() # 執行sql



conn.close() # 關閉資料

SQL alchemy 更好的處理資料

ORM(Object-Relational Mapping)是一種程式設計技術,用於實現物件導向程式設計語言與關聯式資料庫的互操作。其主要目的是通過一個物件虛擬層,將資料庫中的表映射為程式設計語言中的物件,開發人員可以直接使用面向對象的概念來操作資料庫,而不需要編寫大量的 SQL 語句。

安裝指令
> pip install sqlalchemy

===== DOC: ORM - 使用sqlalchemy =====

使用了 SQLAlchemy 的 Core API,通過創建表格對象來操作數據庫

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy.orm import sessionmaker

# NOTE: 根據需求調整
class CFG:
database_name = "datafile.db"
database_server = "sqlite"

# 数据库配置
DATABASE_URL = f"{CFG.database_server}:///{CFG.database_name}"

# 定义模型
engine = create_engine(DATABASE_URL)
metadata = MetaData()

# 創建資料表
people = Table("people", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("count", Integer)
)
# 创建表
metadata.create_all(engine)

# 初始化数据库
def initialize_database():
Session = sessionmaker(bind=engine)
session = Session()

# NOTE: 插入一条数据
new_person = {"name": "Bob", "count": 40}
session.execute(people.insert(), new_person)
session.commit()

# NOTE: 無條件查询
result = session.query(people).all()
for i in result: print(i)

# NOTE: 有條件查询
result = session.query(people).filter_by(name="Alice").all()
for i in result: print(i)

session.close()

# 执行初始化
if __name__ == "__main__":
initialize_database()

那接下來,引入sqlalchemy

使用了 ORM 功能,通過定義對象和類來映射數據庫表格

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 定义基类
Base = declarative_base()

# NOTE: 根據需求調整
class CFG:
database_name = "datafile.db"
database_server = "sqlite"


class People(Base):
__tablename__ = "people"
id = Column(Integer, primary_key=True)
name = Column(String)
count = Column(Integer)

def __repr__(self):
return f"<People(id={self.id}, name={self.name}, count={self.count})>"

# 数据库配置
DATABASE_URL = f"{CFG.database_server}:///{CFG.database_name}"

# 创建数据库引擎
engine = create_engine(DATABASE_URL)
Base.metadata.create_all(engine)


# 初始化数据库
def initialize_database():
Session = sessionmaker(bind=engine)
session = Session()

new1 = People(name="Jane", count=5)
new2 = People(name="Mark", count=10)
session.add(new1)
session.add(new2)
session.commit()

# NOTE: 無條件查询
result = session.query(people).all()
for i in result: print(i)

session.close()


# 执行初始化
if __name__ == "__main__":
initialize_database()


🥰以上是本文所分享的內容。如果您發現任何錯誤或遺漏,請不吝賜教。

4會員
10內容數
留言0
查看全部
發表第一個留言支持創作者!
W. C. Chen的沙龍 的其他內容
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
啊,,,,,是這個樣子的,這是我今正在做的東西, 目前做到的進度是, unity醬可以上下左右,搭配上timeline預先設定好路線,創造出往前樣子,那第一次寫發射砲彈的東西,就來記錄一下。 子彈(粒子效果) 這邊我還很爛QQ,但網路上有推薦文章,這篇真的介紹的很詳細: Unity Part
這一篇文章,我想來談談模板語言(template language/engine)。而其中比較有名的為handlebar、pug、ejs。那我會的事後兩著,因此拿這兩個出來寫一篇文章。 Pug 指令:npm install pug 比起 HTML 的語法,pug 語法可以說簡潔很多。 那下面
新版Input System 要先來調整設定: (如果日後發現移動不了,可能是這邊有出問題,可以把這邊視為一個檢查點) 下載Input System 在script中的寫法: (這邊的功能是讀取移動的值而已,主要目的是讓unity讀到movement,絕對不是托篇幅的拉🥺) using
今天在練習寫網頁時,剛好要來有做到Dark Mode 的功能,那順便來記錄一下做法~ 首先要先知道Dark Mode的運作原理。是如何知道你現在是Light Mode還是Dark Mode呢? 😀就是這邊拉~當你按下按鈕時,javascript 的toggle()去為<html>增加dark標
當然指令不是背的,所以第一步就是要打開Tailwind CSS的官網。 Installation - Tailwind CSS 主要的方式有CLI跟CDN,這裡使用的方式前者。 Install Tailwind CSS npm install -D tailwindcss npx tai
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
啊,,,,,是這個樣子的,這是我今正在做的東西, 目前做到的進度是, unity醬可以上下左右,搭配上timeline預先設定好路線,創造出往前樣子,那第一次寫發射砲彈的東西,就來記錄一下。 子彈(粒子效果) 這邊我還很爛QQ,但網路上有推薦文章,這篇真的介紹的很詳細: Unity Part
這一篇文章,我想來談談模板語言(template language/engine)。而其中比較有名的為handlebar、pug、ejs。那我會的事後兩著,因此拿這兩個出來寫一篇文章。 Pug 指令:npm install pug 比起 HTML 的語法,pug 語法可以說簡潔很多。 那下面
新版Input System 要先來調整設定: (如果日後發現移動不了,可能是這邊有出問題,可以把這邊視為一個檢查點) 下載Input System 在script中的寫法: (這邊的功能是讀取移動的值而已,主要目的是讓unity讀到movement,絕對不是托篇幅的拉🥺) using
今天在練習寫網頁時,剛好要來有做到Dark Mode 的功能,那順便來記錄一下做法~ 首先要先知道Dark Mode的運作原理。是如何知道你現在是Light Mode還是Dark Mode呢? 😀就是這邊拉~當你按下按鈕時,javascript 的toggle()去為<html>增加dark標
當然指令不是背的,所以第一步就是要打開Tailwind CSS的官網。 Installation - Tailwind CSS 主要的方式有CLI跟CDN,這裡使用的方式前者。 Install Tailwind CSS npm install -D tailwindcss npx tai
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
隨著數據越來越成為商業和決策的關鍵因素,數據科學變得越來越重要。而Python,作為一個強大且多用途的編程語言,在數據科學領域中佔有重要地位。不管你是想在工作上提升技能,還是在個人生活中探索數據,Python都可以幫助你解鎖數據的力量。本文將介紹Python在數據科學中的應用,並提供一些入門指南,讓
Thumbnail
1. 詳細的 python 安裝流程(不需要 anaconda) 2. 透過「命令提示字元」啟動 python 的方法
Thumbnail
最近正好在研究「silero-vad」這套工具, 但根據官方教學,預設的載入方式會從網路上進行下載模型的動作: model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
Thumbnail
Python是一款多功能且易於學習的程式語言,廣泛用於Web開發、數據分析和人工智能。學習起來有其挑戰性,但初學者可在短時間內體驗到成就感。市場對Python需求旺盛,成為職場上的重要技能。我們的課程提供從Python到PHP的全面學習,並重點教授實戰技巧如爬蟲和資料視覺化。現是投身編程的絕佳時機。
使用Python的Threading模組設計一個能夠在背景待命的程式,並在等待5秒後自動結束。我們將使用執行緒來執行背景任務,並使用定時等待來控制程式的結束時間。這種方法適用於不依賴於特定按鍵事件的情況,而是在固定的時間後自動退出程式。
Thumbnail
在Microsoft store 搜尋 kail linux 並安裝(這裡假設你已經先安裝WSL) 之後執行kail linux 終端機 依序輸入以下指令: 上面主要是做一些更新(update and upgrade),然後安裝python3, python3-venv(虛擬環境)之後建立一個名為b
Thumbnail
你有沒有錯過 Binance 上的一個大型加密硬幣泵? 也許您正忙於工作,或者只是不夠快而無法抓住機會。 這是一種令人沮喪的感覺,尤其是當你看到價格在你眼前飛漲時。 但是,如果有一種方法可以實時識別這些爆漲? 在本文中,我們將向您展示如何使用 Python 快速輕鬆地識別加密貨幣暴漲。
Thumbnail
資料科學家、數據分析師是近幾年新興,而且熱門的職業,而DataCamp是一個專精於資料科學的程式教學網站。在實務上會用到的各種知識與程式技能,從流程面的網路爬蟲、數據清洗、資料視覺化,到技術面的Python、R語言、SQL,在DataCamp上幾乎都可以找到相關教學。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
隨著數據越來越成為商業和決策的關鍵因素,數據科學變得越來越重要。而Python,作為一個強大且多用途的編程語言,在數據科學領域中佔有重要地位。不管你是想在工作上提升技能,還是在個人生活中探索數據,Python都可以幫助你解鎖數據的力量。本文將介紹Python在數據科學中的應用,並提供一些入門指南,讓
Thumbnail
1. 詳細的 python 安裝流程(不需要 anaconda) 2. 透過「命令提示字元」啟動 python 的方法
Thumbnail
最近正好在研究「silero-vad」這套工具, 但根據官方教學,預設的載入方式會從網路上進行下載模型的動作: model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
Thumbnail
Python是一款多功能且易於學習的程式語言,廣泛用於Web開發、數據分析和人工智能。學習起來有其挑戰性,但初學者可在短時間內體驗到成就感。市場對Python需求旺盛,成為職場上的重要技能。我們的課程提供從Python到PHP的全面學習,並重點教授實戰技巧如爬蟲和資料視覺化。現是投身編程的絕佳時機。
使用Python的Threading模組設計一個能夠在背景待命的程式,並在等待5秒後自動結束。我們將使用執行緒來執行背景任務,並使用定時等待來控制程式的結束時間。這種方法適用於不依賴於特定按鍵事件的情況,而是在固定的時間後自動退出程式。
Thumbnail
在Microsoft store 搜尋 kail linux 並安裝(這裡假設你已經先安裝WSL) 之後執行kail linux 終端機 依序輸入以下指令: 上面主要是做一些更新(update and upgrade),然後安裝python3, python3-venv(虛擬環境)之後建立一個名為b
Thumbnail
你有沒有錯過 Binance 上的一個大型加密硬幣泵? 也許您正忙於工作,或者只是不夠快而無法抓住機會。 這是一種令人沮喪的感覺,尤其是當你看到價格在你眼前飛漲時。 但是,如果有一種方法可以實時識別這些爆漲? 在本文中,我們將向您展示如何使用 Python 快速輕鬆地識別加密貨幣暴漲。
Thumbnail
資料科學家、數據分析師是近幾年新興,而且熱門的職業,而DataCamp是一個專精於資料科學的程式教學網站。在實務上會用到的各種知識與程式技能,從流程面的網路爬蟲、數據清洗、資料視覺化,到技術面的Python、R語言、SQL,在DataCamp上幾乎都可以找到相關教學。