【資料分析】python資料處理-類別欄位轉換基礎操作語法彙整

閱讀時間約 22 分鐘
raw-image

在進行資料分析時,有時需要將類別欄位轉換為數值欄位,以便進行數值計算和機器學習模型訓練等操作。由於模型是基於數學模型設計的方法,必須要輸入資料將類別欄位轉換為數值欄位模型才能讀得懂。例如,某個欄位的取值為「男」和「女」,可以將其轉換為數值欄位,例如「0」表示男性,「1」表示女性。這樣可以讓機器學習模型更容易理解和處理資料。


# 可使用目錄功能快速確認要閱覽的主題


方法選擇重點

  • Label Encoding 適用於有順序的類別數據且類別數量較少的數據
  • One-Hot Encoding 適用於無順序且類別數量較少的數據
  • Binary Encoding 適用於無順序且類別數量較多的數據
  • Target Encoding 適用於回歸問題,類別變量與目標變量有較強的相關性
  • Frequency Encoding 適用於類別數量較多且類別出現的頻率與目標變量相關性較弱的數據


Labelencoding (標籤編碼)

基本概念

Label Encoding 是一種將類別變量轉換為數值變量的技術。具體來說,標籤編碼將每個類別值映射到一個唯一的整數。例如,如果有三個類別值 "red"、"green" 和 "blue",標籤編碼可能會將它們分別映射為 0、1 和 2。


應用範例

import pandas as pd
from sklearn.preprocessing import LabelEncoder

data = {'size': ['small', 'medium', 'large', 'medium', 'small']}
df = pd.DataFrame(data)

# 初始化標籤編碼器
le = LabelEncoder()

# 將 'size' 欄位進行標籤編碼
df['size_encoded'] = le.fit_transform(df['size'])

print(df)

"""
size size_encoded
0 small 2
1 medium 1
2 large 0
3 medium 1
4 small 2
"""

※ Label Encoding 並沒有內建的機制來識別或維持類別的順序。標籤編碼器會按照字母順序(alphabetical order)或數字順序來分配標籤。因此,在處理有序類別數據時,需要確保在編碼之前已經按照正確的順序來指定標籤。

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 創建一個範例數據集
data = {'size': ['small', 'medium', 'large', 'medium', 'small']}
df = pd.DataFrame(data)

# 指定有序類別的順序
size_mapping = {'small': 0, 'medium': 1, 'large': 2}

# 使用映射進行編碼
df['size_encoded'] = df['size'].map(size_mapping)

print(df)

"""
size size_encoded
0 small 0
1 medium 1
2 large 2
3 medium 1
4 small 0
"""


優點與缺點


優點

  • 簡單易用:實現和理解都非常簡單。
  • 對有序類別有效:如果類別值具有自然的順序,標籤編碼能夠很好地表達這一順序。

缺點

  • 引入虛假順序關係:對於無序的類別數據,標籤編碼引入的整數表示可能會使模型誤解不同類別之間存在順序關係。
  • 對一些模型不友好:某些模型(例如線性回歸)可能會受到這種虛假順序關係的影響。


適用場景

  • 有序類別數據:當類別數據有自然順序(例如 "低"、"中"、"高")時,標籤編碼是很好的選擇。
  • 小型數據集:標籤編碼在類別數量較少的情況下非常有效。


One-Hot Encoding (獨熱編碼)

基本概念

One-Hot Encoding 是將分類數據轉換為二進位變量的過程。對於每個類別變量,會創建一個新的二進位變量。每個變量都表示是否存在某個特定的類別。這意味著,對於每一個觀測值,僅有一個二進位變量為1,其餘為0。


應用範例

import pandas as pd

# 創建一個範例數據集
data = {'color': ['red', 'blue', 'green', 'blue', 'red']}
df = pd.DataFrame(data)

# 使用pd.get_dummies() 進行One-Hot Encoding
df_one_hot = pd.get_dummies(df, columns=['color'])

print(df_one_hot)

"""
color_blue color_green color_red
0 0 0 1
1 1 0 0
2 0 1 0
3 1 0 0
4 0 0 1
"""
import pandas as pd

