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

Submitted by tinhxleev2 on Wed, 06/17/2020 - 11:22

Khám phá dữ liệu

Bạn tiếp cận với một bộ dữ liệu hoàn toàn mới và nóng lòng muốn bắt đầu khám phá nó ngay. Nhưng bắt đầu từ đâu và làm thế nào để bảo đảm bộ dữ liệu này 'sạch'?. Trong bài này mình sẽ giới thiệu cách làm sạch dữ liệu trong Python. Bạn sẽ tìm hiểu cách khám phá dữ liệu, chuẩn đoán các outliers, số liệu thiếu và các hàng bị trùng lặp. 

  1. Khám dữ liệu để làm sạch
  2. Tải và xem dữ liệu
  3. Khám kỹ dữ liệu
  4. Phân tích dữ liệu thăm dò
  5. Tính toán tổng hợp thống kê
  6. Tính toán thường xuyên cho dữ liệu xếp theo mục
  7. Đồ họa phân tích dữ liệu giải thích
  8. Đồ họa đơn biến với histograms
  9. Đồ họa đa biến với boxplots
  10. Đồ họa đa biến với scatter plots

1. Khám dữ liệu để làm sạch liên quan tới chuẩn bị dữ liệu để phân tích, và thông thường dữ liệu không bao giờ 'gọn' cả

Thường thì khi phân tích dữ liệu chúng ta hay gặp các vấn đề khá phổ biến sau đây:

  • Tên cột không nhất quán, cột viết hoa cột viết thường là một ví dụ điển hình
  • Dữ liệu thiếu (NaN)
  • Outliers (điểm dị biệt)
  • Hàng lặp lại
  • Không gọn gàng
  • Cần phải xử lý dữ liệu cột
  • Kiểu cột có thể có dấu hiệu cho thấy số liệu không như dự đoán

Để xem qua bộ dữ liệu bạn sẽ làm quen với một số dòng lệnh sau, áp dụng cho dataframe df

# In ra 5 hàng đầu tiên của df

print(df.head())

# In ra 5 hàng cuối cùng của df

print(df.tails())

# In ra số hàng và số cột của df

print(df.shape())

# In ra tên cột của df

print(df.columns)

Các dòng lệnh này rất hữu dụng để nhận diện một số dữ liệu thiếu hay không gọn tiềm ẩn. 

Có một dòng lệnh khác đó là 

df.info()

Phương pháp .info() cung cấp thông tin quan trọng về df, như số hàng, số cột, giá trị bị thiếu ở mỗi cột và dữ liệu lưu ở từng cột. 

Thêm một phương pháp khác nữa để thống kê dữ liệu từng cột .describe()

2. Tải và xem dữ liệu

Làm quen với bộ dữ liệu bằng các khám phá bộ dữ liệu với pandas, đây là một bước quan trọng việc làm sạch dữ liệu.

Trước tiên mình tải bộ dữ liệu vào một dataframe rồi kiểm tra bộ dữ liệu này bằng phương pháp .head().tail()

Với cách này bạn sẽ phát hiện ra, in ra 5 hàng và nếu bộ dữ liệu có nhiều cột bạn sẽ không thể nhìn thấy hết được, do vậy bạn sẽ cần thêm hai thuộc tính khác đó là .shape và .columns

.shape kiểm tra xem bộ dữ liệu có bao nhiêu hàng bao nhiêu cột

.columns để kiểm tra tên của từng cột trong bộ dữ liệu

3. Khám kỹ dữ liệu

Trong mục 2 tài và xem dữ liệu, bạn có thể nhận diện những chỗ khả năng không sạch và dữ liệu thiếu. Bạn sẽ tiếp tục khám dữ liệu với một phương pháp rất hiệu quả .info

.info cung cấp những thông tin quan trọng về DataFrame, như là số hàng, số cột, số giá trị thiếu ở từng cột và kiểu dữ liệu lưu ở từng cột. Đây là một loại thông tin để xem các cột chứa loại dữ liệu ví dụ số hay chữ (string). Từ đó bạn có thể xem các cột có đủ thông tin trong đó không

4. Phân tích dữ liệu thăm dò

df.info cung cấp khá nhiều thông tin, số cột, đếm giá trị nổi bật của từng cột. 

Đếm số lần xuất hiện (frequency counts) sử dụng hàm value_counts

df.tencot.value_counts(dropna=False)

df['tencot'].value_counts(dropna=False) 

Cả hai trường hợp trên đều cho kết quả tương tự nhau, trường hợp thứ nhất được sử dụng khi cột không có những kí tự đặc biệt, dấu cách hay của hàm Python.

Kiểm tra sơ bộ 5 hàng đầu tiên

df.tencot.value_counts(dropna=False).head()

Cột cũng có thể missing - thiế string hoặc NaN thiếu giá trị, phương pháp trên đều cũng sẽ hiện ra. 

Thống kê tổng hợp, sử dụng phương pháp .describe() cung cấp những thông tin về count, mean, std, min, 25%, 50%, 75%, max

  • Cột số
  • Điểm dị biệt - cao hơn hay thấp hơn yêu cầu phải điều tra xa hơn

Đồ họa phân tích dữ liệu giải thích

Trực quan hóa dữ liệu không chỉ đem lại cái nhìn về những kiểu dữ liệu đại diện hay báo cáo mà nó còn cung cấp thông tin về những điểm dị biệt, lên kế hoạch để từng bước làm sạch dữ liệu. 

  • Bars plot - đếm dữ liệu riêng biệt
  • Histogram - đếm dữ liệu liên tục. Một ví du khi làm việc với histogram
  • Box plots - trực quan các hóa thống kê tổng hợp cơ bản vào một bảng để nhanh chóng so sánh nhiều hạng mục.

import matplotlib.pyplot as plt 

df.ten_cot.plot('hist')

plot.show()

Các plot này cho phép chúng ta nhìn vào độ xuất hiện của dữ liệu để xem có những lỗi tiềm ẩn trong đó không.

Nhận diện lỗi, trong môt df có nhiều cột, một trong những thái cột có giá trị hơn một giá trị định sẵn thì chúng ta có thể sử dụng 

df[df.ten_cot > gia_tri]

Từ đây sẽ phát hiện ra điểm dị biệt, và không phải tất cả các điểm dị biệt đều xấu, có điểm là giá trị chính xác có điểm là lỗi.

 

Learing