Tổng số lượt xem trang

Thứ Ba, 13 tháng 6, 2017

BÀI 1: HIỂN THỊ DỮ LIỆU

Sau bài học này, người học có khả năng:
·         Truy xuất dữ liệu trên các tệp (csv, .txt)
·         Dùng các thư viện để hiển thị dữ liệu trong python: csvpandas
·         Truy xuất dữ liệu online và trên máy tính

1.1 Dữ liệu định dạng csv

Tất cả các thuật toán trong Máy học cần dữ liệu. Các dữ liệu mà chúng ta quan tâm trong cuốn sách này sẽ được lưu trữ trên tệp (file). Trong Máy học, tệp có định dạng thông dụng nhất và được coi là chuẩn là tệp csv (comma separated values – các giá trị dữ liệu được ngăn cách bởi dấu phẩy). Tệp csv thường được dùng để nhập và xuất cho cơ sở dữ liệu. Tệp csv chứa nhiều hàng, mỗi hàng có thể chứa nhiều cột, các giá trị được cách nhau bởi dấu phảy (,).  Thông tin ở Hình 1.1 được biểu diễn trong tệp dữ liệu định dạng csv.
Bài học này sẽ nhằm kết nối và hiển thị những thông tin từ dữ liệu từ tệp csv. Có rất nhiều dữ liệu Máy học chuẩn chúng ta có thể lấy về để sử dụng từ [1]. Tập dữ liệu chúng tôi giới thiệu sau đây cũng được lấy từ trang web đó.
Tập dữ liệu hoa Ailen (Iris Data Set):


Hình 1.1. Ba loại hoa Ailen.



Hình 1.2. Độ dài và độ rộng của lá đài (sepal) và cánh hoa (petal)
Đây có lẽ là tập dữ liệu nổi tiếng nhất trong bài toán nhận dạng (pattern recoginition) được Fisher công bố năm 1936. Dữ liệu gồm 3 loại hoa, mỗi loại có 50 thể hiện (instances) được lưu lần lượt. Hình 1.3 biểu diễn 10 hàng đầu, mỗi hàng có 5 cột thông tin về hoa Ailen .
Sepal length
Sepal width
Petal length
Petal width
Class
độ dài lá đài

độ rộng lá đài
độ dài cánh hoa
độ rộng cánh hoa
setosa||versicolour|| virginica
5.1
3.5
1.4
0.2
setosa
Bảng 1.1. Thông tin mô tả tập dữ liệu hoa Ailen (Iris Data Set).
Bảng 1.1 mô tả thông tin của tập dữ liệu hoa Ailen. Bốn cột là một đặc tính (features). Cột cuối cùng là nhãn (label) chỉ tên loại hoa (một trong ba loại: Iris-setosa, Iris-versicolour, và Iris-virginica).  Dòng đầu tiên, chúng tôi thêm thông tin mô tả cho mỗi cột tương ứng bằng tiếng Anh; dòng thứ 2 là tiếng Việt; dòng thứ ba là thông tin của thể hiện (instance) đầu tiên của tập dữ liệu, nhằm minh họa cho người học biết.



Hình 1.3. Dữ liệu với định dạng csv

1.2 Truy xuất dữ liệu

1.2.1 Dùng thư viện csv
Để đọc được dữ liệu từ file csv, chúng ta cần dùng hàm đọc để tạo ra đối tượng đọc. Hàm đọc sẽ truy xuất vào từng dòng của tệp dữ liệu, mỗi dòng được đọc sẽ là một danh sách (list) lưu trữ các dữ liệu của cột.  Như vậy bằng cách này, chúng ta có thể truy xuất vào từng hàng, từng cột mà chúng ta mong muốn. Chương trình sau đây dùng để đọc tệp dữ liệu tên là iris.data.csv trong thư mục data (thư mục data cùng chung thư mục lưu trữ các chương trình python).
1. import csv

2. with open('data\iris.data.csv', 'r') as tep:
3.    docTep = csv.reader(tep)
4.    for hang in docTep:
5.    print (hang)
Chương trình 1.1 Đọc dữ liệu từ tệp dùng thư viện csv.
Một số chú thích cho Chương trình 1.1:
-          Dòng 1:  Để đọc được file định dạng csv, chúng ta cần module csv.  
-          Dòng 2:  Tạo ra một đối tượng tệp, gắn tên vào f (cho gọn). ‘rb’ là chế độ chỉ đọc (‘r’)
-          Dòng 3: Tạo ra một đối tượng đọc tệp và nó có thể đọc từng dòng dữ liệu trong tệp
-          Dòng 4: Duyệt lần lượt hàng trong tệp
-          Dòng 5: In ra thông tin. Ở đây hang là một danh sách (list), nên chúng ta có thể thao tác xử lý như một danh sách.

Lưu ý: chúng ta cũng có thể ghép 2 dòng 2 và 3 thành dòng lệnh:
docTep = csv.reader(open('data\iris.data.csv','rb'))
Khi chạy chương trình trên, 5 dòng dưới cùng (trên tổng số 150 dòng) sẽ là:
['6.7', '3.0', '5.2', '2.3', 'Iris-virginica']
['6.3', '2.5', '5.0', '1.9', 'Iris-virginica']
['6.5', '3.0', '5.2', '2.0', 'Iris-virginica']
['6.2', '3.4', '5.4', '2.3', 'Iris-virginica']
['5.9', '3.0', '5.1', '1.8', 'Iris-virginica']
1.2.2. Dùng thư viện pandas
Chúng ta cũng có thể đọc dữ liệu online. Chương trình sau truy xuất dữ liệu tới tệp csv online dùng thư viện pandas (xem phụ lục B):
1. from pandas import read_csv

