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:
1 nhận xét:
Thầy ạ. Em có dữ liệu cũng khá lớn tính đến chục TB dữ liệu, thầy có ý tưởng gì về đọc khối giữ liệu lớn thế này thì gợi ý chỉ cho em với ạ. Cảm ơn Thầy.
Đăng nhận xét