Dọn dẹp trong Python là gì?

Python là ngôn ngữ lập trình dễ học, khiến nó trở thành lựa chọn ưu tiên nhất cho người mới bắt đầu trong Khoa học dữ liệu, Phân tích dữ liệu và Học máy. Nó cũng có một cộng đồng người học trực tuyến tuyệt vời và các thư viện tập trung vào dữ liệu tuyệt vời

Với rất nhiều dữ liệu được tạo ra, điều quan trọng là dữ liệu chúng tôi sử dụng cho các ứng dụng Khoa học dữ liệu như Học máy và Mô hình dự đoán phải sạch. Nhưng ý nghĩa của dữ liệu sạch là gì?

Dữ liệu bẩn đơn giản có nghĩa là dữ liệu bị lỗi. Hồ sơ trùng lặp, dữ liệu không đầy đủ hoặc lỗi thời và phân tích cú pháp không đúng cách có thể làm cho dữ liệu bị bẩn. Dữ liệu này cần được làm sạch. Làm sạch dữ liệu (hay làm sạch dữ liệu) đề cập đến quá trình “làm sạch” dữ liệu bẩn này, bằng cách xác định các lỗi trong dữ liệu và sau đó khắc phục chúng

Làm sạch dữ liệu là một bước quan trọng trong dự án Machine Learning và chúng tôi sẽ đề cập đến một số kỹ thuật làm sạch dữ liệu cơ bản (bằng Python) trong bài viết này

Làm sạch dữ liệu trong Python

Chúng ta sẽ tìm hiểu thêm về cách làm sạch dữ liệu trong Python với sự trợ giúp của tập dữ liệu mẫu. Chúng tôi sẽ sử dụng bộ dữ liệu nhà ở của Nga trên Kaggle

Chúng tôi sẽ bắt đầu bằng cách nhập các thư viện cần thiết

# import libraries
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

Tải xuống dữ liệu, sau đó đọc dữ liệu đó vào Khung dữ liệu Pandas bằng cách sử dụng hàm read_csv() và chỉ định đường dẫn tệp. Sau đó sử dụng thuộc tính shape để kiểm tra số hàng và số cột trong tập dữ liệu. Mã cho điều này là như dưới đây

df = pd.read_csv('housing_data.csv')
df.shape

Tập dữ liệu có 30.471 hàng và 292 cột

Bây giờ chúng ta sẽ tách các cột số khỏi các cột phân loại

# select numerical columns
df_numeric = df.select_dtypes(include=[np.number])
numeric_cols = df_numeric.columns.values
# select non-numeric columns
df_non_numeric = df.select_dtypes(exclude=[np.number])
non_numeric_cols = df_non_numeric.columns.values

Bây giờ chúng ta đã hoàn thành các bước sơ bộ. Bây giờ chúng ta có thể chuyển sang làm sạch dữ liệu. Chúng tôi sẽ bắt đầu bằng cách xác định các cột chứa giá trị bị thiếu và cố gắng khắc phục chúng

Giá trị bị mất

Chúng tôi sẽ bắt đầu bằng cách tính phần trăm giá trị bị thiếu trong mỗi cột, sau đó lưu trữ thông tin này trong DataFrame

# % of values missing in each column
values_list = list()
cols_list = list()
for col in df.columns:
    pct_missing = np.mean(df[col].isnull())*100
    cols_list.append(col)
    values_list.append(pct_missing)
pct_missing_df = pd.DataFrame()
pct_missing_df['col'] = cols_list
pct_missing_df['pct_missing'] = values_list

Khung dữ liệu pct_missing_df hiện chứa tỷ lệ phần trăm giá trị bị thiếu trong mỗi cột cùng với tên cột

Chúng tôi cũng có thể tạo hình ảnh trực quan từ thông tin này để hiểu rõ hơn bằng cách sử dụng mã bên dưới

pct_missing_df.loc[pct_missing_df.pct_missing > 0].plot(kind='bar', figsize=(12,8))
plt.show()

Đầu ra sau khi thực hiện dòng mã trên sẽ trông như thế này

Dọn dẹp trong Python là gì?

Rõ ràng là một số cột có rất ít giá trị bị thiếu, trong khi các cột khác có % giá trị bị thiếu đáng kể. Bây giờ chúng tôi sẽ sửa các giá trị còn thiếu này

Có một số cách để chúng tôi có thể khắc phục các giá trị bị thiếu này. Một số trong số họ là”

Thả quan sát

Một cách có thể là loại bỏ những quan sát chứa bất kỳ giá trị null nào trong chúng cho bất kỳ cột nào. Điều này sẽ hoạt động khi tỷ lệ phần trăm giá trị bị thiếu trong mỗi cột rất ít. Chúng tôi sẽ loại bỏ các quan sát chứa null trong các cột có ít hơn 0. 5% không. Các cột này sẽ là metro_min_walk, metro_km_walk, Railroad_station_walk_km, Railroad_station_walk_min và ID_railroad_station_walk

