返回文章列表

Pandas資料處理與分析核心技術

Pandas 提供高效的資料結構與分析工具,簡化資料清理、轉換、分析等任務。文章涵蓋 Pandas 核心資料結構 Series 和 DataFrame 的操作、資料輸入輸出、探索性資料分析、資料清理、進階資料操作技巧,以及與其他函式庫的整合應用。此外,文章也介紹了 SQLite

資料科學 Python

Pandas 作為 Python 資料科學領域的核心函式庫,提供 Series 和 DataFrame 等資料結構,簡化資料操作流程。其支援多種檔案格式的讀寫,方便資料交換。探索性資料分析功能協助使用者快速理解資料特性,搭配資料清理工具,確保資料品質。進階應用包含合併、分組與樞紐分析,滿足複雜分析需求。Pandas 與 NumPy、Matplotlib、Seaborn 等函式庫的整合,提供全面的資料處理與視覺化能力。此外,文章也探討了 SQLite 資料函式庫的操作,涵蓋連線、資料表操作、資料增刪改查等常用功能,並提供交易管理、錯誤處理及效能最佳化建議,讓開發者能更有效率地使用 SQLite 進行資料管理。文章最後也強調了 SQLite 的最佳實踐,包含使用引數化查詢、建立索引、批次操作和定期維護等,以確保資料函式庫的效能和穩定性。

Pandas 資料處理與分析核心技術

Pandas 是 Python 生態系統中最重要的資料分析函式庫之一,提供高效率的資料結構與資料分析工具,協助使用者輕鬆完成資料清理、轉換、分析等任務。

資料結構與基本操作

Pandas 的核心資料結構包括 Series 和 DataFrame,分別用於處理一維和二維資料。瞭解這些資料結構及其操作方法,是有效使用 Pandas 的基礎。

Series 與 DataFrame 範例

import pandas as pd

# 建立 Series 物件
s = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])
print(s)

# 建立 DataFrame 物件
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
print(df)

內容解密:

  1. pd.Series() 用於建立一維的標籤化陣列,能夠儲存任意型別的資料。
  2. pd.DataFrame() 用於建立二維的表格型資料結構,類別似於 Excel 試算表或 SQL 資料表。
  3. Series 和 DataFrame 都具備豐富的屬性和方法,能夠進行各種資料操作。

資料輸入輸出(I/O)操作

Pandas 支援多種檔案格式的讀寫,包括 CSV、Excel、SQL 資料函式庫和 JSON 等,簡化了不同資料來源之間的轉換。

讀寫 CSV 檔案範例

# 讀取 CSV 檔案
df = pd.read_csv('data.csv')
print(df.head())

# 將 DataFrame 寫入 CSV 檔案
df.to_csv('output.csv', index=False)

# 讀取 Excel 檔案
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')

內容解密:

  1. pd.read_csv()df.to_csv() 分別用於讀取和寫入 CSV 檔案。
  2. pd.read_excel() 用於從 Excel 檔案讀取資料,支援多個工作表的操作。
  3. Pandas 的 I/O 操作提供了豐富的引數設定,能夠處理缺失值、指定資料型別等需求。

探索性資料分析(EDA)

EDA 是資料分析的重要步驟,涉及資料的摘要統計和視覺化,以發現資料中的模式、關係和異常。

描述性統計範例

# 計算描述性統計
summary = df.describe()
print(summary)

# 檢視資料資訊
print(df.info())
print(df.head())

內容解密:

  1. df.describe() 自動計算數值欄位的摘要統計資訊,包括平均值、標準差等。
  2. df.info() 提供 DataFrame 的詳細資訊,如欄位名稱、資料型別和非空值數量。
  3. df.head() 顯示 DataFrame 的前幾行資料,便於快速檢視。

資料清理與準備

資料清理是確保資料品質和分析準確性的關鍵步驟,涉及處理缺失值、過濾資料和資料轉換。

處理缺失值與資料過濾範例

# 處理缺失值
df.fillna(0, inplace=True)
df.dropna(subset=['Column1'], inplace=True)