2. duongDan = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
3. tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
4. duLieu = read_csv(duongDan, names=tenCot) # DataFrame

5. print (duLieu["class"][:5])   # data["class"] is a Series
6. print (duLieu.iloc[0])        # first row
 
Chương trình 1.2
Một số chú thích cho Chương trình 1.2:
-          Dòng 1: dùng hàm pandas.read_csv để truy xuất dữ liệu
-          Dòng 2: Địa chỉ url của tệp csv
-          Dòng 3: Chúng ta đặt tên cho các cột của dữ liệu (có 5 cột), để chúng ta dễ thao tác với DataFrame
-          Dòng 4: Dữ liệu được lưu trữ vào một DataFrame
-          Dòng 5: In ra dữ liệu của 5 dòng đầu tiên của cột class.
-          Dòng 6: In ra dòng đầu tiên của dữ liệu (dùng .iloc để truy xuất vào hàng của DataFrame)

Sau khi chạy chương trình trên, thông tin sẽ hiện ra như sau:
0    Iris-setosa
1    Iris-setosa
2    Iris-setosa
3    Iris-setosa
4    Iris-setosa
Name: class, dtype: object
sepal length            5.1
sepal width             3.5
petal length            1.4
petal width             0.2
class           Iris-setosa
Chúng ta cũng có thể lưu trữ dữ liệu trong tệp văn bản. Chương trình sau đọc thông tin dữ liệu từ tệp ex1data1.txt, tệp này được lấy từ khóa học Machine Learning của Andrew Ng trên coursera. Tệp này chưa 2 cột: cột thứ nhất là dân số (Population) của một thành phố và cột thứ hai chỉ lợi nhuận (Profit) của thành phố tương ứng khi đầu tư một cửa hàng ăn (số âm chỉ thua lỗ).
1. import pandas as pd
2. import os

3. duongDan = os.getcwd() + '\data\ex1data1.txt'
4. tenCot = ['Population', 'Profit']
5. duLieu = pd.read_csv(duongDan, names=tenCot)

6. print duLieu['Population']
Chương trình 1.3
Một số chú thích cho Chương trình 1.3:
-          Dòng 1: Chúng ta nhập thư viện pandas.
-          Dòng 2: os giúp chúng ta truy xuất vào nơi chứa tệp thông qua hệ điều hành.
-          Dòng 3: getcwd(),  trả ra một xâu chứa thông tin của thư mục đang làm việc (dùng cho Windows và Unix). Ví dụ trên máy của tôi chương trình đang làm việc trên thư mục: C:/Users/HAUNV/PycharmProjects/HocMayHoc/.
-          Dòng 4: Đặt tên cột cho dữ liệu, để sau này DataFrame có 2 cột để truy xuất thông tin thông qua tên cột. Để cho thuận tiện, chúng ta đặt luôn tên là Population và Profit.
-          Dòng 5: Sử dụng hàm pandas.read_csv để đọc dữ liệu từ tệp ex1data1.txt, kết quả trả ra là một DataFrame.
-          Dòng 6: In ra cột thứ nhất, số dân của các thành phố.
Chương trình khi chạy sẽ in ra kết quả như sau (dòng đầu tiên chỉ số hàng của dữ liệu):
0      6.1101
1      5.5277
2      8.5186
3      7.0032
...
92     5.8707
93     5.3054
94     8.2934
95    13.3940
96     5.4369

1.3 Tổng kết:

-  Trong bài học này chúng ta đã đề cập tới việc truy xuất dữ liệu từ tệp hay dùng trong Máy học (định dạng csv), tệp văn bản (.txt). Để truy xuất được thông tin, người học cần nhớ xác lập:
o   duongDan: là nơi lưu trữ tệp
o   tenCot: dùng để đặt tên cột cho dữ liệu
o   duLieu: là một DataFrame, từ đây chúng ta có thể thao tác với dữ liệu
- Người học cần tìm hiểu kiến thức cơ bản của DataFrame, Series (phụ lục B). Sau này, việc cài đặt các thuật toán Máy học sẽ sử dụng nhiều.
- Nếu người học chạy được chương trình trên. Xin chúc mừng, vì bạn đã cài đặt thành công các công cụ và thư viện cần thiết cho chặng đường phía sau. Nếu không, cũng không có gì phải lo lắng. Mọi thứ bắt đầu thường không dễ dàng. Tuy nhiên, chúng tôi khuyên người học hãy cố gắng cài đặt và tự mình chạy các chương trình. Như vậy chuyến hành trình phía sau của chúng ta mới thực sự thú vị.
Người đọc tham khảo pandas trong [2,3,4] và csv trong [5] để biết rõ hơn các thư viện thao tác dữ liệu thường được dùng trong python.

Tài liệu tham khảo:

5.       https://docs.python.org/3/library/csv.html

2 nhận xét:

Unknown nói...

Cảm ơn thầy!

khoa nguyễn nói...

Rất rõ ràng, thank U..