返回文章列表

Pandas 資料分析實戰

這篇文章探討了 Python 資料分析函式庫 Pandas 的核心功能與應用,涵蓋資料結構、資料處理技巧、時間序列分析、資料視覺化以及效能最佳化等導向。文章以實務操作為導向,提供豐富的程式碼範例與解說,幫助讀者快速掌握 Pandas

資料科學 Python

Pandas 作為 Python 資料科學領域的核心工具,提供高效的資料結構與豐富的資料處理功能,廣泛應用於資料清理、轉換、分析和視覺化。本文涵蓋了 Pandas 的核心概念,包含 Series 和 DataFrame 的建立與操作、資料選擇與指定、資料讀取與儲存、以及資料分組與聚合等。此外,文章也探討了時間序列資料處理、資料視覺化技巧,以及效能最佳化策略,例如使用向量化操作取代迴圈以提升運算效率。透過豐富的程式碼範例與詳細的解說,讀者可以逐步學習如何運用 Pandas 進行資料分析,並將其應用於實際的資料處理任務中。

Pandas 資料分析實戰手冊第三版:Python 科學計算、時間序列與探索性資料分析實用

Pandas 是 Python 生態系統中最重要的資料分析函式庫之一,提供高效的資料結構與豐富的資料處理功能,廣泛應用於科學計算、時間序列分析及探索性資料分析。本文由 Pandas 核心維護者 William Ayd 與知名 Python 教育家 Matthew Harrison 共同撰寫,深入介紹 Pandas 的核心功能與進階應用,並提供豐富的實務範例與最佳實踐。

Pandas 的誕生與發展歷程

Pandas 於 2008 年由 Wes McKinney 建立,最初作為個人資料分析工具箱,後來逐漸發展成為開源社群維護的重要專案。Wes McKinney 在序言中回顧了 Pandas 的發展歷史,指出當時 Python 在統計分析與商業分析領域的應用仍十分有限,而 Pandas 的出現填補了這一空白。如今,Pandas 已成為 Python 資料科學領域的核心工具之一,擁有活躍的開發者社群與數千名貢獻者。

Pandas 核心功能概述

Pandas 提供兩種主要資料結構:Series(一維陣列)與 DataFrame(二維表格),這兩種結構為資料操作提供了靈活且高效的基礎。

import pandas as pd

# 建立簡單的 Series
data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(data)

內容解密:

上述程式碼建立了一個 Series 物件,其中包含資料 [1, 2, 3, 4] 與對應的索引 ['a', 'b', 'c', 'd']。Pandas 的 Series 結構類別似於 Python 中的列表,但具備更豐富的索引功能,能夠支援更複雜的資料操作。

資料讀取與儲存的最佳實踐

Pandas 支援多種檔案格式的讀取與儲存,包括 CSV、Excel、JSON 與 SQL 資料函式庫等。本文將介紹如何使用 Pandas 高效地處理不同格式的資料檔案。

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

# 將 DataFrame 儲存為 CSV 檔案
df.to_csv('output.csv', index=False)

內容解密:

  • pd.read_csv() 用於讀取 CSV 檔案,支援多種引數設定,如指定分隔符、處理缺失值等。
  • to_csv() 方法將 DataFrame 儲存為 CSV 檔案,其中 index=False 表示不儲存索引欄位。

時間序列資料處理

Pandas 提供強大的時間序列處理功能,包括日期範圍生成、時間重取樣與滾動視窗計算等。

# 建立日期範圍
date_range = pd.date_range(start='2023-01-01', periods=10, freq='D')
print(date_range)

內容解密:

此範例使用 pd.date_range() 建立一個包含 10 天的日期範圍,頻率為每日。Pandas 的時間序列功能在金融資料分析、物聯網資料處理等領域具有廣泛的應用價值。

資料清理與轉換技巧

在實際資料分析工作中,資料清理是至關重要的一步。Pandas 提供豐富的資料轉換功能,如處理缺失值、資料型別轉換等。