# 創建範例數據集
data = {
'color': ['red', 'blue', 'green', 'blue', 'red'],
'city': ['New York', 'Paris', 'London', 'Berlin', 'Paris']
}
df = pd.DataFrame(data)

# 使用pd.get_dummies進行One-Hot Encoding
df_encoded = pd.get_dummies(df, columns=['color', 'city'])

print(df_encoded)

"""
color_blue color_green color_red city_Berlin city_London city_New York city_Paris
0 0 0 1 0 0 1 0
1 1 0 0 0 0 0 1
2 0 1 0 0 1 0 0
3 1 0 0 1 0 0 0
4 0 0 1 0 0 0 1
"""


優點與缺點


優點:

  • 不引入順序關係:One-Hot Encoding 不會引入類別之間的順序,因此非常適合無序類別數據。
  • 避免虛假關聯:能夠避免因數值關聯而產生的虛假關聯,適合用於大部分機器學習算法。

缺點:

  • 維度爆炸:如果類別數據的類別數量很多,One-Hot Encoding 會導致數據集的維度劇增,這對內存和計算資源有較大需求。
  • 非稀疏數據處理困難:部分機器學習算法在處理高維稀疏矩陣時效率較低。


適用場景

  • 無序類別數據:適合用於沒有順序關係的類別數據,如顏色、城市等。
  • 機器學習算法:在很多機器學習算法中,如決策樹、隨機森林、神經網絡中,One-Hot Encoding 是處理類別數據的常見方法。
  • 避免引入虛假關聯:在數據分析和預測中,避免數值關聯導致的錯誤解釋和結果。


Binary Encoding (二值編碼)

基本概念

Binary Encoding 是將類別數據轉換為二進位數據的一種方法。它先將類別轉換為數值,然後再將這些數值轉換為二進位碼。每個類別用二進位碼表示,並將每個二進位碼的位數拆分成不同的列。


應用範例

import pandas as pd
import category_encoders as ce

# 創建範例數據集
data = {
'product_id': ['A123', 'B234', 'C345', 'A123', 'B234'],
'customer_id': ['C1', 'C2', 'C3', 'C4', 'C5']
}
df = pd.DataFrame(data)

# 使用 Binary Encoder 進行二進位編碼
encoder = ce.BinaryEncoder(cols=['product_id', 'customer_id'])
df_encoded = encoder.fit_transform(df)

print(df_encoded)


"""
product_id_0 product_id_1 product_id_2 customer_id_0 customer_id_1 customer_id_2
0 1 0 0 1 0 0
1 0 1 0 0 1 0
2 1 1 0 1 1 0
3 1 0 0 0 0 1
4 0 1 0 0 1 1
"""


優點與缺點


優點:

  • 減少維度:相比 One-Hot Encoding,Binary Encoding 可以有效地減少高基數類別的特徵維度。
  • 保留部分順序信息:適度保留了類別之間的順序信息,有助於某些需要順序信息的模型。

缺點:

  • 可解釋性較低:相比 One-Hot Encoding,Binary Encoding 生成的特徵對於人類而言不太直觀和易解釋。
  • 引入少量順序信息:對於無序類別數據,引入的順序信息可能在某些情況下不利於模型表現。


適用場景

  • 高基數類別數據:適用於類別數量很多的情況,如產品ID、用戶ID等。
  • 需要減少維度的情況:適用於在減少維度的同時保留部分數據信息的情況。
  • 機器學習算法:適用於大多數機器學習算法,特別是那些對維度敏感但對數值變量有良好支持的算法。
  • 在需要保留部分順序信息但又不希望完全轉化為數值變量的情況下。


Target Encoding (目標編碼)

基本概念

Target Encoding 是一種將類別變量轉換為數值變量的方法。其基本思想是用目標變量的平均值(或其他統計量)來替換類別變量的值。這通常是通過計算每個類別的目標變量的平均值來完成的。


應用範例

import pandas as pd
import category_encoders as ce

