Pandas 提供了 DataFrame 和 Series 等資料結構,能有效處理表格資料,進行資料清理、轉換、彙總等操作,並支援時間序列資料處理。PyMongoArrow 則能將 MongoDB 資料轉換成 Pandas、NumPy、PyArrow 和 polars 等格式,方便資料科學家使用熟悉的工具進行分析。本文將示範如何使用 Pandas 建立 DataFrame、進行基本操作,以及如何使用 PyMongoArrow 將 MongoDB 資料轉換為不同格式,以提升資料分析效率。程式碼範例包含 Pandas 的資料建立、欄位選取、過濾和計算,以及 PyMongoArrow 的安裝、連線 MongoDB、資料轉換等步驟,方便讀者快速上手。
使用 Pandas 進行資料分析
Pandas 是一套強大且靈活的開源資料操控和分析函式庫,適用於 Python。它提供瞭如 DataFrame 和 Series 等資料結構,能夠直觀且高效地處理結構化資料。當您需要處理儲存於試算表或資料函式庫中的表格資料時,Pandas 是一個非常適合的工具。使用 Pandas,您可以執行各種操作,包括資料清理、轉換和彙總。
除了其他功能外,Pandas 還提供了對時間序列的優秀支援,並且有一套完整的工具用於處理日期、時間和時間索引資料。此外,Pandas 不僅提供了豐富的數值資料操作方法,也給予了對文字基礎資料的強大支援。
以下是一個簡短的範例,展示瞭如何使用 Pandas 函式庫。首先,您將從一個 Python 字典建立一個 Pandas DataFrame,然後列印預出整個 DataFrame。接著,您將選擇一個特定的欄位(“Age”),並列印它。最後,您將使用 Boolean 遮罩來過濾資料。
安裝 Pandas
首先,您需要安裝 Pandas 函式庫。您可以使用 pip 進行安裝:
pip3 install pandas==1.5.3
匯入 Pandas 函式庫
import pandas as pd
建立 DataFrame
# 定義資料
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']
}
# 建立 DataFrame
df = pd.DataFrame(data)
顯示 DataFrame
print("DataFrame:")
print(df)
您的輸出應該以 Pandas DataFrame 的格式顯示,類別似於圖 7.1。
選擇欄位
print("\nAges:")
print(df['Age'])
您將得到圖 7.2 中所示的輸出。
過濾資料
print("\nPeople older than 25:")
print(df[df['Age'] > 25])
這段程式碼將過濾資料以顯示年齡超過 25 歲的人,然後以 DataFrame 格式輸出結果,如圖 7.3 所示。
執行計算
# 計算平均年齡
average_age = df['Age'].mean()
這樣,您就可以使用 Pandas 函式庫進行各種資料分析和操作。
使用PyMongoArrow進行資料轉換和分析
PyMongoArrow是一個根據官方MongoDB Python驅動程式PyMongo的Python函式庫,允許您將資料從MongoDB資料函式庫轉移到其他流行的Python函式庫中,例如pandas、NumPy、PyArrow和polars。
安裝PyMongoArrow
首先,您需要安裝PyMongoArrow。您可以使用pip進行安裝:
pip3 install PyMongoArrow
匯入必要的函式庫
接下來,您需要匯入必要的函式庫:
import pymongoarrow as pa
import getpass, os, pymongo, pprint
連線到MongoDB資料函式庫
然後,您需要連線到您的MongoDB資料函式庫。您需要提供您的Atlas叢集連線字串:
ATLAS_CONNECTION_STRING = "您的連線字串"
client = MongoClient(ATLAS_CONNECTION_STRING)
將PyMongoArrow功能新增到MongoDB集合
您可以使用patch_all()
函式將PyMongoArrow功能新增到您的MongoDB集合中:
from pymongoarrow.monkey import patch_all
patch_all()
新增測試資料
新增一些測試資料到您的集合中:
client.db.data.insert_many([
{'_id': 1, 'amount': 21, 'last_updated': datetime(2020, 12, 10, 1, 3, 1),
'account': {'name': 'Customer1', 'account_number': 1}, 'txns': ['A']},
{'_id': 2, 'amount': 16, 'last_updated': datetime(2020, 7, 23, 6, 7, 11),
'account': {'name': 'Customer2', 'account_number': 2}, 'txns': ['A', 'B']},
{'_id': 3, 'amount': 3, 'last_updated': datetime(2021, 3, 10, 18, 43, 9),
'account': {'name': 'Customer3', 'account_number': 3}, 'txns': ['A', 'B', 'C']},
{'_id': 4, 'amount': 0, 'last_updated': datetime(2021, 2, 25, 3, 50, 31),
'account': {'name': 'Customer4', 'account_number': 4}, 'txns': ['A', 'B', 'C', 'D']}
])
定義資料結構
您可以定義資料結構來轉換查詢結果:
from pymongoarrow.api import Schema
schema = Schema({'_id': int, 'amount': float, 'last_updated': datetime})
執行查詢和轉換
執行查詢和轉換查詢結果到不同資料格式:
df = client.db.data.find_pandas_all({'amount': {'$gt': 0}}, schema=schema)
arrow_table = client.db.data.find_arrow_all({'amount': {'$gt': 0}}, schema=schema)
df = client.db.data.find_polars_all({'amount': {'$gt': 0}}, schema=schema)
ndarrays = client.db.data.find_numpy_all({'amount': {'$gt': 0}}, schema=schema)
從資料處理效率與生態整合的角度來看,Pandas 與 PyMongoArrow 提供了 Python 資料科學家強大的工具。Pandas 以其直觀的 DataFrame 和 Series 資料結構,簡化了資料清理、轉換和分析流程,尤其在處理表格資料和時間序列資料方面表現出色。然而,當資料量龐大且儲存於 MongoDB 等資料函式庫時,直接使用 Pandas 可能會遇到效能瓶頸。PyMongoArrow 的出現有效地解決了這個問題,它提供了橋樑,讓 MongoDB 資料得以無縫轉換至 Pandas、NumPy、PyArrow 和 Polars 等 Python 資料分析生態系統中的核心套件,大幅提升了資料處理效率。
PyMongoArrow 不僅加速了資料提取和轉換,更重要的是,它讓資料科學家能更專注於資料分析本身,而非資料搬運的繁瑣細節。透過預先定義 Schema,PyMongoArrow 更可確保資料型別一致性,減少錯誤並提升分析可靠度。然而,Schema 的定義需要事先了解資料結構,這在處理非結構化或半結構化資料時可能增加額外負擔。此外,PyMongoArrow 的效能也受網路連線和 MongoDB 伺服器效能影響。
展望未來,隨著 Python 資料科學生態的蓬勃發展,預期 PyMongoArrow 將持續最佳化與更多資料處理框架的整合,並提升資料轉換效率。同時,更智慧的 Schema 推斷機制和更完善的錯誤處理機制也將是未來發展的重點。對於注重資料處理效能和跨平臺整合的資料科學團隊而言,PyMongoArrow 結合 Pandas 等分析工具,將是提升生產力的關鍵策略。建議團隊評估自身資料處理流程,並將 PyMongoArrow 整合至現有工作流程中,以充分釋放其潛力。