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: csv
và pandas
·
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.
2 nhận xét:
Cảm ơn thầy!
Rất rõ ràng, thank U..
Đăng nhận xét