# 資料過濾
filtered_df = df[df['Age'] > 30]

# 資料轉換
df['Height_m'] = df['Height_cm'] / 100

內容解密:

  1. df.fillna()df.dropna() 用於處理缺失值,前者填充特定值,後者刪除缺失值所在的行。
  2. 布林索引(如 df['Age'] > 30)用於篩選符合條件的資料。
  3. 新增欄位 Height_m,將身高從公分轉換為公尺。

資料操作進階應用

Pandas 提供強大的資料操作功能,包括合併(merge)、分組(groupby)和樞紐分析(pivot),能夠滿足複雜的資料分析需求。

合併與連線範例

# 合併 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value2': [4, 5, 6]})
merged = pd.merge(df1, df2, on='key', how='inner')

# 連線 DataFrame
concat_df = pd.concat([df1, df2], axis=0, ignore_index=True)

內容解密:

  1. pd.merge() 用於根據共用鍵合併兩個 DataFrame,支援多種合併方式(如 inner、left、right)。
  2. pd.concat() 用於沿指定軸連線多個 DataFrame 或 Series。

與其他函式庫整合

Pandas 能夠與 NumPy、Matplotlib 和 Seaborn 等函式庫無縫整合,提供全面的統計分析和視覺化功能。

資料視覺化範例

import matplotlib.pyplot as plt
import seaborn as sns

# 使用 Pandas 和 Matplotlib 繪製直方圖
df['Height_m'].plot(kind='hist')
plt.show()

# 使用 Seaborn 繪製箱型圖
sns.boxplot(x=df['Category'], y=df['Value'])
plt.show()

內容解密:

  1. Pandas 與 Matplotlib 結合,能夠直接在 DataFrame 上呼叫 plot() 方法進行視覺化。
  2. Seaborn 提供更進階的視覺化功能,如箱型圖,用於展示不同類別間的數值分佈。

績效最佳化

在處理大型資料集時,Pandas 的效能最佳化至關重要。最佳化策略包括使用適當的資料型別、向量化操作,以及利用 Dask 等函式庫擴充套件運算能力。

績效最佳化範例

# 最佳化資料型別
df['Category'] = df['Category'].astype('category')

# 使用 Dask 處理大型資料集
import dask.dataframe as dd
df_dask = dd.read_csv('large_data.csv')
print(df_dask.head())

內容解密:

  1. 將分類別欄位轉換為 category 資料型別,可以減少記憶體使用量。
  2. Dask 是 Pandas 的擴充套件,能夠處理超出記憶體容量的大型資料集。

SQLite 資料函式庫連線與操作

SQLite 是輕量級且功能完整的 SQL 資料函式庫引擎,廣泛應用於需要結構化資料儲存和管理的應用程式中。Python 的 sqlite3 模組提供了 DB-API 2.0 相容的介面,方便開發者與 SQLite 資料函式庫互動。

連線 SQLite 資料函式庫

SQLite 資料函式庫儲存為副檔名為 .db 的檔案。使用 sqlite3 的 connect() 方法可以建立或開啟一個 SQLite 資料函式庫檔案,從而進行相關操作。

建立 SQLite 連線範例程式碼

import sqlite3

# 連線到 SQLite 資料函式庫(如果不存在則會建立)
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

程式碼解析

  1. sqlite3.connect('example.db'):建立到 example.db 的連線。如果該檔案不存在,SQLite 將自動建立一個新的資料函式庫檔案。
  2. conn.cursor():建立一個遊標物件,用於執行 SQL 命令並擷取結果。

常見 SQLite 操作

建立表格(CREATE TABLE)

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL
);

SQL 語法解析

  • CREATE TABLE IF NOT EXISTS users:建立名為 users 的表格,如果該表格不存在的話。
  • id INTEGER PRIMARY KEY AUTOINCREMENT:定義主鍵 id,並自動遞增。
  • name TEXT NOT NULLname 為文字型別且不可為空。
  • email TEXT UNIQUE NOT NULLemail 為文字型別,不可重複且不可為空。

新增資料(INSERT)

cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', '[email protected]'))
conn.commit()

