Cuộc cách mạng khoa học công nghiệp lần thứ 4

Chúng ta không thể biết trước điều gì sẽ xảy ra trong thế giới này, ngoại trừ: Máy học đang dần thống trị!

Tổng số lượt xem trang

Thứ Tư, 28 tháng 6, 2017

BÀI 4: CHUẨN HÓA DỮ LIỆU

Sau khi đã tìm hiểu dữ liệu qua thống kê và hình ảnh, chúng ta đã có thể bắt tay vào việc tiền xử lý dữ liệu.
Sau bài học này, người học có khả năng:
·         Điều chỉnh lại tỉ lệ dữ liệu trên các đặc tính (Rescale)
·         Chuẩn hóa dữ liệu (Standardization)
·         Bình thường hóa dữ liệu (normalization)
·         Số hóa dữ liệu (Digitalization)
Bước tiền xử lý dữ liệu như một bước bắt buộc trong rất nhiều bài toán. Điều khó khăn là mỗi thuật toán lại có những giả định về dữ liệu khác nhau nên nó cần những bước chuẩn hóa dữ liệu khác nhau. Nếu chúng ta làm tốt bước tiền xử lý, thuật toán Máy học sẽ được cải thiện hiệu quả rõ rệt [1].

4.1 Điều chỉnh tỉ lệ (Rescale Data)

Dữ liệu gồm nhiều đặc tính (cột), và mỗi đặc tính thì lại có các đơn vị và độ lớn nhỏ khác nhau. Điều này tác động tới tính hiệu quả của nhiều thuật toán, ví dụ thời gian thực hiện, quá trình hội tụ, hay thậm chí ảnh hưởng cả tới độ chính xác của thuật toán. Chính vì vậy, người ta thường tiến hành điều chỉnh dữ liệu để các đặc tính cùng có chung một tỉ lệ (data scaling) . Và thường để các đặc tính có giá trị trong khoảng [0, 1]. Kết quả sẽ giúp cho nhiều thuật toán quan trọng trong Máy học sử dụng kĩ thuật Gradient Descent (sẽ đề cập sau) hội tụ nhanh. Việc điều chỉnh tỉ lệ thường dùng công thức sau đây (giả sử chúng ta đang làm trên một cột dữ liệu số cụ thể, gọi là F):
                                                               (4.1)
Trong đó : là giá trị sau khi điều chỉnh; x: là giá trị ban đầu trong cột F,
 ( ): là giá trị nhỏ nhất (lớn nhất) của cột F.
Công thức (4.1) trên được cài đặt trong lớp MinMaxScaler [4] của gói preprocessing trong scikit-learn [3], một thư viện mã nguồn mở dùng Python được dùng rất phổ biến trong cộng đồng Máy học. Chương trình (4.1) sau sẽ cho kết quả giống nhau giữa thư viện và công thức (4.1).
Chương trình sau sẽ minh họa cho việc điều chỉnh tỉ lệ dữ liệu:
01. from pandas import read_csv
02. import os
03. from sklearn import preprocessing
04. duongDan = os.getcwd() + '\data\iris.data.csv'
05. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
06. duLieu = read_csv(duongDan, names=tenCot)
07. maTran = duLieu.values
08. X = maTran[:,0:4]09. y = maTran[:,4]
10. dieuChinh = preprocessing.MinMaxScaler(feature_range= (0,1))
11. X_dieuChinh = dieuChinh.fit_transform(X)
12. print (X[:3])         # In ra 3 dòng đầu của X
13. print (X_dieuChinh[:3])        # In ra 3 dòng đầu của X sau khi điều chỉnh
14. max = duLieu['sepal length'].max() # lấy giá trị lớn nhất của cột
15. min = duLieu['sepal length'].min() # lấy giá trị nhỏ nhất của cột
16. x11 = duLieu['sepal length'][0]    # lấy giá trị cột đầu tiên, hàng đầu tiên
17. x11_dieuChinh = 1.0 * (x11 - min) / (max - min)
18. print (x11_dieuChinh)
19. X_banDau = dieuChinh.inverse_transform(X_dieuChinh)
20. print (X_banDau[:3])           # In ra 3 dòng đầu của X sau khi chuyển ngược lại
Chương trình 4.1: Điều chỉnh tỉ lệ của toàn bộ tập dữ liệu về [0,1].
Một vài chú thích thêm cho Chương trình 4.1:
-          Từ dòng 01-06: là kết nối tới tệp dữ liệu hoa Ailen
-          Dòng 07: chuyển toàn bộ dữ liệu từ DataFrame sang mảng dữ liệu nhiều chiều (ndarray)
-          Dòng 08: tách các đặc tính riêng ra, thường đặt là X (lấy các cột 0-3)
-          Dòng 09: tách nhãn riêng ra, thường đặt là y (lấy cột 4)
-          Dòng 10: thiết lập chế độ điều chỉnh dữ liệu với kĩ thuật MinMaxScaler
-          Dòng 11: Biến đổi X, dữ liệu sau khi biến đổi được lưu vào X_dieuchinh
-          Dòng 12 và 13 để in ra dữ liệu trước và sau khi điều chỉnh
-          Từ dòng 14-18 để kiểm định cho công thức (4.1)
-          Dòng 19: chuyển lại điều chỉnh
-          Dòng 20: khi in ra để kiểm định X = X_banDau
Thực thi Chương trình 4.1 sẽ cho kết quả
[[5.1 3.5 1.4 0.2]
 [4.9 3.0 1.4 0.2]
 [4.7 3.2 1.3 0.2]]