# 創建一個範例數據集
data = pd.DataFrame({
    'city': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles', 'Chicago', 'New York', 'Chicago'],
    'house_type': ['Apartment', 'House', 'House', 'Apartment', 'House', 'House', 'Apartment', 'Apartment'],
    'price': [500000, 450000, 600000, 350000, 400000, 300000, 700000, 250000]
})

# 使用 Target Encoder 進行目標編碼
encoder = ce.TargetEncoder(cols=['city', 'house_type'])
data_encoded = encoder.fit_transform(data[['city', 'house_type']], data['price'])

# 合併編碼後的數據
data_encoded['price'] = data['price']

print(data_encoded)


"""
city house_type price
0 467885.197669 444799.885093 500000
1 441090.292533 442700.114907 450000
2 467885.197669 442700.114907 600000
3 421545.618144 444799.885093 350000
4 441090.292533 442700.114907 400000
5 421545.618144 442700.114907 300000
6 467885.197669 444799.885093 700000
7 421545.618144 444799.885093 250000
"""
  • cityhouse_type 這兩個類別型欄位被轉換成了數值型欄位,這些數值是根據 price 的平均值計算出來的。
  • 這樣做的好處是,可以將類別型資料轉換成數值型資料,以便在機器學習模型中使用。


優點與缺點


優點:

  • 捕捉目標信息:它利用了目標變量的信息,能夠提高模型的預測能力。
  • 減少維度:相比 One-Hot Encoding,Target Encoding 不會增加數據集的維度,這對於高基數類別變量尤為重要。
  • 適用於高基數變量:特別適合於高基數類別變量,避免了稀疏矩陣的問題。

缺點:

  • 過擬合風險:由於使用了目標變量的信息,可能導致模型過擬合,尤其是在訓練數據中某些類別出現頻率較低時。
  • 數據泄露:需要謹慎處理,避免數據泄露,應該在交叉驗證的過程中進行編碼。


適用場景

  • 高基數類別變量:特別適合於類別數量很多的情況,如用戶ID、產品ID等,根據用戶ID或產品ID來預測用戶的行為或產品的受歡迎程度。
  • 預測任務:適合於回歸和分類預測任務,能夠利用目標變量的信息提高模型性能。
  • 樹模型:在樹模型(如隨機森林、梯度提升樹)中,Target Encoding 通常比 One-Hot Encoding 更有效。
  • 在廣告點擊率預測中,根據廣告ID來預測點擊率。
  • 在銷售預測中,根據產品類別來預測銷售額。


Frequency Encoding (頻率編碼)

基本概念

Frequency Encoding 是一種將類別型資料轉換為數值型資料的編碼方法。這種方法基於每個類別出現的頻率,即每個類別在資料集中出現的次數。具體來說,頻率編碼會將每個類別替換為該類別在資料集中出現的次數。


應用範例

import pandas as pd

# 創建一個範例數據集
data = pd.DataFrame({
'user_id': ['user_1', 'user_2', 'user_3', 'user_1', 'user_4', 'user_2', 'user_3', 'user_1'],
'visit_count': [10, 15, 10, 20, 5, 25, 10, 30]
})

# 計算每個用戶ID出現的頻率
frequency_encoding = data['user_id'].value_counts(normalize=True)

# 將頻率映射回原數據集
data['user_id_freq'] = data['user_id'].map(frequency_encoding)

print(data)

"""
user_id visit_count user_id_freq
0 user_1 10 0.375
1 user_2 15 0.250
2 user_3 10 0.250
3 user_1 20 0.375
4 user_4 5 0.125
5 user_2 25 0.250
6 user_3 10 0.250
7 user_1 30 0.375
"""
  • 在這個範例中,用戶ID被轉換為其在數據集中出現的頻率。這些頻率可以用來分析不同用戶群體的訪問頻率。例如,頻繁訪問網站的用戶可能是忠實用戶,可以針對這些用戶進行特別的營銷活動。
  • 機器學習模型:在構建機器學習模型時,可以使用用戶ID的頻率作為特徵,這些頻率可以幫助模型更好地理解用戶行為模式。
  • 網站優化:頻率編碼後的數據可以幫助了解哪些用戶群體更活躍,從而幫助網站管理者優化網站內容和結構,提升用戶體驗。


優點與缺點


優點:

  • 簡單直觀,易於實現。
  • 對於類別數據具有明顯的頻率特徵時,效果不錯。

缺點:

  • 當類別分佈不均衡時,可能會引入偏差。
  • 不適用於所有情況,特別是類別型資料與目標變量之間沒有明顯關聯時。


適用場景

  • 缺少標籤數據:當標籤數據不足時,Frequency Encoding 不依賴於目標變量,可以在僅有特徵數據的情況下使用。
  • 初步數據探索:在初步數據探索中,可以快速獲取每個類別的頻率,幫助理解數據分佈情況。
  • 簡單模型:在構建簡單模型時,使用 Frequency Encoding 可以降低模型的複雜性,而不需要考慮目標變量的影響。
  • 在構建電子商務推薦系統時,可以通過產品類別的頻率來優化推薦策略。頻繁出現的產品類別可能是熱門類別,可以優先推薦給用戶。
  • 在客戶細分時,可以通過用戶行為類別的頻率來進行細分。例如,可以根據用戶購買頻率將用戶分為高頻購買者和低頻購買者,從而制定不同的營銷策略。
3會員
19內容數
留言0
查看全部
發表第一個留言支持創作者!
JayRay 的沙龍 的其他內容
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
資料分析就像廚師料理一樣,但你知道可以分成哪9大流程嗎?一起看看資料分析流程和廚師料理有多像!
Thumbnail
資料分析三個主要的目的分別是探索性、解釋性及預測性。看看他們在方法及複雜度上有什麼差異,以及適用的情境。
Thumbnail
決定「分析單位」是資料分析執行前,最需要確認的項目;決定了「分析單位」等同於決定分析結果數據呈現方式、解讀和應用方法。讓我們一起了解「分析單位」到底是什麼?什麼會決定分析單位?以及沒有弄清楚分析單位會有什麼影響?
Thumbnail
上一篇介紹了 Python 中的條件判斷,方法是透過了自動程式條件式判斷,以不同劇本的方式來執行動作。然而實際情況下,我們還常會遇到一種問題,就是必須重複執行某些相同的步驟,而迴圈(loop)的設計就是為了解決此「重複執行」的一種控制結構,讓我們可以在條件符合的情況下利用迴圈執行資料的輸入、處理與輸
Thumbnail
經歷過第一次的課程內容後,我們已經初步理解到Python的基本運算功能,接下來就要開始進入到高階語言都有的程式控制邏輯,先來個小小開胃菜—條件判斷。 if敘述 直接來帶範例會比較清楚理解: 第一次我們輸入國文分數為50分,由於數值50並沒有大於60,第一個if敘述的condition條件判斷就會是F
Thumbnail
首先,聊聊我與SimilarWeb的不解之緣😊,以前在媒體界擔任產品經理時,老闆最愛問下屬的一件事,別人家競品的網站狀況如何?流量如何?廣告策略有哪些?可是坦白說,沒有認識到別家公司內部員工的話,誰有辦法清楚知道,這時只能想些折衷的辦法,去翻翻網路資訊,或請教一些數位界的前輩,了解是否有哪些第三方
Thumbnail
前幾年因為工作方面的需求,花了一些時間自學了Python,進行網站爬蟲與資料分析,但近期由於職務的轉換,Python的實作應用機會減少了許多,對於code撰寫的敏感度也因此降低不少,趁著上個月看到勞動力職能發展協會官網有一門新課程「Python大數據資料探勘分析應用班」正在線上招生,想說既然政府與公
Thumbnail
最近在公司跟資料科學家一起討論了產品推薦機制的運作邏輯,才開始理解了甚麼是關聯分析(Associative Analysis),覺得挺有趣的,想說把學習心得記錄下來,藉此機會跟大家分享。 接著下來,我們就以「樂屋網」產品的使用者行為資料庫,做為假設的範例,進行簡單的解釋說明。 條件機率與貝氏定理
Thumbnail
這一次在高雄上課,租用昂貴的電腦教室,只是很可惜,這家巨匠居然沒有安裝office,只有開放原始碼的試算表,有一點卡卡的,影響我的教學。 趁學員陸續到期,趕緊教他們下載資料;下載資料對我來說雖然簡單,但對於這一批學員來說,卻可能是第一次操作;還好很多學員立即學會,也立馬變身為種子教官,教會旁邊的學員
Thumbnail
EXCEL應該是最多朋友會使用的工具,因為如果能善用EXCEL來分析手邊的股價資訊,必然能有極大的幫助。 雖然說現在市面上有非常多既有的既定工具,但資料在自己手上,分析方法由自己決定,長期來說還是比較好。 今天來講一個簡單的敘述統計...
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
資料分析就像廚師料理一樣,但你知道可以分成哪9大流程嗎?一起看看資料分析流程和廚師料理有多像!
Thumbnail
資料分析三個主要的目的分別是探索性、解釋性及預測性。看看他們在方法及複雜度上有什麼差異,以及適用的情境。
Thumbnail
決定「分析單位」是資料分析執行前,最需要確認的項目;決定了「分析單位」等同於決定分析結果數據呈現方式、解讀和應用方法。讓我們一起了解「分析單位」到底是什麼?什麼會決定分析單位?以及沒有弄清楚分析單位會有什麼影響?
Thumbnail
上一篇介紹了 Python 中的條件判斷,方法是透過了自動程式條件式判斷,以不同劇本的方式來執行動作。然而實際情況下,我們還常會遇到一種問題,就是必須重複執行某些相同的步驟,而迴圈(loop)的設計就是為了解決此「重複執行」的一種控制結構,讓我們可以在條件符合的情況下利用迴圈執行資料的輸入、處理與輸
Thumbnail
經歷過第一次的課程內容後,我們已經初步理解到Python的基本運算功能,接下來就要開始進入到高階語言都有的程式控制邏輯,先來個小小開胃菜—條件判斷。 if敘述 直接來帶範例會比較清楚理解: 第一次我們輸入國文分數為50分,由於數值50並沒有大於60,第一個if敘述的condition條件判斷就會是F
Thumbnail
首先,聊聊我與SimilarWeb的不解之緣😊,以前在媒體界擔任產品經理時,老闆最愛問下屬的一件事,別人家競品的網站狀況如何?流量如何?廣告策略有哪些?可是坦白說,沒有認識到別家公司內部員工的話,誰有辦法清楚知道,這時只能想些折衷的辦法,去翻翻網路資訊,或請教一些數位界的前輩,了解是否有哪些第三方
Thumbnail
前幾年因為工作方面的需求,花了一些時間自學了Python,進行網站爬蟲與資料分析,但近期由於職務的轉換,Python的實作應用機會減少了許多,對於code撰寫的敏感度也因此降低不少,趁著上個月看到勞動力職能發展協會官網有一門新課程「Python大數據資料探勘分析應用班」正在線上招生,想說既然政府與公
Thumbnail
最近在公司跟資料科學家一起討論了產品推薦機制的運作邏輯,才開始理解了甚麼是關聯分析(Associative Analysis),覺得挺有趣的,想說把學習心得記錄下來,藉此機會跟大家分享。 接著下來,我們就以「樂屋網」產品的使用者行為資料庫,做為假設的範例,進行簡單的解釋說明。 條件機率與貝氏定理
Thumbnail
這一次在高雄上課,租用昂貴的電腦教室,只是很可惜,這家巨匠居然沒有安裝office,只有開放原始碼的試算表,有一點卡卡的,影響我的教學。 趁學員陸續到期,趕緊教他們下載資料;下載資料對我來說雖然簡單,但對於這一批學員來說,卻可能是第一次操作;還好很多學員立即學會,也立馬變身為種子教官,教會旁邊的學員
Thumbnail
EXCEL應該是最多朋友會使用的工具,因為如果能善用EXCEL來分析手邊的股價資訊,必然能有極大的幫助。 雖然說現在市面上有非常多既有的既定工具,但資料在自己手上,分析方法由自己決定,長期來說還是比較好。 今天來講一個簡單的敘述統計...