【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()


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

留言
avatar-img
留言分享你的想法!
avatar-img
W. C. Chen的沙龍
4會員
10內容數
W. C. Chen的沙龍的其他內容
2024/03/27
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
2024/03/27
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
2023/08/29
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
Thumbnail
2023/08/29
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
Thumbnail
2023/08/29
啊,,,,,是這個樣子的,這是我今正在做的東西, 目前做到的進度是, unity醬可以上下左右,搭配上timeline預先設定好路線,創造出往前樣子,那第一次寫發射砲彈的東西,就來記錄一下。 子彈(粒子效果) 這邊我還很爛QQ,但網路上有推薦文章,這篇真的介紹的很詳細: Unity Part
Thumbnail
2023/08/29
啊,,,,,是這個樣子的,這是我今正在做的東西, 目前做到的進度是, unity醬可以上下左右,搭配上timeline預先設定好路線,創造出往前樣子,那第一次寫發射砲彈的東西,就來記錄一下。 子彈(粒子效果) 這邊我還很爛QQ,但網路上有推薦文章,這篇真的介紹的很詳細: Unity Part
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
我們在學習kafka的過程中最不習慣的就是不管什麼樣的資料, 在kafka的傳輸過程都會是binary的資料格式, 因此我們在撰寫程式的過程中並不是那麼的直觀, 必須將資料從float、int…資料型態轉型成binary才能順利傳送, 那麼基於這樣的前提之下, python這套程式語言可以怎麼做
Thumbnail
我們在學習kafka的過程中最不習慣的就是不管什麼樣的資料, 在kafka的傳輸過程都會是binary的資料格式, 因此我們在撰寫程式的過程中並不是那麼的直觀, 必須將資料從float、int…資料型態轉型成binary才能順利傳送, 那麼基於這樣的前提之下, python這套程式語言可以怎麼做
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
古有四大名著,現今Python四大容器🤣 哪四個?list串列,tuple元組,dict字典,set集合。 那這四個怎麼分? 一起來看看吧! (以下有手寫與上機實際測試請付費觀看) 以上我精心整理主要會使用到的功能 當然python功能太多了,肯定不只。 實際操作: 大概就這樣?(
Thumbnail
古有四大名著,現今Python四大容器🤣 哪四個?list串列,tuple元組,dict字典,set集合。 那這四個怎麼分? 一起來看看吧! (以下有手寫與上機實際測試請付費觀看) 以上我精心整理主要會使用到的功能 當然python功能太多了,肯定不只。 實際操作: 大概就這樣?(
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
教大家如何使用 google colab 讀取雲端硬碟中的資料
Thumbnail
教大家如何使用 google colab 讀取雲端硬碟中的資料
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
列表(List)和元組(Tuple)都是 Python 中用來存儲集合元素的數據結構,兩者看起來很像,在初學時很容易搞混,所以觀念要建立好。 可以把列表(List)和元組(Tuple)想像成是一個容器,什麼元素都可以塞
Thumbnail
列表(List)和元組(Tuple)都是 Python 中用來存儲集合元素的數據結構,兩者看起來很像,在初學時很容易搞混,所以觀念要建立好。 可以把列表(List)和元組(Tuple)想像成是一個容器,什麼元素都可以塞
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News