[[ 0.22222222  0.625       0.06779661  0.04166667]
 [ 0.16666667  0.41666667  0.06779661  0.04166667]
 [ 0.11111111  0.5         0.05084746  0.04166667]]
0.222222222222
[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]]

4.2 Chuẩn hóa dữ liệu (Standardize Data)

Nhiều thuật toán trong Máy học giả định rằng dữ liệu đầu vào có phân phối Gauss.  Chính vì vậy, khi chuẩn hóa dữ liệu về dạng chuẩn phân phối Gauss với giá trị trung bình bằng 0 và phương sai bằng 1 (người học có thể xem ở [2]). Nhờ việc chuẩn hóa, các thuật toán như linear regression, logistic regression được cải thiện.
Công thức để chuẩn hóa dữ liệu:
                                                                  (4.2)
Trong đó  là giá trị trung binh, và  là độ lệch chuẩn.
Thư viện scikit-learn cũng cài đặt công thức (4.2) trong lớp StandardScalar [5]:
01. from pandas import read_csv
02. import os03. from sklearn import preprocessing
04. from numpy import set_printoptions
05. duongDan = os.getcwd() + '\data\iris.data.csv'
06. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
07. duLieu = read_csv(duongDan, names=tenCot)
08. maTran = duLieu.values
09. X = maTran[:,0:4]
10. y = maTran[:,4]
11. dieuChinh = preprocessing.StandardScaler().fit (X)# lớp StandardScaler
12. X_dieuChinh = dieuChinh.transform(X)
13. set_printoptions(precision=3)
14. print (X_dieuChinh[:5])
15. print (X_dieuChinh.mean(axis = 0))      # tính giá trị trung bình mỗi cột
16. print (X_dieuChinh.std(axis = 0))       # tính giá trị phương sai mỗi cột
Chương trình 4.2: Điều chỉnh tỉ lệ của toàn bộ tập dữ liệu theo phân phối Gauss.
Một vài chú thích thêm cho chương trình 4.2:
-          Dòng 04: khai bóa thư viện numpy để định dạng số khi in ra
-          Dòng 05-10: giống như Chương trình 4.1
-          Dòng 11: dùng lớp StandardScaler để về sau có thể áp dụng cho tập dữ liệu kiểm tra hay dự đoán giống như đã áp dụng cho tập huấn luyện
-          Dòng 12: Chuyển dữ liệu sang dạng phân phối chuẩn Gauss
-          Dòng 13: Định dạng số khi in ra có 3 số sau phần thập phân
-          Dòng 14: Dữ liệu sau khi điểu chỉnh
-          Dòng 15: Tính trung bình cộng của mỗi cột tương ứng sau khi điều chỉnh dữ liệu. Tham số axis = 0 khi phép tính tác động nên cột, nếu axis = 1 khi phép tính tác động nên hàng.
-          Dòng 16: Tính phương sai của mỗi cột tương ứng sau khi điều chỉnh dữ liệu
Chú ý rằng Dòng 11 và 12, có thể dùng bằng một câu lệnh sau: 
         
