Xin chào độc giả. Trong loạt bài Xử lý và phân tích dữ liệu của chúng tôi, hôm nay chúng ta sẽ xem xét Phát hiện và loại bỏ các giá trị ngoại lai trong Python
Vì vậy, chúng ta hãy bắt đầu
Ngoại lệ trong Python là gì?
Trước khi đi sâu vào khái niệm ngoại lệ, chúng ta hãy hiểu nguồn gốc của dữ liệu thô
Dữ liệu thô được cung cấp cho hệ thống thường được tạo từ các cuộc khảo sát và trích xuất dữ liệu từ các hành động thời gian thực trên web. Điều này có thể làm phát sinh các biến thể trong dữ liệu và có khả năng xảy ra lỗi đo lường trong khi ghi dữ liệu
Đây là khi các ngoại lệ xuất hiện
Điểm ngoại lệ là một điểm hoặc tập hợp các điểm dữ liệu nằm cách xa phần còn lại của các giá trị dữ liệu của tập dữ liệu. Nghĩa là, đó là [các] điểm dữ liệu xuất hiện cách xa phân phối tổng thể của các giá trị dữ liệu trong tập dữ liệu
Ngoại lệ chỉ có thể có trong các giá trị liên tục. Do đó, việc phát hiện và loại bỏ các ngoại lệ chỉ áp dụng cho các giá trị hồi quy
Về cơ bản, các ngoại lệ dường như khác với phân phối tổng thể phù hợp và có cấu trúc tốt của các phần tử dữ liệu. Nó có thể được coi là một phân phối bất thường xuất hiện cách xa lớp hoặc quần thể
Đã hiểu khái niệm về Ngoại lệ, bây giờ chúng ta hãy tập trung vào sự cần thiết của việc loại bỏ các ngoại lệ trong phần tiếp theo
Tại sao cần phải loại bỏ các ngoại lệ khỏi dữ liệu?
Như đã thảo luận ở trên, các giá trị ngoại lệ là các điểm dữ liệu nằm cách xa phân phối dữ liệu thông thường và gây ra các tác động bên dưới đối với phân phối dữ liệu tổng thể
- Ảnh hưởng đến sự thay đổi tiêu chuẩn tổng thể của dữ liệu
- Thao tác trung bình tổng thể của dữ liệu
- Chuyển đổi dữ liệu sang dạng lệch
- Nó gây ra sai lệch trong ước tính độ chính xác của mô hình học máy
- Ảnh hưởng đến phân phối và thống kê của tập dữ liệu
Vì những lý do trên, cần phải phát hiện và loại bỏ các ngoại lệ trước khi lập mô hình tập dữ liệu
Phát hiện ngoại lệ – phương pháp IQR
Các ngoại lệ trong tập dữ liệu có thể được phát hiện bằng các phương pháp dưới đây
- điểm Z
- Điểm phân tán
- Khoảng tứ phân vị [IQR]
Trong bài viết này, chúng tôi sẽ thực hiện phương pháp IQR để phát hiện và xử lý các giá trị ngoại lệ
IQR là viết tắt của Khoảng tứ phân vị. Nó đo lường sự phân tán thống kê của các giá trị dữ liệu như một thước đo phân phối tổng thể
IQR tương đương với sự khác biệt giữa phần tư thứ nhất [Q1] và phần tư thứ ba [Q3] tương ứng
Ở đây, Q1 đề cập đến phần tư thứ nhất i. e. 25% và quý 3 đề cập đến phần tư thứ ba i. e. 75%
Chúng tôi sẽ sử dụng Boxplots để phát hiện và trực quan hóa các ngoại lệ có trong bộ dữ liệu
Boxplots mô tả sự phân phối dữ liệu theo các phần tư và bao gồm các thành phần sau–
- Q1-25%
- Q2-50%
- Q3-75%
- Giới hạn dưới/râu
- Râu trên / giới hạn
Bất kỳ điểm dữ liệu nào nằm dưới giới hạn dưới và trên giới hạn trên đều được coi là Ngoại lệ
Bây giờ chúng ta hãy triển khai Boxplot để phát hiện các ngoại lệ trong ví dụ bên dưới
Thí dụ
Ban đầu, chúng tôi đã nhập bộ dữ liệu vào môi trường. Bạn có thể tìm thấy tập dữ liệu ở đây
import pandas import numpy BIKE = pandas.read_csv["Bike.csv"]
Hơn nữa, chúng tôi đã tách các biến thành các giá trị số và phân loại
numeric_col = ['temp','hum','windspeed'] categorical_col = ['season', 'yr', 'mnth', 'holiday', 'weekday', 'workingday', 'weathersit']
Chúng tôi áp dụng Boxplot bằng cách sử dụng boxplot[] function
trên các biến số như hình bên dưới
BIKE.boxplot[numeric_col]
Như đã thấy ở trên, biến 'tốc độ gió' chứa các ngoại lệ nằm trên giới hạn dưới
Loại bỏ các ngoại lệ
Bây giờ là lúc để xử lý các ngoại lệ mà chúng tôi đã phát hiện bằng Boxplot trong phần trước
Sử dụng IQR, chúng ta có thể làm theo phương pháp dưới đây để thay thế các giá trị ngoại lệ bằng giá trị NULL
- Tính phần tư thứ nhất và thứ ba [Q1 và Q3]
- Hơn nữa, đánh giá phạm vi liên vùng, IQR = Q3-Q1
- Ước lượng cận dưới, cận dưới = Q1*1. 5
- Ước lượng cận trên, cận trên = Q3*1. 5
- Thay thế các điểm dữ liệu nằm ngoài cận dưới và cận trên bằng giá trị NULL
for x in ['windspeed']: q75,q25 = np.percentile[BIKE.loc[:,x],[75,25]] intr_qr = q75-q25 max = q75+[1.5*intr_qr] min = q25-[1.5*intr_qr] BIKE.loc[BIKE[x] < min,x] = np.nan BIKE.loc[BIKE[x] > max,x] = np.nan
Vì vậy, chúng tôi đã sử dụng
numeric_col = ['temp','hum','windspeed'] categorical_col = ['season', 'yr', 'mnth', 'holiday', 'weekday', 'workingday', 'weathersit']0 để tính toán các giá trị của Q1 và Q3. Hơn nữa, chúng tôi đã thay thế các ngoại lệ bằng
numeric_col = ['temp','hum','windspeed'] categorical_col = ['season', 'yr', 'mnth', 'holiday', 'weekday', 'workingday', 'weathersit']1 làm giá trị NULL
Đã thay thế các ngoại lệ bằng nan, bây giờ chúng ta hãy kiểm tra tổng các giá trị null hoặc các giá trị bị thiếu bằng mã bên dưới
BIKE.isnull[].sum[]
Tổng số giá trị NULL/giá trị ngoại lệ trong mỗi cột của tập dữ liệu
season 0 yr 0 mnth 0 holiday 0 weathersit 0 temp 0 hum 0 windspeed 5 cnt 0 dtype: int64
Bây giờ, chúng ta có thể sử dụng bất kỳ kỹ thuật nào dưới đây để xử lý các giá trị NULL
- Áp đặt các giá trị còn thiếu bằng các giá trị quy định Mean, median hoặc Knn
- Bỏ các giá trị null [nếu tỷ lệ tương đối ít hơn]
Ở đây, chúng tôi sẽ loại bỏ các giá trị null bằng cách sử dụng hàm
numeric_col = ['temp','hum','windspeed'] categorical_col = ['season', 'yr', 'mnth', 'holiday', 'weekday', 'workingday', 'weathersit']2
BIKE = BIKE.dropna[axis = 0]
Đã xử lý các ngoại lệ, bây giờ chúng ta hãy kiểm tra sự hiện diện của các giá trị bị thiếu hoặc null trong tập dữ liệu
BIKE.isnull[].sum[]
Đầu ra–
season 0 yr 0 mnth 0 holiday 0 weathersit 0 temp 0 hum 0 windspeed 0 cnt 0 dtype: int64
Do đó, tất cả các ngoại lệ có trong tập dữ liệu đã được phát hiện và xử lý [loại bỏ]
Phần kết luận
Đến đây, chúng ta đã đi đến cuối chủ đề này. Vui lòng bình luận bên dưới, trong trường hợp bạn gặp bất kỳ câu hỏi nào