Pandas 是 Python 資料科學領域的核心函式函式庫,提供高效的資料結構和分析工具。在資料分析流程中,資料探索階段至關重要,它幫助我們理解資料的結構、分佈和特性,為後續分析奠定基礎。本文將介紹一些常用的 Pandas 資料探索技巧,包括資料預覽、篩選、切片和統計分析。利用 head()
和 tail()
函式快速檢視資料集的前後幾行,可以初步瞭解資料的欄位組成和資料型別。sample()
函式則允許我們隨機抽取資料樣本,對於大型資料集尤其有用,可以快速概覽資料的整體分佈。此外,loc[]
函式可以根據索引或條件選取特定資料,方便我們針對特定資料子集進行分析。
程式碼示例
import pandas as pd
# 建立一個示例資料框架
data = {
'ID': [1, 2, 3, 4, 5],
'DURATION': ['0:07:03', '0:04:57', '0:01:14', '0:06:58', '0:03:06'],
# ... 其他欄位
}
df = pd.DataFrame(data)
# 顯示前 10 行
print(df.head(10))
# 設定最大顯示欄位數
pd.set_option('display.max_columns', 500)
# 額外顯示所有欄位
print(df.head())
# 選取單一欄位
print(df['DURATION'])
圖表翻譯:
flowchart TD A[資料框架] --> B[head() 或 tail()] B --> C[顯示前/後 n 行] C --> D[設定最大顯示欄位數] D --> E[顯示所有欄位] E --> F[選取單一欄位] F --> G[傳回指定欄位的值]
內容解密:
以上程式碼示例展示瞭如何使用 Pandas 的 head()
和 tail()
方法來顯示資料框架的前後幾行,以及如何設定最大顯示欄位數和選取單一欄位。這些方法在資料分析和處理中非常常用。
探索性資料分析
在進行資料分析時,瞭解資料的結構和內容是非常重要的。Python 提供了多種方法來探索資料,包括檢視資料的前幾行、後幾行、特定欄位等。
檢視資料的前幾行和後幾行
使用 head()
和 tail()
方法可以檢視資料的前幾行和後幾行。例如:
import pandas as pd
# 載入資料
df = pd.read_csv('data.csv')
# 檢視資料的前幾行
print(df.head())
# 檢視資料的後幾行
print(df.tail())
這些方法可以幫助您快速瞭解資料的結構和內容。
檢視特定欄位
如果您只想檢視特定欄位的資料,可以使用雙方括號 [][]
來指定欄位名稱。例如:
print(df[['trip_id', 'DURATION', 'start_location_name']])
這會顯示 trip_id
、DURATION
和 start_location_name
欄位的資料。
範例資料
以下是範例資料的前幾行:
trip_id DURATION start_location_name
0 1613335 0:07:03 1901 Roma Ave NE, Albuquerque, NM 87106, USA
1 1613639 0:04:57 1 Domenici Center en Domenici Center, Albuquer...
2 1613708 0:01:14 1 Domenici Center en Domenici Center, Albuquer...
3 1613867 0:06:58 Rotunda at Science & Technology Park, 801 Univ...
4 1636714 0:03:06 401 2nd St NW, Albuquerque, NM 87102, USA
這些資料顯示了每次旅程的 ID、持續時間和起始位置。
內容解密:
上述程式碼使用了 Pandas 函式庫來載入和操作資料。head()
和 tail()
方法用於檢視資料的前幾行和後幾行,而雙方括號 [][]
用於指定特定欄位的名稱。這些方法可以幫助您快速瞭解資料的結構和內容。
圖表翻譯:
flowchart TD A[載入資料] --> B[檢視前幾行] B --> C[檢視後幾行] C --> D[檢視特定欄位] D --> E[顯示結果]
這個流程圖顯示了探索性資料分析的過程,從載入資料到檢視特定欄位的結果。
資料預覽與抽樣
在進行資料分析之前,瞭解資料的分佈和特性是非常重要的。Python 的 Pandas 函式函式庫提供了 sample()
方法,讓我們可以輕易地從資料中抽取一部分樣本進行預覽。
使用 sample()
方法
sample()
方法允許你指定要抽取的樣本數量。以下是如何使用它的範例:
import pandas as pd
# 假設 df 是你的 DataFrame
df.sample(5)
這個方法會從你的 DataFrame 中隨機抽取 5 筆資料,並傳回一個新的 DataFrame。這對於快速瞭解資料的結構和內容非常有用。
範例輸出
假設我們有一個 DataFrame df
,包含了計程車的行程資料,包括月份、行程 ID、使用者 ID 等欄位。使用 sample(5)
方法後,可能會得到以下的輸出:
month trip_id ... user_id trip_ledger_id
4974 June 1753394 ... 35569540 1624088
18390 June 1992655 ... 42142022 1857395
這個輸出顯示了抽取的 5 筆資料(實際上可能不止 5 筆,因為範例中只顯示了兩筆),包括月份、行程 ID、使用者 ID 和行程帳本 ID 等欄位。
自訂抽樣
你也可以根據特定的條件進行抽樣,例如抽取某個月份的所有資料,或者是抽取特定使用者的資料。這需要結合其他 Pandas 方法,例如 loc[]
或 query()
,來過濾資料後再進行抽樣。
資料切片與索引
在資料分析中,切片和索引是兩個非常重要的概念。切片允許您從資料中提取特定的行或列,而索引則提供了一種方式來存取和操作資料中的特定元素。
切片
切片的格式通常為 [start:end]
,其中 start
和 end
分別代表切片的起始和結束索引。如果省略 start
,則切片將從資料的開頭開始;如果省略 end
,則切片將一直到資料的結尾。
例如,若要切片第一行到第十行的資料,可以使用 df[:10]
。這將傳回一個新的資料框,包含原始資料框的前十行。
索引
索引是資料中每一行的唯一識別符號。索引可以是整數、字串或其他型別的值。當您建立一個資料框時,索引通常是自動分配的,從 0 開始並遞增 1。
但是,索引不一定是連續的。在某些情況下,索引可能會跳躍或不連續。這可能是因為資料是從多個來源合併而來,或者是因為某些行已經被刪除。
範例
假設我們有一個資料框 df
,其中包含一些旅行記錄。資料框的索引不是連續的,因為這是一個樣本。
import pandas as pd
# 建立一個樣本資料框
data = {
'month': ['May', 'May', 'June'],
'trip_id': [1613335, 1613639, 2066449],
'user_id': [8417864, 8417864, 35466666],
'trip_ledger_id': [1488546, 1488838, 1929987]
}
df = pd.DataFrame(data, index=[0, 1, 21761])
print(df)
輸出:
month trip_id user_id trip_ledger_id
0 May 1613335 8417864 1488546
1 May 1613639 8417864 1488838
21761 June 2066449 35466666 1929987
在這個範例中,索引不是連續的,因為我們在建立資料框時指定了索引值。這可能是因為資料是從多個來源合併而來,或者是因為某些行已經被刪除。
切片資料
現在,讓我們切片這個資料框,提取前三行的資料。
print(df[:3])
輸出:
month trip_id user_id trip_ledger_id
0 May 1613335 8417864 1488546
1 May 1613639 8417864 1488838
21761 June 2066449 35466666 1929987
在這個範例中,切片 df[:3]
傳回了前三行的資料,包括索引為 0、1 和 21761 的行。
資料框選擇
在進行資料分析時,選擇特定資料行或列是非常重要的。以下是幾種選擇資料的方法:
切片選擇
您可以使用切片的方式選擇資料框中的特定行。例如,要選擇從第10行到最後一行的資料,可以使用以下語法:
df[10:]
這會傳回從第10行到最後一行的所有資料。
指定行範圍
您也可以指定一個行範圍來選擇資料。例如,要選擇從第3行到第9行的資料,可以使用以下語法:
df[3:9]
這會傳回從第3行到第9行的所有資料。
使用loc()方法
如果您知道要選擇的行的索引名稱,您可以使用loc()方法來選擇特定行。例如,要選擇索引為34221的行,可以使用以下語法:
df.loc[34221]
這會傳回索引為34221的行的資料。
範例
以下是使用loc()方法選擇特定行的範例:
import pandas as pd
# 建立一個資料框
data = {'month': ['May', 'May', 'May', 'May', 'May', 'May'],
'trip_id': [1613867, 1636714, 1636780, 1636856, 1636912, 1637035],
'user_id': [8417864, 35436274, 34352757, 35466666, 34352757, 35466666],
'trip_ledger_id': [1489064, 1511212, 1511371, 1511483, 1511390, 1511516]}
df = pd.DataFrame(data)
# 使用loc()方法選擇特定行
print(df.loc[3])
這會輸出:
month May
trip_id 1636856
user_id 35466666
trip_ledger_id 1511483
Name: 3, dtype: object
圖表翻譯:
flowchart TD A[資料框] --> B[選擇行] B --> C[使用切片] C --> D[使用loc()方法] D --> E[傳回選擇的行]
這個圖表顯示了選擇資料框中的特定行的流程。首先,建立一個資料框,然後選擇要傳回的行。可以使用切片或loc()方法來選擇行。最終,傳回選擇的行的資料。
使用Pandas進行資料選取和篩選
在使用Pandas進行資料分析時,選取和篩選資料是非常重要的步驟。以下是如何使用Pandas進行資料選取和篩選的範例。
使用at()和loc()進行資料選取
您可以使用at()和loc()方法來選取DataFrame中的特定資料。at()方法可以用來選取單一值,loc()方法可以用來選取多個值。
import pandas as pd
# 建立一個DataFrame
data = {
'region_id': [202],
'vehicle_id': [2893981],
'started_at': ['7/21/2019 23:51'],
'ended_at': ['7/22/2019 0:05'],
'DURATION': ['0:14:00'],
'start_location_name': ['Central @ Broadway, Albuquerque, NM 87102, USA'],
'end_location_name': ['1418 4th St NW, Albuquerque, NM 87102, USA'],
'user_id': [42559731],
'trip_ledger_id': [2340035]
}
df = pd.DataFrame(data)
# 使用at()選取單一值
print(df.at[0, 'DURATION']) # 輸出: '0:14:00'
# 使用loc()選取多個值
print(df.loc[0, 'DURATION']) # 輸出: '0:14:00'
使用where()方法進行資料篩選
您可以使用where()方法來篩選DataFrame中的資料。where()方法可以用來篩選符合特定條件的資料。
# 建立一個DataFrame
data = {
'month': ['May', 'May'],
'trip_id': [1613335.0, 1613639.0],
'user_id': [8417864.0, 8417864.0],
'trip_ledger_id': [1488546.0, 1488838.0]
}
df = pd.DataFrame(data)
# 使用where()方法篩選資料
user = df.where(df['user_id'] == 8417864.0)
print(user)
使用條件篩選資料
您可以使用條件來篩選DataFrame中的資料。例如,您可以使用以下程式碼來篩選user_id為8417864.0的資料。
# 篩選user_id為8417864.0的資料
user = df[df['user_id'] == 8417864.0]
print(user)
這些方法可以用來選取和篩選DataFrame中的資料,從而進行進一步的資料分析。
資料清理、轉換和增強
在資料分析中,資料清理、轉換和增強是非常重要的步驟。這些步驟可以幫助我們去除不需要的資料,轉換資料格式,和增加新的資料欄位,以便更好地分析資料。
條件篩選
條件篩選是資料清理中的一個重要步驟。它可以幫助我們篩選出符合特定條件的資料。例如,我們可以使用 where()
函式來篩選出 user_id
等於 8417864
的資料。
df.where(df['user_id'] == 8417864)
這個函式會將不符合條件的資料替換為 NaN
。或者,我們可以使用另一個語法來達到相同的效果。
df[(df['user_id'] == 8417864)]
這個語法會直接傳回符合條件的資料,不會包含 NaN
值。
條件組合
我們也可以組合多個條件來篩選資料。例如,我們可以新增一個 trip_id
的條件。
one = df['user_id'] == 8417864
two = df['trip_ledger_id'] == 1488838
df[(one) & (two)]
這個例子會傳回同時符合 user_id
和 trip_id
條件的資料。
資料轉換
除了條件篩選,資料轉換也是資料清理中的一個重要步驟。它可以幫助我們將資料從一個格式轉換到另一個格式。例如,我們可以使用 astype()
函式來將資料欄位的型別轉換為數字型別。
df['column_name'] = df['column_name'].astype(int)
資料增強
資料增強是指增加新的資料欄位或計算新的值。例如,我們可以使用 apply()
函式來計算每一行的總值。
df['total'] = df.apply(lambda row: row['value1'] + row['value2'], axis=1)
這個例子會增加一個新的 total
欄位,包含每一行的總值。
圖表翻譯:
graph LR A[資料清理] --> B[條件篩選] B --> C[資料轉換] C --> D[資料增強] D --> E[資料分析]
圖表解釋:
上述流程圖展示了資料清理、轉換和增強的流程。首先,我們進行資料清理,然後進行條件篩選,接下來是資料轉換,最後是資料增強。這個流程可以幫助我們得到乾淨、完整和準確的資料,以便進行進一步的分析。
探索性資料分析
在進行資料分析時,瞭解資料的結構和內容是非常重要的。以下是使用 Python 進行探索性資料分析的範例。
篩選資料
首先,我們可以使用 where
函式來篩選資料。假設我們有兩個條件 one
和 two
,我們可以使用以下程式碼來篩選資料:
df.where(one & two)
這會回傳一個新的資料框,包含符合兩個條件的資料。
使用第二種標記法
另外,我們也可以使用第二種標記法來篩選資料:
df[(one)&(two)]
這會產生相同的結果。
分析資料
現在我們已經篩選了資料,下一步就是分析資料。使用 describe
函式可以產生一系列的統計資料,包括平均值、標準差、最小值、最大值等:
df.describe()
這會產生一個包含各種統計資料的資料框,包括五數摘要(five-number summary)。
統計資料
五數摘要是一組統計資料,包括最小值、第一四分位數(Q1)、中位數、第三四分位數(Q3)和最大值。使用 describe
函式可以快速產生這些資料。
範例輸出
以下是使用 describe
函式的範例輸出:
trip_id region_id vehicle_id user_id
count 1.000000 1.000000 1.000000 1.000000
mean 1613639.0 NaN NaN 8417864.0
std NaN NaN NaN NaN
min 1613639.0 NaN NaN 8417864.0
25% NaN NaN NaN NaN
50% NaN NaN NaN NaN
75% NaN NaN NaN NaN
max 1613639.0 NaN NaN 8417864.0
這個輸出包含了各種統計資料,包括平均值、標準差、最小值、最大值等。
內容解密:
在這個範例中,我們使用 describe
函式來產生一系列的統計資料。這些資料可以幫助我們瞭解資料的結構和內容。透過分析這些資料,我們可以更好地瞭解資料的特點和趨勢。
圖表翻譯:
以下是使用 Mermaid 生成的圖表,展示了資料的分佈情況:
flowchart TD A[資料] --> B[篩選] B --> C[分析] C --> D[統計資料] D --> E[五數摘要] E --> F[平均值] E --> G[標準差] E --> H[最小值] E --> I[最大值]
這個圖表展示了資料分析的流程,從篩選資料到產生統計資料。
統計分析報告
資料概覽
本報告根據一份包含 34,226 筆記錄的資料集,進行了統計分析。分析結果如下:
- 計數(count):34,226
- 平均值(mean):1,869,549
- 標準差(std):225,263.9
- 最小值(min):1,488,546
- 最大值(max):2,482,335
分位數分析
分位數分析結果如下:
- 25% 分位數:1,683,023
- 50% 分位數:1,827,796
- 75% 分位數:2,042,524
程式碼實作
以下是使用 Python 進行統計分析的程式碼實作:
import pandas as pd
import numpy as np
# 載入資料
data = pd.read_csv('data.csv')
# 計算統計量
count = data.shape[0]
mean = data['trip_ledger_id'].mean()
std = data['trip_ledger_id'].std()
min_val = data['trip_ledger_id'].min()
max_val = data['trip_ledger_id'].max()
# 計算分位數
q25 = np.percentile(data['trip_ledger_id'], 25)
q50 = np.percentile(data['trip_ledger_id'], 50)
q75 = np.percentile(data['trip_ledger_id'], 75)
# 輸出結果
print(f'計數:{count}')
print(f'平均值:{mean}')
print(f'標準差:{std}')
print(f'最小值:{min_val}')
print(f'最大值:{max_val}')
print(f'25% 分位數:{q25}')
print(f'50% 分位數:{q50}')
print(f'75% 分位數:{q75}')
內容解密:
pandas
函式函式庫用於資料操作和分析。numpy
函式函式庫用於數值計算。read_csv
函式用於載入 CSV 格式的資料。shape
屬性用於取得資料的形狀。mean
函式用於計算平均值。std
函式用於計算標準差。min
函式用於計算最小值。max
函式用於計算最大值。np.percentile
函式用於計算分位數。
圖表翻譯:
以下是使用 Mermaid 語法繪製的統計分析結果圖表:
flowchart TD A[資料載入] --> B[統計量計算] B --> C[分位數計算] C --> D[結果輸出] D --> E[圖表繪製]
圖表翻譯:
- 圖表描述了統計分析的流程。
資料載入
步驟負責載入資料。統計量計算
步驟負責計算統計量。分位數計算
步驟負責計算分位數。結果輸出
步驟負責輸出結果。圖表繪製
步驟負責繪製圖表。
資料描述與統計分析
在資料探索的過程中,瞭解資料的分佈和特性是非常重要的。描述性統計(descriptive statistics)是一種用於描述和總結資料的方法。其中,describe()
方法是 pandas 中的一個強大工具,能夠提供資料的基本統計資訊,包括計數、平均值、標準差、最小值、最大值等。
然而,describe()
方法在非數值資料上可能不是很有用。例如,如果你正在處理年齡資料,describe()
方法可以快速顯示年齡的分佈,並幫助你發現錯誤的資料,如負數年齡或過多的100歲以上的年齡。但是,如果資料是非數值型的,describe()
方法就不太有用了。
單列描述
在某些情況下,對單個列進行描述可能更有用。例如,讓我們看看start_location_name
列的描述:
df['start_location_name'].describe()
結果如下:
- count: 34220
- unique: 2972
- top: 1898 Mountain Rd NW, Albuquerque, NM 87104, USA
- freq: 1210
從這些統計資料中,我們可以看到,有34220個起始位置,但只有2972個唯一的位置。最常見的位置(1898 Mountain Rd NW)佔了1210個起始位置。這些資訊對於後續的資料處理和分析是非常有用的。
值計數
另一個用於檢視資料細節的方法是value_counts()
。這個方法可以給出每個唯一值的值和計數。同樣,需要對單個列呼叫這個方法:
df['DURATION'].value_counts()
結果如下:
- 0:04:00: 825
- 0:03:00: 807
- 0:05:00: 728
- 0:06:00: 649
- 0:07:00: 627
從這個結果中,我們可以看到0:04:00的頻率最高,達到825次。你也可以看到所有其他值的頻率。要以百分比形式檢影片率,可以傳遞normalize=True
引數給value_counts()
方法。
探索性資料分析
在進行資料分析時,瞭解資料的分佈和特性是非常重要的。Python 的 Pandas 函式函式庫提供了 value_counts()
方法,可以用來計算每個唯一值在資料中的出現次數。
從使用者經驗視角來看,Pandas 提供的 head()
、tail()
、sample()
、切片、索引、loc[]
、at[]
、where()
、describe()
和 value_counts()
等方法,顯著降低了資料探索和分析的門檻。這些方法允許使用者快速瀏覽資料、抽取樣本、選取特定資料子集、進行條件篩選,並獲得描述性統計資訊,從而有效地理解資料的結構、分佈和特性。然而,這些方法也存在一些限制,例如 describe()
方法對於非數值型資料的分析能力有限,value_counts()
方法在處理大量唯一值時可能產生過於冗長的輸出。對於重視資料探索效率的分析人員而言,熟練掌握這些方法並結合視覺化工具,將能更有效地洞察資料背後的價值。未來,Pandas 發展方向將持續聚焦於提升資料處理效能和擴充套件資料分析功能,以滿足日益增長的資料規模和複雜分析需求。對於資料分析人員來說,持續學習並掌握 Pandas 的最新功能將是保持競爭力的關鍵。