Hướng dẫn how do you automate data clean in python? - làm thế nào để bạn tự động dọn dẹp dữ liệu trong python?

Cách tự động hóa việc chuẩn bị dữ liệu và tiết kiệm thời gian cho dự án khoa học dữ liệu tiếp theo của bạn

Hình ảnh từ Unplash.

Nó thường được biết đến trong số các nhà khoa học dữ liệu rằng việc làm sạch và tiền xử lý dữ liệu tạo nên một phần chính của dự án khoa học dữ liệu. Và, bạn có thể sẽ đồng ý với tôi rằng đó không phải là phần thú vị nhất của dự án.

Vì vậy, (hãy để tự hỏi mình): Chúng ta có thể tự động hóa quá trình này không?

Chà, tự động hóa việc làm sạch dữ liệu dễ nói hơn, vì các bước cần thiết phụ thuộc rất nhiều vào hình dạng của dữ liệu và trường hợp sử dụng cụ thể của miền. Tuy nhiên, có nhiều cách để tự động hóa ít nhất một phần đáng kể của nó theo cách tiêu chuẩn hóa.dependent on the shape of the data and the domain-specific use case. Nevertheless, there are ways to automate at leasta considerable part of it in a standardized way.

Trong bài viết này, tôi sẽ chỉ cho bạn cách bạn có thể xây dựng đường ống làm sạch dữ liệu tự động của riêng mình trong Python 3.8.automated data cleaning pipeline in Python 3.8.

Xem dự án AutoClean trên GitHub.

1 | Chúng ta muốn tự động hóa điều gì?What do we want to Automate?

Câu hỏi đầu tiên và quan trọng nhất mà chúng ta nên tự hỏi trước khi đi vào dự án này là: Những bước nào của quy trình làm sạch dữ liệu Chúng ta thực sự có thể chuẩn hóa và tự động hóa?can we actually standardize and automate?

Các bước rất có thể được tự động hóa hoặc tiêu chuẩn hóa, là các bước được thực hiện nhiều lần, trong mỗi quá trình làm sạch của hầu hết mọi dự án khoa học dữ liệu. Và, vì chúng tôi muốn xây dựng một kích thước một kích thước phù hợp với tất cả các đường ống, chúng tôi muốn đảm bảo rằng các bước xử lý của chúng tôi khá chung chung và có thể thích ứng với các loại bộ dữ liệu khác nhau.performed over and over again, in each cleaning process of almost every data science project. And, since we want to build a “one size fits all” pipeline, we want to make sure that our processing steps are fairly generic and can adapt to various types of datasets.

Ví dụ, một số câu hỏi phổ biến được hỏi nhiều lần trong phần lớn các dự án bao gồm ví dụ:

  • Dữ liệu của tôi đi vào định dạng nào? CSV, JSON, văn bản? Hoặc định dạng khác? Làm thế nào tôi sẽ xử lý định dạng này?format does my data come in? CSV, JSON, text? Or another format? How am I going to handle this format?
  • Những loại dữ liệu của các tính năng dữ liệu của chúng tôi đi vào? Bộ dữ liệu của chúng tôi có chứa dữ liệu phân loại và/hoặc số không? Làm thế nào để chúng ta đối phó với mỗi? Chúng ta có muốn một lần nóng mã hóa dữ liệu của chúng tôi và/hoặc thực hiện các phép biến đổi kiểu dữ liệu không?data types do our data features come in? Does our dataset contain categorical and/or numerical data? How do we deal with each? Do we want to one-hot encode our data, and/or perform data type transformations?
  • Dữ liệu của chúng tôi có chứa các giá trị bị thiếu không? Nếu có, làm thế nào để chúng ta đối phó với chúng? Chúng ta có muốn thực hiện một số kỹ thuật cắt bỏ không? Hoặc chúng ta có thể xóa các quan sát một cách an toàn với các giá trị bị thiếu?missing values? If yes, how do we deal with them? Do we want to perform some imputation technique? Or can we safely delete the observations with missing values?
  • Dữ liệu của chúng tôi có chứa các ngoại lệ không? Nếu có, chúng ta có áp dụng một kỹ thuật chính quy, hay chúng ta để chúng như chúng? Và chờ đợi, chúng ta thậm chí còn coi gì như là một người ngoài cuộc?outliers? If yes, do we apply a regularization technique, or do we leave them as they are? …and wait, what do we even consider as an “outlier”?