程式碼解析

  1. cursor.execute():執行 SQL 命令。這裡使用引數化的 SQL 陳述式,避免 SQL 注入風險。
  2. conn.commit():提交交易,使變更生效。

修改資料(UPDATE)

cursor.execute("UPDATE users SET email = ? WHERE name = ?", ('[email protected]', 'Alice'))
conn.commit()

程式碼解析

  • UPDATE users SET email = ? WHERE name = ?:更新 users 表格中 name'Alice' 的記錄,將其 email 更新為新值。

刪除資料(DELETE)

cursor.execute("DELETE FROM users WHERE name = ?", ('Alice',))
conn.commit()

程式碼解析

  • DELETE FROM users WHERE name = ?:刪除 users 表格中 name'Alice' 的記錄。

查詢資料(SELECT)

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

程式碼解析

  1. cursor.execute("SELECT * FROM users"):執行查詢命令,擷取 users 表格中的所有記錄。
  2. cursor.fetchall():取得所有查詢結果,並以列表形式傳回,每個元素代表一筆記錄。
  3. for row in rows:遍歷查詢結果並列印每一行。

交易管理與錯誤處理

在進行多步操作的情況下,使用交易可以確保資料的一致性。若操作過程中發生錯誤,可以回復交易以避免部分更新導致的資料不一致問題。

交易管理範例程式碼

try:
    cursor.execute("BEGIN TRANSACTION")
    # 多步操作範例
    cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', '[email protected]'))
    cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Charlie', '[email protected]'))
    conn.commit()
except sqlite3.Error as e:
    conn.rollback()
    print(f"發生錯誤: {e}")
finally:
    conn.close()

程式碼解析

  1. cursor.execute("BEGIN TRANSACTION"):開始一個新的交易。
  2. conn.commit():在所有操作成功後提交交易,使變更生效。
  3. conn.rollback():若發生錯誤,回復交易,復原所有變更。
  4. finally: conn.close():無論是否發生錯誤,都關閉資料函式庫連線,避免資源洩漏。

最佳實踐與效能最佳化建議

  • 使用引數化查詢:避免 SQL 注入風險,同時提升查詢效能。
  • 適當使用索引:在查詢頻繁的欄位上建立索引,可顯著提高查詢效能。
  • 批次操作:對於大量插入或更新操作,使用批次處理可減少交易次數,提高效能。
  • 定期維護:定期執行 VACUUM 和 ANALYZE,以最佳化資料函式庫效能。

SQLite 資料函式庫操作與最佳實踐

SQLite 是一種輕量級且高效的資料函式庫系統,廣泛應用於嵌入式系統、應用程式開發及測試環境中。透過 Python 的 sqlite3 模組,開發者能夠輕鬆實作資料函式庫的建立、操作及管理。本文將探討 SQLite 的核心功能、操作技巧及最佳實踐,幫助開發者充分發揮其優勢。

連線 SQLite 資料函式庫

連線 SQLite 資料函式庫是進行任何資料函式庫操作的第一步。開發者可以選擇將資料函式庫儲存在檔案中或記憶體中。

import sqlite3
# 連線到 SQLite 資料函式庫檔案
connection = sqlite3.connect('example.db')
# 或者,使用記憶體資料函式庫
connection = sqlite3.connect(':memory:')

內容解密:

  • sqlite3.connect('example.db'):此指令用於連線或建立一個名為 example.db 的 SQLite 資料函式庫檔案。如果檔案不存在,SQLite 將自動建立它。
  • sqlite3.connect(':memory:'):此指令建立一個記憶體資料函式庫,該資料函式庫僅在連線存在期間有效,適合用於測試或暫時性資料處理。

建立資料表與執行 SQL 陳述式

連線資料函式庫後,可以透過 cursor 物件執行 SQL 陳述式來建立資料表或操作資料。

# 建立 cursor 物件
cursor = connection.cursor()
# 執行 SQL 陳述式建立資料表
cursor.execute('''
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER,
    email TEXT UNIQUE
)
''')