less_missing_values_cols_list = list(pct_missing_df.loc[(pct_missing_df.pct_missing < 0.5) & (pct_missing_df.pct_missing > 0), 'col'].values)
df.dropna(subset=less_missing_values_cols_list, inplace=True)

Điều này sẽ giảm số lượng bản ghi trong tập dữ liệu của chúng tôi xuống còn 30.446 bản ghi

Xóa cột (tính năng)

Một cách khác để giải quyết các giá trị bị thiếu trong tập dữ liệu là loại bỏ các cột hoặc tính năng có tỷ lệ phần trăm giá trị bị thiếu đáng kể. Các cột như vậy không chứa nhiều thông tin và có thể bị loại bỏ hoàn toàn khỏi tập dữ liệu. Trong trường hợp của chúng tôi, hãy để chúng tôi loại bỏ tất cả các cột có hơn 40% giá trị bị thiếu trong đó. Các cột này sẽ là build_year, state, Hospital_beds_raion, cafe_sum_500_min_price_avg, cafe_sum_500_max_price_avg và cafe_avg_price_500

# dropping columns with more than 40% null values
_40_pct_missing_cols_list = list(pct_missing_df.loc[pct_missing_df.pct_missing > 40, 'col'].values)
df.drop(columns=_40_pct_missing_cols_list, inplace=True)

Số lượng các tính năng trong tập dữ liệu của chúng tôi hiện là 286

Áp đặt các giá trị còn thiếu

Vẫn còn thiếu dữ liệu trong bộ dữ liệu của chúng tôi. Bây giờ chúng ta sẽ gán các giá trị còn thiếu trong mỗi cột số với giá trị trung bình của cột đó

df_numeric = df.select_dtypes(include=[np.number])
numeric_cols = df_numeric.columns.values
for col in numeric_cols:
    missing = df[col].isnull()
    num_missing = np.sum(missing)
    if num_missing > 0:  # impute values only for columns that have missing values
        med = df[col].median() #impute with the median
        df[col] = df[col].fillna(med)

Các giá trị bị thiếu trong các cột số hiện đã được sửa. Trong trường hợp cột phân loại, chúng tôi sẽ thay thế các giá trị bị thiếu bằng các giá trị chế độ của cột đó

________số 8_______

Tất cả các giá trị còn thiếu trong tập dữ liệu của chúng tôi hiện đã được xử lý. Chúng tôi có thể xác minh điều này bằng cách chạy đoạn mã sau

df.isnull().sum().sum()

Nếu đầu ra bằng 0, điều đó có nghĩa là không còn thiếu giá trị nào trong tập dữ liệu của chúng tôi bây giờ

Chúng tôi cũng có thể thay thế các giá trị bị thiếu bằng một giá trị cụ thể (như -9999 hoặc 'thiếu') sẽ cho biết thực tế là dữ liệu bị thiếu ở vị trí này. Điều này có thể thay thế cho việc quy nạp giá trị còn thiếu

ngoại lệ

Một ngoại lệ là một quan sát bất thường nằm cách xa phần lớn dữ liệu. Các ngoại lệ có thể ảnh hưởng đáng kể đến hiệu suất của mô hình Machine Learning. Do đó, điều quan trọng là phải xác định các ngoại lệ và xử lý chúng.

Hãy để chúng tôi lấy cột 'life_sq' làm ví dụ. Đầu tiên chúng ta sẽ sử dụng phương thức description() để xem xét các số liệu thống kê mô tả và xem liệu chúng ta có thể thu thập bất kỳ thông tin nào từ nó không

df = pd.read_csv('housing_data.csv')
df.shape
0

Đầu ra sẽ trông như thế này

df = pd.read_csv('housing_data.csv')
df.shape
1

Từ đầu ra, rõ ràng là có điều gì đó không đúng. Giá trị tối đa dường như lớn bất thường so với giá trị trung bình và trung bình. Hãy để chúng tôi tạo một boxplot dữ liệu này để hiểu rõ hơn

df = pd.read_csv('housing_data.csv')
df.shape
2

Đầu ra sẽ trông như thế này

Rõ ràng từ boxplot rằng quan sát tương ứng với giá trị tối đa (7478) là một ngoại lệ trong dữ liệu này. Thống kê mô tả, biểu đồ hộp và biểu đồ phân tán giúp chúng tôi xác định các giá trị ngoại lệ trong dữ liệu

Chúng ta có thể xử lý các giá trị ngoại lai giống như cách chúng ta xử lý các giá trị còn thiếu. Chúng tôi có thể loại bỏ các quan sát mà chúng tôi cho là ngoại lệ hoặc chúng tôi có thể thay thế các ngoại lệ bằng các giá trị phù hợp hoặc chúng tôi có thể thực hiện một số loại chuyển đổi trên dữ liệu (như nhật ký hoặc hàm mũ). Trong trường hợp của chúng tôi, hãy bỏ bản ghi có giá trị của 'life_sq' là 7478