Bất kể trường hợp sử dụng nào mà dự án của chúng tôi sẽ được nhắm mục tiêu, đây là những câu hỏi rất có thể sẽ cần được giải quyết, và do đó có thể là một chủ đề tuyệt vời của tự động hóa.automation.

Các câu trả lời cho những câu hỏi này, cũng như việc thực hiện của họ sẽ được thảo luận và hiển thị trong một vài chương tiếp theo.

2 | Xây dựng các khối đường ống

Trước hết, hãy để bắt đầu bằng cách nhập các thư viện mà chúng tôi sẽ sử dụng. Đó sẽ chủ yếu là Python Pandas, Sklearn và Numpy Library, vì những điều này rất hữu ích khi nói đến việc thao túng dữ liệu.Pandas, Sklearn and Numpy library, as these are very helpful when it comes to manipulating data.

Chúng tôi sẽ xác định rằng tập lệnh của chúng tôi sẽ lấy khung dữ liệu gấu trúc làm đầu vào, điều đó có nghĩa là chúng tôi cần ít nhất phải chuyển đổi dữ liệu thành định dạng dữ liệu gấu trúc trước khi nó có thể được xử lý bằng đường ống của chúng tôi.Pandas dataframe as input, which means that we need to at least transform the data into a Pandas dataframe format before it can be processed by our pipeline.

Bây giờ, hãy để Lôi nhìn vào các khối xây dựng của đường ống của chúng tôi. Các chương dưới đây sẽ trải qua các bước xử lý sau:

[Khối 1] Các giá trị bị thiếu [Khối 2] Outliers [Khối 3] Mã hóa phân loại [Khối 4] Trích xuất các tính năng DateTime [Khối 5] Các bước đánh bóng Missing Values
[Block 2] Outliers
[Block 3] Categorical Encoding
[Block 4] Extraction of DateTime Features
[Block 5] Polishing Steps

[Khối 1] Các giá trị bị thiếu

Điều khá phổ biến là một dự án bắt đầu với một bộ dữ liệu có chứa các giá trị bị thiếu và có nhiều phương pháp xử lý chúng. Chúng tôi chỉ có thể xóa các quan sát có chứa các giá trị bị thiếu hoặc chúng tôi có thể sử dụng một kỹ thuật cắt bỏ. Đó cũng là thông lệ để dự đoán các giá trị bị thiếu trong dữ liệu của chúng tôi với sự trợ giúp của các mô hình phân loại hoặc hồi quy khác nhau.

Các kỹ thuật cắt bỏ thay thế dữ liệu bị thiếu bằng các giá trị nhất định, như giá trị trung bình hoặc bằng một giá trị tương tự như các giá trị mẫu khác trong không gian tính năng (f. E. K-NN).

Việc lựa chọn cách chúng tôi xử lý các giá trị bị thiếu sẽ phụ thuộc chủ yếu vào:

  • loại dữ liệu (số hoặc phân loại) và
  • Có bao nhiêu giá trị bị thiếu mà chúng ta có liên quan đến số tổng số mẫu chúng ta có (xóa 1 quan sát trong số 100k sẽ có tác động khác với việc xóa 1 trên 100)

Đường ống của chúng tôi sẽ tuân theo sự cắt giảm chiến lược> Xóa và sẽ hỗ trợ các kỹ thuật sau: Dự đoán với hồi quy tuyến tính và logistic, cắt giảm với K-NN, trung bình, trung bình và chế độ, cũng như xóa.imputation > deletion, and will support the following techniques: prediction with Linear and Logistic Regression, imputation with K-NN, mean, median and mode, as well as deletion.

