Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

Bạn có thể sử dụng cú pháp cơ bản sau để chuyển đổi biến phân loại thành biến số trong DataFrame của gấu trúc.
df['column_name'] = pd.factorize(df['column_name'])[0]

Bạn cũng có thể sử dụng cú pháp sau để chuyển đổi mọi biến phân loại trong DataFrame thành biến số

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])

Các ví dụ sau đây cho thấy cách sử dụng cú pháp này trong thực tế

ví dụ 1. Chuyển đổi một biến phân loại thành số

Giả sử chúng ta có DataFrame gấu trúc sau

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'C', 'G', 'F', 'C'],
                   'points': [5, 7, 7, 9, 12, 9, 9, 4, 13],
                   'rebounds': [11, 8, 10, 6, 6, 5, 9, 12, 10]})

#view DataFrame
df

        team	position points	rebounds
0	A	G	 5	11
1	A	G	 7	8
2	A	F	 7	10
3	B	G	 9	6
4	B	F	 12	6
5	B	C	 9	5
6	C	G	 9	9
7	C	F	 4	12
8	C	C	 13	10

Chúng ta có thể sử dụng cú pháp sau để chuyển đổi cột 'đội' thành số

#convert 'team' column to numeric
df['team'] = pd.factorize(df['team'])[0]

#view updated DataFrame
df

	team	position points	rebounds
0	0	G	 5	11
1	0	G	 7	8
2	0	F	 7	10
3	1	G	 9	6
4	1	F	 12	6
5	1	C	 9	5
6	2	G	 9	9
7	2	F	 4	12
8	2	C	 13	10

Đây là cách chuyển đổi hoạt động

  • Mỗi đội có giá trị 'A' được chuyển đổi thành 0
  • Mỗi đội có giá trị 'B' được chuyển đổi thành 1
  • Mỗi đội có giá trị 'C' được chuyển đổi thành 2

ví dụ 2. Chuyển đổi nhiều biến phân loại thành số

Một lần nữa, giả sử chúng ta có DataFrame gấu trúc sau

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'C', 'G', 'F', 'C'],
                   'points': [5, 7, 7, 9, 12, 9, 9, 4, 13],
                   'rebounds': [11, 8, 10, 6, 6, 5, 9, 12, 10]})

#view DataFrame
df

        team	position points	rebounds
0	A	G	 5	11
1	A	G	 7	8
2	A	F	 7	10
3	B	G	 9	6
4	B	F	 12	6
5	B	C	 9	5
6	C	G	 9	9
7	C	F	 4	12
8	C	C	 13	10

Chúng ta có thể sử dụng cú pháp sau để chuyển đổi mọi biến phân loại trong DataFrame thành biến số

#get all categorical columns
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical columns to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])

#view updated DataFrame
df

	team	position points	rebounds
0	0	0	 5	11
1	0	0	 7	8
2	0	1	 7	10
3	1	0	 9	6
4	1	1	 12	6
5	1	2	 9	5
6	2	0	 9	9
7	2	1	 4	12
8	2	2	 13	10

Lưu ý rằng cả hai cột phân loại (đội và vị trí) đều được chuyển đổi thành số trong khi các cột điểm và số lần bật lại vẫn giữ nguyên

Bất cứ khi nào chúng ta đưa văn bản vào máy tính, nó sẽ giải mã nó thành 0 và 1 mà con người không thể hiểu trực tiếp. Nó diễn giải những con số này dưới dạng hướng dẫn hiển thị văn bản, âm thanh, hình ảnh, v.v. , có ý nghĩa với mọi người. Tương tự, khi chúng tôi gửi dữ liệu tới bất kỳ mô hình máy học (ML) nào, chúng tôi cần gửi dữ liệu đó ở định dạng phù hợp vì các thuật toán chỉ hiểu các con số. Các biến phân loại này cũng chứa các mẩu thông tin có giá trị về dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu cách mã hóa các biến phân loại thành số với Pandas và Scikit-learning