X_dieuChinh = preprocessing.StandardScaler().fit_transform(X)
Tuy nhiên chúng ta nên giữ nguyên vì chúng ta cần đối tượng StandardScaler (ở dòng 11) để áp dụng cho dữ liệu dự đoán (hay kiểm tra) về sau.
Để kiểm định xem tổng của mỗi cột sau khi điều chỉnh có phân phối chuẩn Gauss, và kết quả của Chương trình 4.2 như sau:
[[-0.901  1.032 -1.341 -1.313]
 [-1.143 -0.125 -1.341 -1.313]
 [-1.385  0.338 -1.398 -1.313]
 [-1.507  0.106 -1.284 -1.313]
 [-1.022  1.263 -1.341 -1.313]]
[ -4.737e-16  -6.632e-16   3.316e-16  -2.842e-16]
[ 1.  1.  1.  1.]

Như chúng ta thấy, trung bình cộng của mỗi cột xấp xỉ 0, và phương sai là 1. Thư viện dùng trong scikit-learn đúng là cài đặt công thức (4.2)!

4.3 Bình thường hóa dữ liệu (Normalize Data)

Bình thường hóa dữ liệu là sự điều chỉnh tỉ lệ dữ liệu sao cho mỗi thể hiện (trên hàng) đều cho độ dài là 1. Kĩ thuật này rất cần thiết cho dữ liệu thưa (gồm nhiều số 0) trên mỗi cột đặc tính. Điều này đặc biệt ảnh hưởng tới các thuật toán lấy trọng số của các giá trị nhập vào như neuron networks, hay các thuật toán dùng độ đo khoảng cách (như k-Nearest Neighbors). Thư viện scikit-learn cũng cài đặt tác vụ này trong lớp Normalizer [6]:
01. from pandas import read_csv
02. import os
03. from sklearn import preprocessing
04. from numpy import set_printoptions
05. duongDan = os.getcwd() + '\data\iris.data.csv'
06. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
07. duLieu = read_csv(duongDan, names=tenCot)
08. maTran = duLieu.values
09. X = maTran[:,0:4]
10. y = maTran[:,4]
11. dieuChinh = preprocessing.Normalizer().fit (X)# lớp Normalizer
12. X_dieuChinh = dieuChinh.transform(X)
13. set_printoptions(precision=3)
14. print (X_dieuChinh[:5])
Chương trình 4.3: Điều chỉnh tỉ lệ của toàn bộ tập dữ liệu về dạng bình thường (normalization).

Chương trình 4.3 không khác gì nhiều Chương trình 4.2, ngoài việc sử dụng lớp Normalizer và bỏ 2 dòng cuối.
Chương trình 4.3 sẽ cho kết quả như sau:
[[ 0.804  0.552  0.221  0.032]
 [ 0.828  0.507  0.237  0.034]
 [ 0.805  0.548  0.223  0.034]
 [ 0.8    0.539  0.261  0.035]
 [ 0.791  0.569  0.221  0.032]]

Nếu chúng ta cộng tổng bình phương của các giá trị trên một hàng, kết quả sẽ là 1. Đây chính là điều chúng ta mong muốn.

4.4 Số hóa dữ liệu (Digitalization)

Rất nhiều các thuật toán Máy học chỉ chấp nhận dữ liệu nhập vào dưới dạng số. 
Tuy nhiên, có nhiều trường hợp dữ liệu không được dưới dạng số, mà được ghi dưới 
dạng liệt kê rời rạc, ví dụ như: ["male", "female"], ["from Europe", "from US", "from Asia"], 
["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]. 
Hay như trong bài toán của chúng ta, hoa Ailen, cột kết quả cuối cùng (class) có 3 dạng:
[“Iris - setosa”, “Iris - versicolor”, “Iris - virginica”]. 
Để cho thuận tiện trong quá trình xử lý, những kiểu dữ liệu này cần phải chuyển sang kiểu 
số nguyên, ví dụ ["male", "female"] có thể chuyển sang [0, 1], và  
[“Iris - setosa”, “Iris - versicolor”, “Iris - virginica”] nên chuyển sang [0, 1, 2]. 
Thư viện scikit-learn có lớp LabelEncoder thực thi tác vụ này [7].
 
01. from pandas import read_csv
02. import os
03. from sklearn import preprocessing
04. from numpy import set_printoptions
05. duongDan = os.getcwd() + '\data\iris.data.csv'
06. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
07. duLieu = read_csv(duongDan, names=tenCot)
08. maTran = duLieu.values
09. X = maTran[:,0:4]10. y = maTran[:,4]
11. chuyenDoi = preprocessing.LabelEncoder()
12. chuyenDoi.fit(y)
13. y_chuyenDoi = chuyenDoi.transform(y)
14. print y_chuyenDoi
Chương trình 4.4: Chuyển dữ liệu trong tập đặc trưng sang dạng số.

Một số chú thích cho Chương trình 4.4:
-          Dòng 11: tạo ra lớp LabelEncoder để chuyển đổi nhãn.
-          Dòng 12: nhận diễn các nhãn trong y.
-          Dòng 13: chuyển nhãn cũ sang nhãn mới trong đoạn [0, n-1], trong đó n là số các nhãn khác nhau trong y. Ở ví dụ của chúng ta n = 3.
Chương trình 4.4 sẽ cho kết quả như sau:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
 
Kết quả cho 50 số 0, 50 số 1 và 50 số 2 liên tiếp, lần lượt ứng với ba nhãn “Iris - setosa”, 
“Iris - versicolor”,  và “Iris - virginica”. Như vậy là dữ liệu nhãn đã được chuyển sang 
số như mong đợi. Vậy là mọi thứ đã sẵn sàng! :-)