df = pd.read_csv('housing_data.csv')
df.shape
3

Bản ghi trùng lặp

Dữ liệu đôi khi có thể chứa các giá trị trùng lặp. Điều quan trọng là phải xóa các bản ghi trùng lặp khỏi tập dữ liệu của bạn trước khi bạn tiến hành bất kỳ dự án Machine Learning nào. Trong dữ liệu của chúng tôi, vì cột ID là mã định danh duy nhất nên chúng tôi sẽ loại bỏ các bản ghi trùng lặp bằng cách xem xét tất cả trừ cột ID

df = pd.read_csv('housing_data.csv')
df.shape
4

Điều này sẽ giúp chúng tôi loại bỏ các bản ghi trùng lặp. Bằng cách sử dụng phương thức shape, bạn có thể kiểm tra xem các bản ghi trùng lặp đã thực sự bị loại bỏ chưa. Số lượng quan sát hiện tại là 30.434

Sửa kiểu dữ liệu

Thông thường trong tập dữ liệu, các giá trị không được lưu trữ theo đúng kiểu dữ liệu. Điều này có thể tạo ra sự cố trong các giai đoạn sau và chúng tôi có thể không nhận được đầu ra mong muốn hoặc có thể gặp lỗi khi thực hiện. Một lỗi kiểu dữ liệu phổ biến là với ngày tháng. Ngày thường được phân tích thành đối tượng trong Python. Có một loại dữ liệu riêng cho ngày trong Pandas, được gọi là DateTime

Trước tiên, chúng tôi sẽ kiểm tra loại dữ liệu của cột dấu thời gian trong dữ liệu của chúng tôi

df = pd.read_csv('housing_data.csv')
df.shape
5

Điều này trả về kiểu dữ liệu 'đối tượng'. Bây giờ chúng tôi biết dấu thời gian không được lưu trữ chính xác. Để khắc phục điều này, hãy chuyển đổi cột dấu thời gian sang định dạng DateTime

df = pd.read_csv('housing_data.csv')
df.shape
6

Bây giờ chúng tôi có dấu thời gian ở định dạng chính xác. Tương tự, có thể có các cột lưu trữ số nguyên dưới dạng đối tượng. Việc xác định các tính năng như vậy và sửa loại dữ liệu là rất quan trọng trước khi bạn tiếp tục với Machine Learning. May mắn thay cho chúng tôi, chúng tôi không có bất kỳ vấn đề nào như vậy trong tập dữ liệu của mình

Ghi chú cuối

Trong bài viết này, chúng ta đã thảo luận về một số cách cơ bản để chúng ta có thể làm sạch dữ liệu trong Python trước khi bắt đầu với dự án Machine Learning của mình. Chúng tôi cần xác định và xóa các giá trị bị thiếu, xác định và xử lý các giá trị ngoại lệ, xóa các bản ghi trùng lặp và sửa loại dữ liệu của tất cả các cột trong tập dữ liệu của chúng tôi trước khi chúng tôi tiến hành tác vụ ML của mình

Tác giả của bài viết này là Vishesh Arora. Bạn có thể kết nối với tôi trên LinkedIn

Phương tiện được hiển thị trong bài viết này về Nhận dạng ngôn ngữ ký hiệu không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả

Làm sạch văn bản trong Python là gì?

Văn bản sạch là ngôn ngữ của con người được sắp xếp lại thành định dạng mà các mẫu máy có thể hiểu được . Việc làm sạch văn bản có thể được thực hiện bằng cách sử dụng mã Python đơn giản để loại bỏ các từ dừng, loại bỏ các từ unicode và đơn giản hóa các từ phức tạp về dạng gốc của chúng.

Một ví dụ về làm sạch dữ liệu là gì?

Làm sạch dữ liệu là sửa lỗi hoặc điểm không nhất quán hoặc sắp xếp lại dữ liệu để dễ sử dụng hơn. Điều này bao gồm những thứ như chuẩn hóa ngày tháng và địa chỉ, đảm bảo giá trị trường (e. g. , "Closes won" và "Closed Won") đối sánh, phân tích cú pháp mã vùng ra khỏi số điện thoại và làm phẳng cấu trúc dữ liệu lồng nhau .

Làm sạch dữ liệu của bạn là gì?

Làm sạch dữ liệu, còn được gọi là làm sạch dữ liệu hoặc xóa dữ liệu, là quá trình sửa dữ liệu không chính xác, không đầy đủ, trùng lặp hoặc nói cách khác là dữ liệu bị lỗi trong một bộ dữ liệu. It involves identifying data errors and then changing, updating or removing data to correct them.

Tại sao Python tốt cho việc dọn dẹp dữ liệu?

Sử dụng R và Python để làm sạch dữ liệu tốt hơn . Xem xét một tập dữ liệu có nhiều dữ liệu bị thiếu. Python's re library makes string operations much faster and simpler than using SQL for the same action, dramatically reducing the amount of time and effort that goes into cleaning. Consider a dataset with a lot of missing data.