Các biến phân loại thường được gọi là 'chuỗi' hoặc 'danh mục' và có số lượng hữu hạn. Đây là vài ví dụ

  1. Thành phố nơi một người sống. San Francisco, Chicago, Las Vegas, Seattle, v.v.

  2. Bộ phận mà một người làm việc trong. Tiếp thị, Bán hàng, Nhân sự, v.v.

  3. Bằng cấp cao nhất mà một người có. Trung học, Cử nhân, Thạc sĩ, Tiến sĩ, v.v.

Có hai loại dữ liệu phân loại, thứ tự và danh nghĩa

  • dữ liệu thông thường. Các giá trị tuân theo một số trật tự tự nhiên. Khi mã hóa dữ liệu theo thứ tự, chúng ta cần giữ lại thông tin liên quan đến thứ tự mà danh mục được cung cấp. Thứ tự rất quan trọng. Ví dụ, mức độ của một người cung cấp cho chúng tôi thông tin quan trọng về trình độ của mình. Chúng tôi không thể chỉ định ngẫu nhiên các số cho các độ này

  • Dữ liệu ẩn danh. Các danh mục không thể được sắp xếp theo bất kỳ cách có ý nghĩa nào. Trong dữ liệu danh nghĩa, có một giả định về thứ tự hiện tại. Chúng ta chỉ cần xem xét sự hiện diện và vắng mặt của một tính năng. Chẳng hạn, trong ví dụ trên, việc biết thành phố của một người là rất quan trọng. Cũng như vậy nếu người đó thích Chicago hay Las Vegas

Bây giờ chúng ta đã có kiến ​​thức về các biến phân loại, hãy xem xét các tùy chọn để mã hóa chúng bằng Pandas và Scikit-learning

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

Tìm và thay thế

Phương pháp đơn giản nhất để mã hóa dữ liệu phân loại là tìm và thay thế. Phương thức replace() thay thế mỗi lần xuất hiện khớp của ký tự cũ trong chuỗi bằng ký tự mới

Đây là cách nó hoạt động

Giả sử có một cột có tên là "số xi-lanh" trong tập dữ liệu và số xi-lanh cao nhất mà một chiếc ô tô có thể có là 4. Các giá trị mà cột này chứa không thể vượt quá 4. Tuy nhiên, vấn đề là tất cả các giá trị này đều được viết dưới dạng văn bản, chẳng hạn như “hai”, “một”, v.v. Những gì chúng ta có thể làm là thay thế trực tiếp các giá trị văn bản này bằng giá trị số tương đương của chúng bằng cách sử dụng chức năng 'thay thế' do Pandas cung cấp

numeric_var = {“num_cylinders”: {“four”:4, “three”:3, “two”:2, “one”:1}}
df = df.replace(numeric_var)

Ở đây, chúng tôi đang tạo một từ điển ánh xạ sẽ ánh xạ tất cả các giá trị văn bản thành các giá trị số của chúng. Cách tiếp cận này rất hữu ích khi xử lý dữ liệu theo thứ tự vì chúng ta cần duy trì trình tự

Trong ví dụ trên về “bằng cấp của một người”, chúng ta có thể ánh xạ mức độ cao nhất thành số lớn hơn và mức độ thấp nhất thành số thấp nhất

mã hóa nhãn

Theo cách tiếp cận này, mỗi nhãn được gán một số nguyên duy nhất dựa trên thứ tự bảng chữ cái. Chúng ta có thể thực hiện điều này bằng thư viện Scikit-learning

import pandas as pd
import numpy as np
df = pd.read_csv(“cars_data.csv”)
df.head()

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

Tập dữ liệu này chứa một số giá trị null, vì vậy điều quan trọng là phải xóa chúng

Hãy xem kiểu dữ liệu của các tính năng này

________số 8

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

Chúng ta có thể thấy rằng hầu hết tất cả các biến đều được đại diện bởi kiểu dữ liệu đối tượng, ngoại trừ cột “ký hiệu”

Hãy mã hóa cột “body_style”