# 建立範例 DataFrame
df = pd.DataFrame({
    'A': [1, 2, None, 4],
    'B': ['x', 'y', 'z', 'w']
})

# 填補缺失值
df['A'] = df['A'].fillna(df['A'].mean())
print(df)

內容解密:

此範例展示如何使用 fillna() 方法填補數值欄位的缺失值。這裡採用該欄位平均值進行填補,在實際應用中可根據具體情況選擇適當的填補策略。

資料分組與聚合分析

Pandas 的分組聚合功能允許使用者按照某個或多個欄位對資料進行分組,並對每組資料進行聚合運算。

# 建立範例 DataFrame
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Value': [10, 20, 30, 40, 50]
})

# 分組計算總和
grouped = df.groupby('Category')['Value'].sum()
print(grouped)

內容解密:

此範例使用 groupby() 方法按照 Category 欄位進行分組,並計算每組 Value 的總和。這種分組聚合操作在銷售資料分析、使用者行為分析等場景中非常常見。

資料合併與連線操作

Pandas 提供多種資料合併方法,包括內連線、外連線等,能夠滿足不同的資料整合需求。

# 建立兩個範例 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')
print(merged)

內容解密:

此範例展示如何使用 pd.merge() 方法執行內連線操作。內連線只保留兩個 DataFrame 中鍵值相同的記錄,而外連線則會保留所有記錄。

探索性資料分析(EDA)實踐

探索性資料分析是資料分析流程中的重要步驟,旨在透過統計與視覺化手段瞭解資料的基本特徵。Pandas 結合 Matplotlib/Seaborn 等視覺化工具,能夠高效地進行 EDA 工作。

import matplotlib.pyplot as plt

# 建立範例 DataFrame
df = pd.DataFrame({
    'x': range(10),
    'y': [i**2 for i in range(10)]
})

# 繪製折線圖
plt.plot(df['x'], df['y'])
plt.show()

圖表翻譯:

此圖表展示了 x 與 y 之間的關係,其中 y 是 x 的平方。透過視覺化可以直觀地觀察到兩者之間的非線性關係。

pandas 深度解析與實務應用

pandas 是 Python 生態系統中最為重要且廣泛使用的資料分析函式庫之一,其提供了強大的資料結構與資料分析工具,幫助資料科學家與分析師更高效地處理與分析資料。本文將探討 pandas 的核心功能、實務應用及其在資料處理中的關鍵角色。

pandas 基礎架構

pandas 主要提供了兩種核心資料結構:SeriesDataFrame

Series

Series 是一種一維的標籤化陣列,能夠儲存任意型別的資料(整數、浮點數、字串等)。其主要特點包括:

  • 索引(Index):每個元素都有一個對應的索引標籤,用於快速存取與操作資料。
  • 向量化操作:支援多種向量化運算,大幅提升運算效率。
import pandas as pd

# 建立一個簡單的 Series
data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(data)

#### 內容解密:
此範例展示如何建立一個 `Series` 物件程式碼中
1. 匯入 pandas 函式庫並建立一個包含整數的列表
2. 使用 `pd.Series()` 將列表轉換為 `Series`,並指定自定義索引標籤
3. `print(data)` 輸出結果顯示 `Series` 的內容及其對應的索引

DataFrame

DataFrame 是一種二維的標籤化資料結構,可以視為是由多個 Series 組成的字典。其特性包括:

  • 多維資料儲存:能夠儲存多列資料,每列可以是不同的資料型別。
  • 豐富的操作功能:支援列選擇、過濾、合併等多種操作。
# 建立一個簡單的 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'], 
        'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)

#### 內容解密:
此範例展示如何建立一個 `DataFrame`。程式碼中
1. 定義一個包含姓名與年齡資訊的字典
2. 使用 `pd.DataFrame()` 將字典轉換為 `DataFrame`。
3. 輸出結果顯示 `DataFrame` 的結構與內容

資料選擇與指定

