Tổng số lượt xem trang

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:

1 nhận xét:

Unknown nói...

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.