Tốt, bây giờ chúng ta có thể bắt đầu viết chức năng cho khối xây dựng đầu tiên của chúng tôi. Trước tiên chúng tôi sẽ tạo một lớp riêng để xử lý các giá trị bị thiếu. Hàm xử lý bên dưới sẽ xử lý các giá trị bị thiếu bằng số và phân loại theo một cách khác: một số kỹ thuật cắt bỏ chỉ có thể được áp dụng cho dữ liệu số, trong khi một số chỉ cho dữ liệu phân loại. Hãy cùng nhìn vào phần đầu tiên của nó để xử lý các tính năng số:numerical and categorical missing values in a different manner: some imputation techniques might be applicable only for numerical data, whereas some only for categorical data. Let’s look at the first part of it which handles numerical features:

Xem mã nguồn đầy đủ ở đây

Hàm này kiểm tra phương pháp xử lý nào đã được chọn cho các tính năng số và phân loại. Cài đặt mặc định được đặt thành ‘Tự động, có nghĩa là:

  • Các giá trị bị thiếu số trước tiên sẽ được đưa ra thông qua dự đoán với hồi quy tuyến tính và các giá trị còn lại sẽ được đưa ra với K-NNmissing values will first be imputed through prediction with Linear Regression, and the remaining values will be imputed with K-NN
  • Các giá trị bị thiếu phân loại trước tiên sẽ được đưa ra thông qua dự đoán với hồi quy logistic và các giá trị còn lại sẽ được đưa ra với K-NNmissing values will first be imputed through prediction with Logistic Regression, and the remaining values will be imputed with K-NN

Đối với các tính năng phân loại, nguyên tắc tương tự như trên áp dụng, ngoại trừ việc chúng tôi sẽ chỉ hỗ trợ cắt giảm với hồi quy logistic, K-NN và chế độ chế độ. Khi sử dụng K-NN, trước tiên chúng tôi sẽ mã hóa các tính năng phân loại của chúng tôi cho các số nguyên, sử dụng các nhãn này để dự đoán các giá trị bị thiếu của chúng tôi và cuối cùng ánh xạ các nhãn trở lại các giá trị ban đầu của chúng.

Tùy thuộc vào phương thức xử lý được chọn, hàm xử lý gọi các hàm bắt buộc từ bên trong lớp của nó để thao tác dữ liệu với sự trợ giúp của các gói sklearn khác nhau: hàm _impute sẽ phụ trách K-NN, trung bình, trung bình và chế độ, _lin_Regression_Impute và log_Regression_impute sẽ thực hiện các yếu tố dự đoán và tôi cho rằng vai trò của _Delete là tự giải thích.

Cấu trúc lớp thiếu hụt cuối cùng của chúng tôi sẽ trông như sau:

Xem mã nguồn đầy đủ ở đây

Tôi sẽ không đi sâu vào chi tiết về mã trong các chức năng còn lại của lớp, nhưng tôi mời bạn kiểm tra mã nguồn đầy đủ trong kho lưu trữ AutoClean.

Sau khi chúng tôi hoàn thành tất cả các bước cần thiết, chức năng của chúng tôi sau đó xuất dữ liệu đầu vào được xử lý.

Thật tuyệt, chúng tôi đã làm nó qua khối đầu tiên của đường ống của chúng tôi. Bây giờ, hãy để Lôi nghĩ về cách chúng tôi sẽ xử lý các ngoại lệ trong dữ liệu của chúng tôi.

[Khối 2] Outliers

Khối thứ hai của chúng tôi sẽ tập trung vào việc xử lý các ngoại lệ trong dữ liệu của chúng tôi. Đầu tiên chúng ta cần tự hỏi: Khi nào chúng ta coi một giá trị là một ngoại lệ? Đối với đường ống của chúng tôi, chúng tôi sẽ sử dụng một quy tắc thường được áp dụng nói rằng một điểm dữ liệu có thể được coi là một ngoại lệ nếu nằm ngoài phạm vi sau:outside the following range:

[Q1 - 1.5 * IQR; Q3 + 1.5 * IQR]

Trong đó Q1 và Q3 là phần 1 và tứ phân vị thứ 3 và IQR là phạm vi liên vùng. Dưới đây bạn có thể thấy điều này được hiển thị độc đáo với một Boxplot:

Hình ảnh của tác giả.

Bây giờ chúng tôi đã xác định một ngoại lệ là gì, bây giờ chúng tôi phải quyết định cách chúng tôi xử lý những điều này. Có một lần nữa các chiến lược khác nhau để làm như vậy, và đối với trường hợp sử dụng của chúng tôi, chúng tôi sẽ tập trung vào hai chiến lược sau: Winorization và Xóa.

Winsorization được sử dụng trong các số liệu thống kê để hạn chế các giá trị cực đoan trong dữ liệu và giảm ảnh hưởng của các ngoại lệ bằng cách thay thế chúng bằng một phần trăm cụ thể của dữ liệu.

Khi sử dụng Winsorization, chúng tôi sẽ một lần nữa sử dụng phạm vi được xác định ở trên để thay thế các ngoại lệ:

  • Các giá trị> giới hạn trên sẽ được thay thế bằng giá trị phạm vi trên vàupper range value and
  • Các giá trị lower range value.

Cấu trúc cuối cùng của lớp Outliers của chúng tôi sẽ trông như sau:

Xem mã nguồn đầy đủ ở đây

Chúng tôi đã đến cuối khối thứ hai - bây giờ hãy để xem cách chúng tôi có thể mã hóa dữ liệu phân loại.

[Khối 3] Mã hóa phân loại

Để có thể thực hiện các tính toán với dữ liệu phân loại, trong hầu hết các trường hợp, chúng tôi cần dữ liệu của mình là loại I số I. e. số, hoặc số nguyên. Do đó, các kỹ thuật phổ biến bao gồm dữ liệu mã hóa một nóng hoặc dữ liệu mã hóa nhãn.one-hot encoding data, or label encoding data.

Mã hóa dữ liệu một lần nóng biểu thị từng giá trị duy nhất của một tính năng dưới dạng vectơ nhị phân, trong khi mã hóa nhãn gán một số nguyên duy nhất cho mỗi giá trị.

Hình ảnh của tác giả.

Bây giờ chúng tôi đã xác định một ngoại lệ là gì, bây giờ chúng tôi phải quyết định cách chúng tôi xử lý những điều này. Có một lần nữa các chiến lược khác nhau để làm như vậy, và đối với trường hợp sử dụng của chúng tôi, chúng tôi sẽ tập trung vào hai chiến lược sau: Winorization và Xóa.pros and cons for each of the methods, like f. e. the fact that one-hot encoding produces a lot of additional features. Also, if we label encode, the labels might be interpreted by certain algorithms as mathematically dependent: 1 apple + 1 orange = 1 banana, which is obviously a wrong interpretation of this type of categorical data.

Winsorization được sử dụng trong các số liệu thống kê để hạn chế các giá trị cực đoan trong dữ liệu và giảm ảnh hưởng của các ngoại lệ bằng cách thay thế chúng bằng một phần trăm cụ thể của dữ liệu.

  • Khi sử dụng Winsorization, chúng tôi sẽ một lần nữa sử dụng phạm vi được xác định ở trên để thay thế các ngoại lệ:one-hot-encoded
  • Các giá trị> giới hạn trên sẽ được thay thế bằng giá trị phạm vi trên vàlabel-encoded
  • Các giá trị not be encoded

Cấu trúc cuối cùng của lớp Outliers của chúng tôi sẽ trông như sau:define manually which features should be encoded, and how. This is implemented in the handle function of the EncodeCateg class:

Chúng tôi đã đến cuối khối thứ hai - bây giờ hãy để xem cách chúng tôi có thể mã hóa dữ liệu phân loại.

Hàm tay cầm lấy một danh sách làm đầu vào, trong khi các tính năng chúng tôi muốn mã hóa thủ công có thể được xác định bằng tên cột hoặc chỉ mục như sau:list as input, whereas the features we want to manually encode can be defined by column names or indexes as following:

encode_categ = [‘onehot’, [‘column_name’, 2]]