pandas 提供了多種靈活的資料選擇方法,包括根據位置的選擇(iloc)與根據標籤的選擇(loc)。

位置選擇

# 使用 iloc 進行位置選擇
data = pd.Series([1, 2, 3, 4])
print(data.iloc[0])  # 輸出第一個元素

#### 內容解密:
此範例展示如何使用 `iloc` 進行位置選擇程式碼中
1. 建立一個 `Series` 物件
2. 使用 `iloc[0]` 存取第一個元素
3. 輸出結果為 `1`,表示成功取得指定位置的資料

標籤選擇

# 使用 loc 進行標籤選擇
data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(data.loc['a'])  # 輸出索引 'a' 對應的元素

#### 內容解密:
此範例展示如何使用 `loc` 進行標籤選擇程式碼中
1. 建立一個帶有自定義索引的 `Series`。
2. 使用 `loc['a']` 存取索引標籤為 'a' 的元素
3. 輸出結果為 `1`,表示成功取得指定標籤的資料

資料輸入輸出(I/O)功能

pandas 支援多種資料格式的讀取與寫入,包括 CSV、Excel、SQL、JSON 等。

CSV 操作

# 讀取 CSV 檔案
df = pd.read_csv('data.csv')
# 將 DataFrame 儲存為 CSV
df.to_csv('output.csv', index=False)

#### 內容解密:
此範例展示如何讀取與寫入 CSV 檔案程式碼中
1. 使用 `pd.read_csv()` 從指定路徑讀取 CSV 檔案並轉換為 `DataFrame`。
2. 使用 `to_csv()``DataFrame` 儲存為新的 CSV 檔案並設定 `index=False` 以避免儲存索引列

資料分組與聚合

pandas 提供強大的分組與聚合功能,能夠對資料進行高效的分組統計。

# 分組並計算平均值
df = pd.DataFrame({'Category': ['A', 'B', 'A', 'B'], 
                   'Value': [10, 20, 30, 40]})
grouped = df.groupby('Category')['Value'].mean()
print(grouped)

#### 內容解密:
此範例展示如何進行資料分組並計算平均值程式碼中
1. 建立一個包含類別與數值的 `DataFrame`。
2. 使用 `groupby()` 按類別進行分組並選取 `Value` 列計算平均值
3. 輸出結果顯示各類別的平均值

pandas 實戰手冊:資料處理與分析技術

資料分析基礎與進階應用

在資料分析的世界中,pandas 是一個不可或缺的強大工具。本文將帶領讀者深入瞭解 pandas 的核心功能與應用,從基礎的資料操作到進階的資料分析技術,都將進行全面性的探討。

第 6 章:資料視覺化

資料視覺化是資料分析中至關重要的一環。透過視覺化的方式,我們可以更直觀地理解資料的分佈、趨勢和相關性。

建立聚合資料圖表

使用 pandas 和 Matplotlib,可以輕鬆地從聚合資料中建立各種圖表。以下是一個簡單的範例:

import pandas as pd
import matplotlib.pyplot as plt

# 建立範例資料
data = {'類別': ['A', 'B', 'C', 'A', 'B', 'C'],
        '數值': [10, 20, 30, 15, 25, 35]}
df = pd.DataFrame(data)

# 聚合資料
grouped_df = df.groupby('類別')['數值'].sum().reset_index()

# 繪製柱狀圖
plt.figure(figsize=(8,6))
plt.bar(grouped_df['類別'], grouped_df['數值'], color ='maroon')
plt.xlabel("類別")
plt.ylabel("總數值")
plt.title("各類別總數值")
plt.show()

內容解密:

  1. 首先,我們匯入必要的函式庫:pandas 用於資料處理,matplotlib.pyplot 用於繪圖。
  2. 建立一個包含類別和數值的 DataFrame。
  3. 使用 groupby 方法對資料進行聚合,計算每個類別的數值總和。
  4. 使用 Matplotlib 繪製柱狀圖,展示各類別的總數值。

自訂圖表外觀