內容解密:

  • cursor = connection.cursor():建立一個 cursor 物件,用於執行 SQL 陳述式。
  • CREATE TABLE users ...:此 SQL 陳述式建立了一個名為 users 的資料表,定義了欄位名稱、資料型別及約束條件,展現了 SQLite 靈活的 SQL 支援能力。

插入、更新與刪除記錄

對資料函式庫的修改涉及 INSERTUPDATEDELETE 等 SQL 命令。這些操作需要透過 commit() 方法提交變更以確保資料持久化。

# 插入資料
cursor.execute('''
INSERT INTO users (name, age, email)
VALUES ('Alice', 30, '[email protected]')
''')
connection.commit()
# 更新記錄
cursor.execute('''
UPDATE users
SET email = '[email protected]'
WHERE name = 'Alice'
''')
connection.commit()
# 刪除記錄
cursor.execute('''
DELETE FROM users
WHERE age < 20
''')
connection.commit()

內容解密:

  • INSERT INTO users ...:插入一筆新資料到 users 資料表中。
  • UPDATE users ...:根據條件更新特定記錄的欄位值。
  • DELETE FROM users ...:根據條件刪除符合的記錄。
  • connection.commit():提交交易,使變更生效。

查詢資料

使用 SELECT 陳述式可以從資料函式庫中檢索資料,並透過 fetchall()fetchone() 方法取得結果集。

# 查詢所有記錄
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
    print(row)
# 使用引數化查詢以避免 SQL 注入風險
email = '[email protected]'
cursor.execute('SELECT * FROM users WHERE email=?', (email,))
print(cursor.fetchone())

內容解密:

  • SELECT * FROM users:查詢 users 資料表中的所有記錄。
  • fetchall():取得所有查詢結果。
  • fetchone():取得單一查詢結果。
  • 使用引數化查詢可以有效避免 SQL 注入攻擊,提升安全性。

交易與平行控制

交易機制確保資料函式庫的一致性,允許將多個操作視為單一單元執行。透過 commit()rollback() 方法控制交易的提交或回復。

try:
    cursor.execute('''
    INSERT INTO users (name, age, email)
    VALUES ('Bob', 23, '[email protected]')
    ''')
    connection.commit()
except sqlite3.Error:
    connection.rollback()

內容解密:

  • 若交易過程中發生錯誤,使用 connection.rollback() 回復交易,以保持資料的一致性。

最佳化技巧

為了提升 SQLite 的效能,可以採用索引、分析查詢計畫及調整組態選項等最佳化策略。

# 建立索引
cursor.execute('CREATE INDEX idx_user_name ON users (name)')
# 分析查詢計畫
cursor.execute('EXPLAIN QUERY PLAN SELECT * FROM users WHERE name=?', ('Bob',))
print(cursor.fetchall())

內容解密:

  • 索引可以加快查詢速度,但需謹慎使用以平衡效能與資源消耗。
  • 使用 EXPLAIN QUERY PLAN 分析查詢執行計畫,有助於進一步最佳化查詢效能。

結束連線與資源管理

完成資料函式庫操作後,應關閉 cursorconnection 以釋放資源,避免記憶體洩漏並確保資料函式庫檔案完整性。

# 關閉 cursor 和 connection
cursor.close()
connection.close()

內容解密:

  • 正確關閉資源是維護最佳資料函式庫效能和資料可靠性的關鍵步驟。

SQLite 使用最佳實踐

遵循最佳實踐可以提升 SQLite 資料函式庫的效能、可攜性和完整性:

  1. 使用交易封裝原子操作,避免不完整的資料操作。
  2. 使用引數化查詢防止 SQL 注入攻擊。
  3. 為頻繁查詢的欄位建立適當的索引,並分析查詢計畫以獲得效能洞察。
  4. 實施健全的資料歸檔和備份策略,確保資料的永續性和可還原性。

SQLite 與 Python 的緊密整合,使得開發者能夠在各種應用場景中實作強健且可擴充套件的資料函式庫操作。掌握 SQLite 的核心功能和最佳實踐,將有助於開發高效、可靠的應用系統。