4.5 Kết luận:

·         Tiền xử lý là bước chuẩn bị dữ liệu thường được yêu cầu trước khi thực hiện các thuật toán trong Máy học, nhằm giúp thuật toán hiệu quả hơn. Trong nhiều bài toán, chúng ta phải sử dụng một vài cách xử lý dữ liệu khác nhau, nhằm chọn ra được cách phù hợp nhất.
  • Một cấu trúc chương trình Máy học tới lúc này của chúng ta là:
1.      Kết nối dữ liệu (có thể online, hoặc tệp trên máy tính)
2.      Tách dữ liệu ra thành: dữ liệu nhập – đặc tính (features) và dữ liệu dự đoán (label)
3.      Áp dụng các kĩ thuật tiền xử lý dữ liệu cho dữ liệu nhập
  • Mỗi một kĩ thuật điều chỉnh dữ liệu đều có nhược điểm riêng:
o   Nếu dữ liệu chúng ta có điểm kì dị (outliers), quá trình điều chỉnh và bình thường hóa (normalization) dữ liệu của chúng ta sẽ cho ra hầu hết các giá trị nằm trong đoạn dữ liệu rất nhỏ. Lưu ý rằng, rất nhiều tập dữ liệu có các điểm kì dị.
o    Trong khi nếu sử dụng chuẩn hóa dữ liệu (Standardization), dữ liệu mới của chúng ta sẽ không bị chặn trong một đoạn xác định, giống như ở Normalization.
o   Trong thực tế, kĩ thuật Standardization thường được khuyên dùng.

Tài liệu tham khảo:

Chủ Nhật, 25 tháng 6, 2017

BÀI 3: BIỂU ĐỒ HÓA DỮ LIỆU

  

  Chúng ta càng biết thêm thông tin về dữ liệu, chúng ta càng có phán đoán xử lý bài toán phù hợp hơn. Một trong những cách tìm hiểu là quan sát hình ảnh, thông qua: các đồ thị và biểu đồ biểu diễn dữ liệu. Thông qua hình ảnh là cách nhanh nhất để tiếp cận và để xử lý dữ liệu.
Sau bài học này, người học có khả năng:
·         Tìm hiểu dữ liệu qua: đồ thị (dùng cho dữ liệu 2 chiều) và các loại biểu đồ (dùng cho dữ liệu nhiều chiều).
·         Dùng thư viện pandas để hình ảnh hóa các dữ liệu thông qua Python.
Việc hình ảnh hóa dữ liệu có vai trò quan trọng trong quá trình tìm hiểu dữ liệu. Rất nhiều trường hợp, chỉ nhờ hình ảnh mà chúng ta có cách chọn thuật toán hiệu quả cho vấn đề mà chúng ta đang xử lý.

3.1 Đồ thị

Biểu diễn dữ liệu thông qua đồ thị, khi dữ liệu của chúng ta có 2 chiều, thường thì một chiều là đặc tính, chiều còn lại là nhãn. Chương trình sau minh họa cho dữ liệu đã giới thiệu ở Chương trình 1.3 (gồm số dân của mỗi thành phố và lợi nhuận nhà hàng ăn thu được lợi nhuận).
01. from pandas import read_csv
02. import os
03. from matplotlib import pyplot
04. duongDan = os.getcwd() + '\data\ex1data1.txt'
05. tenCot = ['Population', 'Profit']
06. duLieu = read_csv(duongDan, names=tenCot)07.duLieu.plot(kind='scatter', 
                      x='Population', y='Profit')
