การเข้ารหัสแบบ One-Hot Encoding เป็นส่วนหนึ่งของการประมวลผลล่วงหน้าและการดำเนินการทั่วไปในการวิเคราะห์

ในการเข้ารหัสแบบ One-Hot Encoding จะแทนที่ข้อมูลแบบ categorical values ให้เป็น binary values (0,1)

Categorical Variable

Categorical Data คือ ตัวแปรที่มี label values เป็นอะไรก็ตามที่ไม่ใช่ตัวเลข บ่อยครั้งตัวแปรเหล่านี้จะถูกเรียกว่า nominal ข้อมูลที่ถูกบรรจุในตัวแปรชนิดนี้เรียกว่า categorical value

One-Hot Encoding ใน Pandas

ใน Pandas จะใช้ฟังก์ชั่น pd.get_dummies() ในการดำเนินการ

ตัวอย่างสถานการณ์

ให้เด็ก 6 คนเลือกสีที่ชอบหนึ่งสี จากสีทั้งหมดที่กำหนดให้ 3 สี และได้ข้อมูลดังนี้

  • คนที่ 1 เลือกสีเขียว
  • คนที่ 2 เลือกสีฟ้า
  • คนที่ 3 เลือกสีส้ม
  • คนที่ 4 เลือกสีเขียว
  • คนที่ 5 เลือกสีฟ้า
  • คนที่ 6 เลือกสีเขียว

เรานำข้อมูลนี้มาทำเป็น DataFrame โดยใช้ฟังก์ชั่น pd.DataFrame()

colours = pd.Series(['green', 'blue', 'orange', 'green', 'blue', 'green'], index = [np.array(range(1,7))])
df_colours = pd.DataFrame({'Colours':colours})
print(df_colours)

output:
  Colours
1   green
2    blue
3  orange
4   green
5    blue
6   green

คำอธิบาย

เริ่มแรกเราต้อง import pandas library เข้ามาก่อน ในที่นี้เราจะ import numpy library ด้วย เพราะเราจะใช้มันแปลง list ให้เป็น array

ต่อมาเราสร้าง Series โดยกำหนดให้ตัวแปร colours เก็บข้อมูล Series ที่ประกอบไปด้วยสีแต่ละสีที่เด็กๆเลือก และกำหนด index label โดยใช้การแปลงค่าที่ได้จาก range() ให้กลายเป็น array ด้วย np.array() ฟังก์ชั่น เพื่อให้ label ที่ได้เรียงจาก 1-6 ไม่เช่นนั้นมันจะเรียง 0-5 (ซึ่งก็ใช้ได้ แต่อาจทำให้การอ่านข้อมูลผิดพลาดได้หากไม่ระวัง เช่น เห็นว่าเลขสุดท้ายคือเลข 5 ก็นับเร็วๆไปเลยว่ามีเด็ก 5 คน ซึ่งจริงๆมีเด็ก 6 คน แต่เด็กคนแรกได้ label 0)

จากนั้นเรานำ Series ที่ได้มาสร้าง DataFrame ด้วย pd.DataFrame() ฟังก์ชั่น กำหนดให้ชื่อคอลัมน์ชื่อว่า Colours

ขั้นตอนสุดท้าย เราใช้ฟังก์ชั่น pd.get_dummies() ในการ encoding แบบ One-Hot Encoding

encode_colours = pd.get_dummies(df_colours,prefix=['favourite_colour'])
print(encode_colours)

output:
   favourite_colour_blue  favourite_colour_green  favourite_colour_orange
1                      0                       1                        0
2                      1                       0                        0
3                      0                       0                        1
4                      0                       1                        0
5                      1                       0                        0
6                      0                       1                        0

คำอธิบาย

เราเข้ารหัสโดยเรียกใช้ฟังก์ชั่น pd.get_dummies() โดยมี DataFrame ที่เราต้องการเข้ารหัสเป็น argument แรก และกำหนด prefix ของแต่ละคอลัมน์ให้เป็น favourite_colour จากนั้นทุกคอลัมน์จะมี favourite_colour_ นำหน้าข้อมูลแบบ nominal ที่เราเข้ารหัสมา

จะเห็นว่าข้อมูลแบบ nominal ถูกแทนค่าด้วย binary number คือ หากสีนั้นถูกเลือก จะปรากฏค่า 1 หากไม่ถูกเลือกจะปรากฏค่า 0 เนื่องจากเด็กหนึ่งคนจะเลือกได้แค่ 1 สีเท่านั้น ในแต่ละแถวจะมีข้อมูล 1 แค่ข้อมูลเดียว นอกจากนี้จะเห็นได้ว่าสีฟ้าถูกเลือกให้เป็นสีโปรดจากเด็ก 2 คน (มีข้อมูลค่า 1 สองครั้งในคอลัมน์) สีเขียวถูกเลือกเป็นสีโปรดจากเด็ก 3 คน และสีส้มถูกเลือกเป็นสีโปรดจากเด็ก 1 คน