Matplotlib 提供了豐富的自訂選項,讓我們可以調整圖表的各種屬性,如顏色、標籤、標題等。

# 自訂圖表外觀
plt.figure(figsize=(10,6))
plt.bar(grouped_df['類別'], grouped_df['數值'], color ='skyblue')
plt.xlabel("類別", fontsize=14)
plt.ylabel("總數值", fontsize=14)
plt.title("各類別總數值", fontsize=16)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()

內容解密:

  1. 調整圖表的大小為 (10,6)。
  2. 將柱狀圖的顏色改為天藍色(skyblue)。
  3. 調整 x 軸和 y 軸標籤的字型大小為 14。
  4. 調整標題的字型大小為 16。
  5. 調整 x 軸和 y 軸刻度標籤的字型大小為 12。

第 7 章:重塑 DataFrame

在資料分析過程中,我們經常需要對 DataFrame 進行重塑,以滿足不同的分析需求。

使用 pd.merge 合併 DataFrame

合併 DataFrame 是資料整合的重要步驟。以下是一個使用 pd.merge 的範例:

import pandas as pd

# 建立兩個範例 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value2': [4, 5, 6]})

# 使用 pd.merge 合併 DataFrame
merged_df = pd.merge(df1, df2, on='key', how='inner')

print(merged_df)

內容解密:

  1. 建立兩個包含共同鍵(key)的 DataFrame。
  2. 使用 pd.merge 方法根據共同鍵合併兩個 DataFrame。
  3. 設定 how='inner' 表示只保留兩個 DataFrame 中鍵都存在的列。

第 8 章:Group By 操作

Group By 是 pandas 中強大的資料分析工具,可以對資料進行分組並進行各種聚合操作。

分組計算多個欄位

我們可以對多個欄位進行分組並計算聚合值。以下是一個範例:

import pandas as pd

# 建立範例資料
data = {'類別': ['A', 'A', 'B', 'B', 'C', 'C'],
        '子類別': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
        '數值1': [10, 20, 30, 40, 50, 60],
        '數值2': [100, 200, 300, 400, 500, 600]}
df = pd.DataFrame(data)

# 分組計算多個欄位的總和
grouped_df = df.groupby(['類別', '子類別']).sum().reset_index()

print(grouped_df)

內容解密:

  1. 建立一個包含多個欄位的 DataFrame。
  2. 使用 groupby 方法對「類別」和「子類別」進行分組。
  3. 對分組後的資料計算「數值1」和「數值2」的總和。

第 9 章:時間序列資料處理

時間序列資料在金融、氣象等領域中非常常見。pandas 提供了強大的時間序列處理功能。

處理時區

時區處理是時間序列分析中的重要問題。以下是一個處理時區的範例:

import pandas as pd

# 建立包含時區資訊的時間序列
rng = pd.date_range('2023-01-01', periods=5, freq='D', tz='UTC')
ts = pd.Series(range(5), index=rng)

# 轉換時區
ts_tokyo = ts.tz_convert('Asia/Tokyo')

print(ts_tokyo)

內容解密:

  1. 使用 pd.date_range 建立一個包含時區資訊(UTC)的日期範圍。
  2. 建立一個以該日期範圍為索引的 Series。
  3. 使用 tz_convert 方法將時區轉換為東京時間。

第 10 章:效能最佳化與最佳實踐

在使用 pandas 的過程中,效能最佳化是非常重要的。以下是一些最佳實踐:

使用向量化操作代替迴圈

向量化操作可以顯著提高運算效率。以下是一個範例:

import pandas as pd
import numpy as np

# 建立一個大型 DataFrame
df = pd.DataFrame(np.random.randn(1000000, 2), columns=['A', 'B'])

# 使用向量化操作計算兩列的和
df['C'] = df['A'] + df['B']

內容解密:

  1. 建立一個包含一百萬行資料的 DataFrame。
  2. 使用向量化操作直接計算兩列的和並存入新列 ‘C’。