08. pyplot.show()
 
Chương trình 3.1: Hiển thị dữ liệu dạng điểm.
Dữ liệu được hiển thị khi chúng ta lấy trục hoành là đặc tính (Population) và trục tung là lợi nhuận
 (Profit). Dòng 07 của Chương trình 3.1 có tham số kind='scatter' chỉ kiểu đồ thị sẽ được hiển thị 
là các điểm (phân biệt với đường kẻ và thanh hình chữ nhật, kind='line|bar').
Thực thi Chương trình 3.1 sẽ cho ta đồ thị:
Hình 3.1: Đồ thị dữ liệu cho số dân (đơn vị 10.000 người) và lợi nhuận (đơn vị 10.000 USD).

Như biểu đồ đã cho chúng ta thấy, với số dân 5-6 nghìn người, khả năng lợi nhuận sẽ thấp (có khi bị thua lỗ); trong khi với số dân từ 10 nghìn người, cửa hàng luôn có lợi nhuận. Nhìn chung, đồ thị này thể hiện một quan hệ gần như tuyến tính.
Như vậy dựa vào đồ thị, chúng ta cũng tự rút ra được những nhận xét quan trọng để từ đó lựa chọn thuật toán phù hợp. 

3.2 Biểu đồ chữ nhật (Histograms)

Khi dữ liệu của chúng ta có nhiều đặc tính (features), biểu đồ là một sự lựa chọn dễ dàng biểu diễn để chúng ta có cái nhìn tổng quan. Biểu đồ sẽ biểu diễn mỗi đặc tính một phần nhỏ. Từ các hình đó, chúng ta có thể phán đoán ban đầu về các phân phối cho mỗi đặc tính (phân phối Gauss, phân phỗi hàm mũ) hoặc các điểm kì dị.
01. from pandas import read_csv
02. import os
03. from matplotlib import pyplot
04. duongDan = os.getcwd() + '\data\iris.data.csv'
05. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
06. duLieu = read_csv(duongDan, names=tenCot)
07. duLieu.hist()
08. pyplot.show()
Chương trình 3.2: Hiển thị biểu đồ hình chữ nhật.
Một số chú thích cho Chương trình 3.2
-          Dòng 3: Chúng ta sử dụng thư viện matplotlib để vẽ biểu đồ.
-          Dòng 7: Dữ liệu được biểu thị thông qua biểu đồ (histogram).
-          Dòng 8: Dùng thư viện pyplot để hiển thị biểu đồ.
Chương trình 3.2 sẽ cho kết quả hiển thị ra hình sau:

Hình 3.2 Biểu đồ biểu diễn dữ liệu cho Hoa Ailen.
Thông qua Hình 3.2, chúng ta cũng có thể dự đoán rằng đặc tính ‘sepal length’ và ‘sepal width’ có thể có phân phối Gauss. Đây được coi là một quan sát thú vị vì rất nhiều kĩ thuật dùng trong Máy học giả định các đặc tính có phân phối Gauss.

3.3  Biểu đồ phân tán (Scatter Plots)

Khi có nhiều đặc tính, ta có thể sử dụng biểu đồ phân tán. Biểu đồ phân tán ngoài biểu diễn sự phân phối của dữ liệu trên mỗi đặc tính, mà nó còn biểu diễn mối tương quan từng cặp các đặc tính thông qua các điểm trên tọa độ hai chiều. Điều này đôi khi rất hữu ích khi chúng ta muốn xem các thông tin quan hệ giữa hai đặc tính để từ đó xử lý dữ liệu cho phù hợp. Giống như ma trận tương quan, biểu đồ phân tán có tính đối xứng.
01. from pandas import read_csv
02. import os
03. from matplotlib import pyplot
04. from pandas.tools.plotting import scatter_matrix
05. duongDan = os.getcwd() + '\data\iris.data.csv'
06. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
07. duLieu = read_csv(duongDan, names=tenCot)
08. scatter_matrix(duLieu)
09. pyplot.show()
 
Chương trình 3.3 
Chương trình 3.3 sẽ cho ra hình biểu đồ sau:

Hình 3.3: Biểu đồ phân tán của mỗi đặc tính với dữ liệu Hoa Ailen.
Quan sát biểu đồ chúng ta có rút ra nhiều thông tin hữu ích.  Ví dụ, nếu chúng ta nhìn vào biểu đồ giữa các đặc tính ‘petal length’ và ‘petal width’, ta thấy chúng có tương quan rõ rệt (sự tương quan tuyến tính).