#import label encoder
from sklearn import preprocessing 
#make an instance of Label Encoder
label_encoder = preprocessing.LabelEncoder()
df[‘’body_style”] = label_encoder.fir_transform(data[‘body_style’)
df.head()

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

nguồn hình ảnh. Python kinh doanh thực tế

Vì mã hóa nhãn sử dụng thứ tự bảng chữ cái, "mui trần" đã được mã hóa bằng 0, "hatchback" đã được mã hóa bằng 2 và "sedan" với 3. Phải có một danh mục khác trong body_style được mã hóa bằng 1

Nếu chúng ta nhìn vào cột “body_style”, chúng ta sẽ nhận thấy rằng nó không có bất kỳ thứ tự nào. Nếu chúng tôi thực hiện mã hóa nhãn trên đó, chúng tôi sẽ thấy rằng cột được xếp hạng dựa trên bảng chữ cái. Do thứ tự này, mô hình có thể nắm bắt một số mối quan hệ giả định

Mã hóa một lần nóng

Chúng tôi thường sử dụng mã hóa một lần nóng để giải quyết nhược điểm của mã hóa nhãn. Chiến lược là chuyển đổi từng danh mục thành một cột và gán giá trị 1 hoặc 0 cho nó. Đó là một quá trình tạo ra các biến giả

Hãy xem cách chúng ta có thể triển khai nó trong Python

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])
0

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])
1

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

Chúng ta có thể thấy từ bảng trên rằng tất cả các danh mục duy nhất đã được chỉ định một cột mới. Nếu có một danh mục, chúng tôi có 1 trong cột và 0 cho những người khác

Vì dữ liệu thưa thớt nên nó dẫn đến bẫy biến giả vì kết quả của một biến có thể được dự đoán với sự trợ giúp của các biến còn lại. Sự cố này xảy ra khi các biến có tương quan cao với nhau. Nó cũng dẫn đến một vấn đề cộng tuyến gây ra các vấn đề trong các mô hình hồi quy khác nhau

Có một vấn đề khác với phương pháp này. nếu có nhiều danh mục duy nhất và chúng tôi muốn mã hóa chúng, chúng tôi sẽ có nhiều cột bổ sung. Điều này cuối cùng sẽ làm tăng độ phức tạp và thời gian của mô hình vì sẽ mất nhiều thời gian hơn để phân tích mối quan hệ giữa các biến

Chuyển đổi dữ liệu phân loại thành dữ liệu số bằng Pandas

Sau đây là các phương pháp được sử dụng để chuyển đổi dữ liệu phân loại thành dữ liệu số bằng Pandas

Phương pháp 1. Sử dụng get_dummies()

cú pháp

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])
2

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

nguồn hình ảnh. GeekforGeek

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])
3

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

nguồn hình ảnh. GeekforGeek

Phương pháp 2. Sử dụng thay thế()

cú pháp

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])
4

Chuyển đổi cùng một dữ liệu bằng một cách tiếp cận khác

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

nguồn hình ảnh. GeekforGeek

#identify all categorical variables
cat_columns = df.select_dtypes(['object']).columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])
5

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

nguồn hình ảnh. GeekforGeek

Chuyển đổi dữ liệu phân loại thành dữ liệu số trong Scikit-learning có thể được thực hiện theo các cách sau

Phương pháp 1. mã hóa nhãn

Hãy triển khai điều này trên các dữ liệu khác nhau và xem nó hoạt động như thế nào

import pandas as pd
import numpy as np
df = pd.read_csv(“cars_data.csv”)
df.head()

0

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

nguồn hình ảnh. GeekforGeek

import pandas as pd
import numpy as np
df = pd.read_csv(“cars_data.csv”)
df.head()

1

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

import pandas as pd
import numpy as np
df = pd.read_csv(“cars_data.csv”)
df.head()

2

Làm cách nào để bạn chuyển đổi dữ liệu phân loại thành dữ liệu số trong python?

nguồn hình ảnh. GeekforGeek

Phương pháp 2. Mã hóa một lần nóng

import pandas as pd
import numpy as np
df = pd.read_csv(“cars_data.csv”)
df.head()

3

Sử dụng kỹ thuật mã hóa nào?

Để biết khi nào nên sử dụng kỹ thuật mã hóa nào, chúng ta cần hiểu rõ dữ liệu của mình. Sau đó chúng ta cần quyết định áp dụng mô hình nào

Ví dụ: nếu có hơn 15 tính năng phân loại và chúng tôi quyết định sử dụng thuật toán máy vectơ hỗ trợ (SVM), thời gian đào tạo có thể tăng lên do SVM chậm. Cung cấp cho nó nhiều tính năng riêng biệt làm tăng thêm độ phức tạp và thời gian đào tạo của mô hình

Dưới đây là một số điểm chính cần lưu ý khi chọn kỹ thuật mã hóa

Sử dụng phương pháp tìm và thay thế

  1. Khi việc duy trì trình tự là quan trọng vì phương pháp này giúp duy trì trật tự

  2. Khi dữ liệu là thứ tự hoặc đại diện cho một số loại cường độ. Ví dụ: nếu các giá trị của một biến là nhỏ, trung bình và lớn, chúng ta có thể ánh xạ chúng thành 1, 2 và 3 tương ứng

Sử dụng mã hóa một lần nóng

  1. Khi tính năng phân loại không có thứ tự hoặc không có thứ tự. Ví dụ: thành phố nơi một người ở không theo thứ tự nên mã hóa một lần nóng có thể được sử dụng cho các loại cột như vậy

  2. Khi số lượng các tính năng phân loại duy nhất ít hơn. Điều này là do nhiều tính năng hơn làm tăng độ phức tạp và thời gian đào tạo của mô hình

Sử dụng mã hóa nhãn

  1. Khi tính năng phân loại có một số thứ tự hoặc là thứ tự. Ví dụ: vị trí của quân đội là thứ tự và vị trí cao nhất có số lượng cao

  2. Khi số lượng danh mục lớn

Chúng tôi đã khám phá nhiều cách khác nhau để mã hóa dữ liệu phân loại cùng với các vấn đề của chúng và các trường hợp sử dụng phù hợp. Tóm lại, mã hóa là một phần quan trọng và không thể tránh khỏi của kỹ thuật tính năng. Điều quan trọng là phải biết những ưu điểm và hạn chế của tất cả các phương pháp được sử dụng để mô hình có thể học đúng cách

Làm cách nào để chuyển đổi dữ liệu phân loại thành dữ liệu số trong Python Pandas?

Mục lục .
Các cách để mã hóa các biến phân loại
1. 1. Tìm và thay thế
1. 2. mã hóa nhãn
1. 3. Mã hóa một lần nóng
Chuyển đổi dữ liệu phân loại thành dữ liệu số bằng Pandas
2. 1. Phương pháp 1. Sử dụng get_dummies()
2. 2. Phương pháp 2. Sử dụng thay thế()
Chuyển đổi dữ liệu phân loại thành dữ liệu số bằng Scikit-learning

Các kỹ thuật mã hóa khác nhau để chuyển đổi dữ liệu phân loại thành dữ liệu số là gì?

Có nhiều cách để chuyển đổi dữ liệu phân loại thành dữ liệu số. Ở đây trong bài viết này, chúng ta sẽ thảo luận về hai phương pháp được sử dụng nhiều nhất là. Mã hóa biến giả . mã hóa nhãn.

Làm cách nào để chuyển đổi dữ liệu phân loại thành dữ liệu số trong pyspark?

Trong pyspark, có hai phương thức mà chúng ta có thể sử dụng cho quá trình chuyển đổi. Trình lập chỉ mục chuỗi và OneHotEncoder . Khi một tính năng chỉ chứa hai danh mục/nhóm, trong trường hợp đó, chúng ta có thể áp dụng trực tiếp phương thức StringIndexer để chuyển đổi.

Phương pháp nào sau đây được sử dụng để chuyển đổi dữ liệu phân loại thành các giá trị số?

Mã hóa nhị phân .