Bây giờ chúng tôi đã xác định cách xử lý các ngoại lệ, chúng tôi có thể chuyển sang khối thứ tư của mình, điều này sẽ bao gồm việc trích xuất các tính năng DateTime.datetime features.

[Khối 4] Trích xuất các tính năng DateTime

Nếu bộ dữ liệu của chúng tôi chứa một tính năng có giá trị DateTime, như dấu thời gian hoặc ngày, chúng tôi rất có thể sẽ muốn trích xuất chúng để chúng trở nên dễ xử lý hơn khi xử lý hoặc trực quan hóa sau này.datetime values, like timestamps or dates, we will very likely want to extract these so they become easier to handle when processing or visualizing later on.

Chúng tôi cũng có thể làm điều này một cách tự động: Chúng tôi sẽ cho phép tìm kiếm đường ống của chúng tôi thông qua các tính năng và kiểm tra xem một trong số này có thể được chuyển đổi thành loại DateTime hay không. Nếu có, thì chúng ta có thể giả định một cách an toàn rằng tính năng này giữ các giá trị DateTime.datetime type. If yes, then we can safely assume that this feature holds datetime values.

Xem mã nguồn đầy đủ ở đây

Chúng ta có thể xác định độ chi tiết mà tại đó các tính năng DateTime được trích xuất, trong khi mặc định được đặt thành ‘S trong vài giây. Sau khi trích xuất, chức năng kiểm tra xem các mục nhập cho ngày và thời gian có nghĩa là hợp lệ không: nếu các cột được trích xuất ‘ngày,‘ tháng và ’năm, tất cả đều chứa 0, cả ba sẽ bị xóa. Điều tương tự cũng xảy ra đối với ‘giờ,‘ phút và ‘sec.datetime features are extracted, whereas the default is set to ‘s’ for seconds. After the extraction, the function checks whether the entries for dates and times are valid meaning: if the extracted columns ‘Day’, ‘Month’ and ‘Year’ all contain 0’s, all three will be deleted. The same happens for ‘Hour’, ‘Minute’ and ‘Sec’.

Bây giờ chúng tôi đã hoàn thành việc trích xuất DateTime, chúng tôi có thể chuyển sang khối xây dựng cuối cùng của đường ống của chúng tôi, điều này sẽ bao gồm một số điều chỉnh cuối cùng để đánh bóng dữ liệu đầu ra của chúng tôi.datetime extraction we can move on to the last building block of our pipeline which will consist of some final adjustment to polish our output dataframe.

[Khối 5] DataFrame Polishing

Bây giờ chúng tôi đã xử lý bộ dữ liệu của mình, chúng tôi vẫn cần thực hiện một vài điều chỉnh để làm cho DataFrame của chúng tôi trông đẹp. Ý tôi là gì?

Đầu tiên, một số tính năng ban đầu thuộc loại số nguyên có thể đã được chuyển đổi thành phao, do các kỹ thuật cắt bỏ hoặc các bước xử lý khác được áp dụng. Trước khi xuất bản dữ liệu cuối cùng của chúng tôi, chúng tôi sẽ chuyển đổi các giá trị này trở lại Tointegers.integer could have been converted to floats, due to imputation techniques or other processing steps that were applied. Before outputting our final dataframe we will convert these values back to integers.

Thứ hai, chúng tôi muốn làm tròn tất cả các tính năng float trong bộ dữ liệu của chúng tôi với cùng một số thập phân như chúng có trong bộ dữ liệu đầu vào ban đầu của chúng tôi. Điều này là để tránh một mặt không cần thiết theo dấu 0 0 trong số thập phân nổi, và mặt khác, đảm bảo không làm tròn các giá trị của chúng tôi nhiều hơn các giá trị ban đầu của chúng tôi.round all the float features in our dataset to the same number of decimals as they had in our original input dataset. This is to avoid on one hand unnecessary trailing 0’s in the float decimals, and on the other hand make sure not to round our values more than our original values.

Một lần nữa, tôi sẽ không đi sâu vào chi tiết về mã đằng sau những ý tưởng này, nhưng tôi mời bạn kiểm tra mã nguồn đầy đủ trong kho lưu trữ AutoClean.

3 | Để tất cả chúng cùng nhau

Trước hết, chúc mừng bạn đã gắn bó với tôi đến nay! 🎉

Bây giờ chúng tôi đã đến một phần mà chúng tôi muốn đặt tất cả các khối xây dựng của chúng tôi lại với nhau để chúng tôi thực sự có thể bắt đầu sử dụng đường ống của chúng tôi. Thay vì đăng mã đầy đủ ở đây, bạn sẽ tìm thấy mã AutoClean đầy đủ trong kho lưu trữ GitHub của tôi:AutoClean code in my GitHub repository:

Hãy cùng xem xét một ví dụ trực quan về cách AutoClean xử lý bộ dữ liệu mẫu bên dưới:

Bộ dữ liệu mẫu. Hình ảnh của tác giả.

Tôi đã tạo một bộ dữ liệu ngẫu nhiên và như bạn có thể thấy, tôi đã làm cho nó khá khác nhau khi nói đến các loại dữ liệu khác nhau và tôi đã thêm một vài giá trị NAN ngẫu nhiên trong tập dữ liệu.

Bây giờ chúng ta có thể chạy tập lệnh AutoClean như sau:

DataFrame đầu ra được làm sạch kết quả trông như dưới đây:

Bộ dữ liệu mẫu được xử lý. Hình ảnh của tác giả.

Trong hình trên, bạn sẽ thấy được trực quan hóa thay đổi AutoClean được thực hiện cho dữ liệu của chúng tôi. Các giá trị bị thiếu được đánh dấu được đánh dấu bằng màu vàng, các ngoại lệ màu xanh lá cây, các giá trị dữ liệu được trích xuất màu xanh lam và mã hóa phân loại màu cam.yellow, the outliers in green, the extracted datetime values in blue and the categorical encodings in orange.

Tôi hy vọng bài viết này là thông tin cho bạn và AutoClean sẽ giúp bạn tiết kiệm một số phút có giá trị trong thời gian của bạn. 🚀

Hãy để lại nhận xét nếu bạn có bất kỳ câu hỏi hoặc phản hồi. Đóng góp trên GitHub cũng được chào đón!

Bạn có thể tự động hóa việc làm sạch dữ liệu không?

Cách tiếp cận phổ biến để thực hiện làm sạch dữ liệu là viết các tập lệnh cho nhiệm vụ. Các tập lệnh này sau đó được chạy bất cứ khi nào cần thiết để thực hiện làm sạch dữ liệu ad hoc tự động.

Python có tốt cho việc làm sạch dữ liệu không?

Tầm quan trọng của Python, Numpy và Pandas, cả hai thư viện Python (có nghĩa là các công cụ được lập trình sẵn) là những công cụ được lựa chọn giữa các nhà khoa học dữ liệu khi nói đến làm sạch dữ liệu, chuẩn bị và phân tích khác.both Python libraries (meaning pre-programmed toolsets) are the tools of choice amongst data scientists when it comes to data cleaning, prep, and other analysis.

Tự động hóa dữ liệu trong Python là gì?

Các gói chính để tự động hóa phân tích dữ liệu với Python, nó đọc các tệp được lưu trữ trong một thư mục và tạo một danh sách chứa tất cả chúng.Vì Python rất tuyệt vời khi lặp qua các danh sách, chúng tôi có thể sử dụng GLOB để tạo danh sách tất cả các tệp dữ liệu của chúng tôi và có Python phân tích từng lần một.It reads the files stored in a folder and creates a list containing all of them. Since Python is great at iterating through lists, we can use glob to create a list of all of our data files and have Python analyze them one at a time.

Những kỹ thuật nào chúng ta sử dụng để làm sạch dữ liệu?

Dưới đây là 8 kỹ thuật làm sạch dữ liệu hiệu quả:..
Loại bỏ các bản sao..
Xóa dữ liệu không liên quan ..
Chuẩn hóa vốn hóa ..
Chuyển đổi kiểu dữ liệu ..
Định dạng rõ ràng ..
Sửa lôi..
Dịch ngôn ngữ ..
Xử lý các giá trị bị thiếu ..