Thứ Hai, 22 tháng 4, 2019

Tiền xử lý dữ liệu Python

Machine Learning vẫn còn là một thứ mới mẻ và khiến mình tò mò, cho nên hôm nay mình đã bắt đầu tham gia một khóa học về nó. Chuỗi các bài “Tôi học Machine Learning” là những ghi chú của mình, chứ không phải là bài hướng dẫn, vì vậy có thể có những sai sót chủ quan trong nội dung bài viết. Nếu các bạn thấy chỗ nào sai, cứ thoải mái góp ý, điều đó sẽ rất có ý nghĩa với mình.



Đây là dữ liệu mẫu cần được xử lý Data.csv
Data.csv
Trước khi xử lý dữ liệu ta cần phải sơ chế nó trước.

Xử lý phần dữ liệu bị thiếu

Ở đây, trong dữ liệu mẫu ô B8 và C6 bị thiếu giá trị, trong quá trình sơ chế ta có thể loại bỏ 2 hàng này đi, nhưng như vậy có thể nguy hiểm vì nó có thể chứa các giá trị quan trọng. Có một cách khác là ta sẽ lấy giá trị trung bình trong cột để áp dụng vào các ô bị thiếu.

Code python sử dụng thư viện pandas:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Import libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Import data
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
# Missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

Ở dòng 8, ta lấy X là mảng giá trị của tất cả các hàng và tất cả các cột trừ cột cuối (-1). Ta có giá trị X như sau:


1
2
3
4
5
6
7
8
9
10
array([['France', 44.0, 72000.0],
['Spain', 27.0, 48000.0],
['Germany', 30.0, 54000.0],
['Spain', 38.0, 61000.0],
['Germany', 40.0, nan],
['France', 35.0, 58000.0],
['Spain', nan, 52000.0],
['France', 48.0, 79000.0],
['Germany', 50.0, 83000.0],
['France', 37.0, 67000.0]], dtype=object)

Ở dòng 12, ta xác định các giá trị bị thiếu bằng missing_values='NaN', và thay thế chúng bằng giá trị trung bình strategy='mean' của cột axis=0.
Ta sẽ áp dụng nó cho hai cột 1 và 2 của X (cột đầu tiên là 0): X[:, 1:3] (vì giá trị cột được xác định trong khoảng nên ta phải dùng 1:3 chứ không phải 1:2)
Cuối cùng ta có X:


1
2
3
4
5
6
7
8
9
10
array([['France', 44.0, 72000.0],
['Spain', 27.0, 48000.0],
['Germany', 30.0, 54000.0],
['Spain', 38.0, 61000.0],
['Germany', 40.0, 63777.77777777778],
['France', 35.0, 58000.0],
['Spain', 38.77777777777778, 52000.0],
['France', 48.0, 79000.0],
['Germany', 50.0, 83000.0],
['France', 37.0, 67000.0]], dtype=object)

Các giá trị nan đã được thay thế bằng giá trị trung bình.
Bạn đang đọc bài viết Tiền xử lý dữ liệu Python tại Website: Học Lập Trình