3.4 Biểu đồ mật độ (Density Plots)

Biểu đồ mật độ cũng cho chúng ta góc nhìn về sự phân phối của dữ liệu trên mỗi đặc tính. Biểu đồ mật độ tương đối giống với biểu đồ chữ nhật, khi có một đường cong trơn nối liền các đỉnh trong biểu đồ chữ nhật với nhau.
01. from pandas import read_csv
02. import os
03. from matplotlib import pyplot

04. duongDan = os.getcwd() + '\data\iris.data.csv'
05. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
06. duLieu = read_csv(duongDan, names=tenCot)
07. duLieu.plot(kind = 'density', subplots = True, sharex = False)
08. pyplot.show()
Chương trình 3.4: Hiển thị biểu đồ mật độ.
Trong Chương trình 3.4 dòng lệnh 07 để biểu thị dữ liệu dưới dạng mật độ (density), tham số subplots = True là để tách các đặc tính ra các biểu đồ con (nếu subplots = False sẽ gộp vào chung một biểu đồ); trong khi tham số sharex = False để chỉ tách riêng đơn vị của trục hoành (nếu sharex = True thì các đặc tính có chung đơn vị).
Chương trình 3.3 chạy sẽ cho ra hình vẽ sau:

Hình 3.4: Biểu đồ mật độ của mỗi đặc tính với dữ liệu hoa Ailen.

3.5 Biểu đồ hình hộp (Box Plots)

Biểu đồ hình hộp cũng giúp chúng ta quan sát được độ phân tán dữ liệu cho mỗi đặc tính. Đồng thời nó còn cung cấp thông tin hữu ích để thống kê dữ liệu: biểu diễn dữ liệu ở vị trí 25% và 75% và một đường kẻ ở 50% (median dữ liệu). Có thể coi đây là sự tổng hợp giữa thông tin ở Bài 2 trên hình vẽ.
01. from pandas import read_csv
02. import os
03. from matplotlib import pyplot
04. duongDan = os.getcwd() + '\data\iris.data.csv'
05. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
06. duLieu = read_csv(duongDan, names=tenCot)
07. duLieu.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
08. pyplot.show()
Chương trình 3.5: Hiển thị biểu đồ hình hộp.
Trong chương trình 3.5 dòng lệnh 07 có tham số layout=(2,2) để đồ thị biểu diễn trên một ma trận sắp xếp 2x2 (vì chúng ta có 4 đặc tính).
Thực thi chương trình 3.5 sẽ cho biểu đồ sau:

Hình 3.5: Biểu đồ hộp của mỗi đặc tính với dữ liệu hoa Ailen.
Nhìn vào biểu đồ chúng ta thấy sự phân bố dữ liệu của đặc tính ‘sepal length’ tương đối đều, so với ba đặc tính còn lại.

3.6 Kết luận:

·     Để xử lý hiệu quả dữ liệu, chúng ta cần hiểu chúng. Cách hiểu dữ liệu dễ nhất là dùng những biểu đồ. Trong bài này, chúng ta đã học được cách hiển thị dữ liệu thông qua các biểu đồ. Tùy vào dữ liệu, có 2 chiều hay nhiều hơn, chúng ta sử dụng những biểu đồ phù hợp.
·     Việc tìm hiểu dữ liệu qua biểu đồ nhiều khi giúp chúng ta nhanh chóng có được những thông tin quan trọng, để từ đó chúng ta có những bước xử lý phù hợp tiếp theo: loại bỏ bớt đặc tính, chọn thuật toán phù hợp, v.v...
·         Có thể nói biểu đồ hóa dữ liệu như một phần bắt buộc trong quá trình áp dụng Máy học để xử lý dữ liệu. Còn rất nhiều các kiểu biểu đồ khác mà người học có thể tham khảo trong phần tài liệu tham khảo.
·         matplotlib.pyplot là tập hợp các hàm để hiển thị các đồ thị giống như MATLAB. Chúng ta có thể thay đổi nhãn, các kiểu vẽ (hình chữ nhật, các điểm chấm, đường nối), v.v...

Để tìm hiểu thêm về matplotlib, người học nên xem các ví dụ ở [2]. Như chúng ta thấy, pandas là một thư viện thường được dùng, nên người học nên đọc thêm [1].

Tài liệu tham khảo: