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ị 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ị

Bài Viết Liên Quan

Chủ Đề