Tải bản đầy đủ (.docx) (22 trang)

Cẩm nang máy học với Python: Chương 2: Tải dữ liệu vào Python

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (565.63 KB, 22 trang )

Tải file txt vào Python
Để tải file txt vào Python chúng ta dùng hàm open mặc
định của Python.

Trong dòng lệnh 4 chúng ta dùng hàm open để mở object là
input_file_path với parameter là r nghĩa là chỉ ở chế độ đọc mà
thơi. Các parameter của hàm open như sau

Trong dịng lệnh thứ 13 chúng ta dùng method closed để hỏi
Python rằng file dữ liệu này vẫn đang mở và kết nối với Python
hay khơng. Nếu file vẫn đang mở thì kết quả trả lời là False, còn
ngược lại là True.


Trong dòng lệnh 16 chúng ta dùng method mode để hỏi Python
rằng file này đang ở chế độ nào. Kết quả trả về là chế độ r
(nghĩa là chỉ có đọc mà thôi).
Tải file tsv vào Dataframe của pandas
File tsv cũng tương tự như file csv nhưng các hàng cách
nhau bằng dấu tab. Chúng ta có thể dùng thư viện pandas để
tải file tsv vào Python
import pandas as pd

Trong các câu lệnh trên chúng ta lưu ý các điểm sau:
 Chúng ta phải tải thư viện pandas vào Python vì pandas
không phải là thư viện chuẩn cài sẵn của Python. Do đó
chúng ta phải dùng hàm import của Python để tải thư viện
pandas vào Python.
 Khi đã tải được thư viện Pandas, chúng ta có thể sử dụng
hàm read_csv() để tải file dữ liệu CSV. Để tiếp cận được với
hàm read_csv() chúng ta sử dụng phương pháp “dot


notation” (dấu chấm nhắc). Khi chúng ta viết pd.read_csv()
nghĩa là trong thư viện pandas chúng ta vừa tải, hãy tìm kiếm
trong đó hàm read_csv().
 Vì file tsv của chúng ta lưu ở trên github do đó chúng ta phải
gõ đường dẫn của raw file (nghĩa là chúng ta phải nhấn vào
nút Raw của file để lấy link raw file) trong dấu nháy đơn.
 Chúng ta dùng parameter sep (viết tắt của separate) với lựa
chọn là ‘\t’ nghĩa là dữ liệu được cách nhau bởi dấu tab.


Tải file csv vào Dataframe của pandas
Nhập file csv từ github

Bạn cần nhập tệp giá trị được phân tách bằng dấu phẩy
(CSV). Sử dụng read_csv của thư viện pandas để tải tệp CSV từ
máy tính hoặc được lưu trữ vào DataFrame của pandas:
# Load library
import pandas as pd
# Create URL
url = ' /># Load dataset
dataframe = pd.read_csv(url)
# View first two rows
dataframe.head(2)

Có hai điều cần lưu ý khi tải tệp CSV. Đầu tiên, việc xem
nhanh nội dung của tệp trước khi tải thường rất hữu ích. Có thể
rất hữu ích khi xem trước một tập dữ liệu được cấu trúc như thế
nào và chúng ta cần đặt những tham số nào để tải trong tệp.
Thứ hai, read_csv có hơn 30 tham số và do đó tài liệu có thể
gây khó khăn. May mắn thay, những tham số đó chủ yếu ở đó

để cho phép nó xử lý nhiều định dạng CSV khác nhau.
Tệp CSV lấy tên từ thực tế là các giá trị được phân tách
theo nghĩa đen bằng dấu phẩy (ví dụ: một hàng có thể là
2,"2015-01-01 00:00:00",0); Tuy nhiên, các tệp CSV thường sử
dụng các dấu phân cách khác, chẳng hạn như các tab (được gọi
là tệp TSV). Tham số pandas sep cho phép chúng ta xác định
dấu phân cách được sử dụng trong tệp. Mặc dù không phải lúc
nào cũng như vậy nhưng vấn đề định dạng phổ biến với tệp CSV
là dòng đầu tiên của tệp được sử dụng để xác định tiêu đề cột
(ví dụ: số nguyên, ngày giờ, danh mục trong giải pháp của


chúng tôi). Tham số tiêu đề cho phép chúng ta chỉ định xem
hàng tiêu đề có tồn tại hay khơng. Nếu hàng tiêu đề không tồn
tại, chúng tôi đặt tiêu đề=Không.
Hàm read_csv trả về một DataFrame của gấu trúc: một đối
tượng phổ biến và hữu ích để làm việc với dữ liệu dạng bảng mà
chúng ta sẽ đề cập sâu hơn trong suốt cuốn sách này.
Nhập file csv có tiêu đề vào Dataframe
Pandas mặc định sẽ nhập dòng đầu tiên của file csv thành
tiêu đề cột cho Dataframe

Nhập file csv khơng có tiêu đề vào Dataframe
Trong trường hợp file csv khơng có tiêu đề chúng ta cần
tạo ra một list tên tiêu đề cột và sau đó gán list đó vào đối số
names trong hàm read_csv


Nhập file csv với kí tự cách khác dấu phẩy
Trong trường hợp flat file có các khoảng cách giá trị là dấu

đặc biệt không phải là dấu phẩy như dưới đây

Chúng ta cũng vẫn có thể dùng read_csv nhưng với đối số
sep là kí tự đặc biệt đó

Tải một file Excel vào Dataframe
Tải file Excel từ local

Chúng ta dùng hàm read_excel với cú pháp sau
pd.read_excel(<excel_file_path>,sheet_name=eet_name>)


Tải file excel từ github
# Load library
import pandas as pd
# Create URL
url = ' /># Load data
dataframe = pd.read_excel(url, sheet_name=0, header=0)
# View the first two rows
dataframe.head(2)

This solution is similar to our solution for reading CSV files.
The main difference is the additional parameter, sheet_name,
that specifies which sheet in the Excel file we wish to
load. sheet_name can accept both strings, containing the name
of the sheet, and integers, pointing to sheet positions (zeroindexed). If we need to load multiple sheets, we include them
as a list. For example, sheet_name=[0,1,2, "Monthly Sales"] will
return a dictionary of pandas DataFrames containing the first,
second, and third sheets, and the sheet named Monthly Sales.

Giải pháp này tương tự như giải pháp đọc tệp CSV. Sự khác
biệt chính là tham số bổ sung, sheet_name, chỉ định trang tính
nào trong tệp Excel mà chúng ta muốn tải. sheet_name có thể
chấp nhận cả hai chuỗi chứa tên của trang tính và số nguyên
trỏ đến vị trí của trang tính (khơng được lập chỉ mục). Nếu cần
tải nhiều trang tính, chúng tơi sẽ đưa chúng vào dưới dạng danh
sách. Ví dụ: sheet_name=[0,1,2, "Monthly Sales"] sẽ trả về một


từ điển gồm các DataFrames của pandas chứa các trang tính
đầu tiên, thứ hai và thứ ba và trang tính có tên Monthly Sales.

Tải file pickle vào Dataframe của pandas
Để đọc một file pickle series chúng ta dùng methods
read_pickle

Để đọc một file pickle của Dataframe chúng ta dùng method
read_pickle tương tự như series


Tải file feather vào Dataframe của pandas
Để tải file feather chúng ta dùng methods read_feather().

Tải

file

dictionray

vào


Dataframe

của

pandas

Tải file JSON vào Dataframe của pandas
Nhập file JSON từ github

Nhập tệp JSON vào pandas tương tự như một số công thức
gần đây nhất mà chúng ta đã thấy. Sự khác biệt chính là tham
số định hướng (orient), cho biết cách cấu trúc tệp JSON. Tuy
nhiên, có thể cần một số thử nghiệm để tìm ra đối số nào


(split, records, index, columns, or values) là đối số đúng. Một
cơng cụ hữu ích khác mà pandas cung cấp là json_normalize, có
thể giúp chuyển đổi dữ liệu JSON bán cấu trúc thành DataFrame
của pandas.
# Load library
import pandas as pd
# Create URL
url = ' /># Load data
dataframe = pd.read_json(url, orient='columns')
# View the first two rows
dataframe.head(2)

Nhập file JSOn từ file local


Chúng ta dùng methods read_json để tải file JSON vào
Dataframe


Lưu ý là các biến date như born_dat, died_dt của file JSON khi
chuyển vào Dataframe sẽ có dạng rất kỳ qi. Đó là vì các biến
này trong file JSON có định dạng là ISO 8601 do đó khi tải vào
Dataframe chúng sẽ trở thành biến chuỗi chứ không phải biến
dates


Để chuyển biến date dạng chuỗi thành dạng date, chúng ta
phải dùng method to_datetime của pandas

Nếu chúng ta có sẵn file JSON thì chúng ta có thể tải trực
tiếp với hàm read_json


Tải một tập tin Parquet
Parquet là một định dạng lưu trữ dữ liệu phổ biến trong
không gian dữ liệu lớn. Nó thường được sử dụng với các cơng cụ
dữ liệu lớn như Hadoop và Spark. Mặc dù PySpark nằm ngoài
trọng tâm của cuốn sách này, nhưng rất có thể các công ty hoạt
động trên quy mô lớn sẽ sử dụng định dạng lưu trữ dữ liệu hiệu
quả như Parquet và việc biết cách đọc nó vào khung dữ liệu và
thao tác với nó là rất có giá trị.
# Load library
import pandas as pd
# Create URL
url = ' /># Load data

dataframe = pd.read_parquet(url)
# View the first two rows
dataframe.head(2)

Tải file Avro
Apache Avro là một định dạng dữ liệu nhị phân, mã nguồn
mở dựa trên các lược đồ cho cấu trúc dữ liệu. Tại thời điểm viết
bài, nó khơng phổ biến như Parquet. Tuy nhiên, các định dạng
dữ liệu nhị phân lớn như Avro, thrift và Protocol Buffers đang
ngày càng phổ biến do tính chất hiệu quả của chúng. Nếu bạn
làm việc với các hệ thống dữ liệu lớn, bạn có thể sẽ gặp phải
một trong những định dạng này trong tương lai gần
# Load library
import requests
import pandavro as pdx
# Create URL
url = ' />

# Download file
r = requests.get(url)
open('data.avro', 'wb').write(r.content)
# Load data
dataframe = pdx.read_avro('data.avro')
# View the first two rows
dataframe.head(2)

Truy vấn một cơ sở dữ liệu SQLite Database
SQL là ngôn ngữ chung để lấy dữ liệu từ cơ sở dữ liệu.
Trước tiên chúng tôi sử dụng create_engine để xác định kết nối
với công cụ cơ sở dữ liệu SQL có tên là SQLite. Tiếp theo, chúng

tôi sử dụng read_sql_query của pandas để truy vấn cơ sở dữ liệu
đó bằng SQL và đưa kết quả vào DataFrame.
SQL là một ngơn ngữ theo đúng nghĩa của nó và mặc dù
nằm ngoài phạm vi của cuốn sách này nhưng nó chắc chắn
đáng để biết đối với bất kỳ ai muốn tìm hiểu về học máy. Truy
vấn SQL của chúng ta, SELECT * FROM data, yêu cầu cơ sở dữ
liệu cung cấp cho chúng ta tất cả các cột (*) từ bảng được gọi là
dữ liệu.
Lưu ý rằng đây là một trong số ít phương pháp sẽ khơng
chạy nếu khơng có mã bổ sung. Cụ thể, create_engine('sqlite:///
sample.db') giả định rằng cơ sở dữ liệu SQLite đã tồn tại.
# Load libraries
import pandas as pd
from sqlalchemy import create_engine
# Create a connection to the database
database_connection = create_engine('sqlite:///sample.db')
# Load data


dataframe = pd.read_sql_query('SELECT * FROM data', database_connection)
# View first two rows
dataframe.head(2)

Truy vấn một cơ sở dữ liệu SQL từ xa
Trong số tất cả các cơng thức được trình bày trong chương
này, đây có lẽ là cơng thức chúng ta sẽ sử dụng nhiều nhất
trong thế giới thực. Mặc dù việc kết nối và đọc từ cơ sở dữ liệu
sqlite mẫu rất hữu ích nhưng nó có thể khơng đại diện cho các
bảng bạn cần kết nối trong môi trường doanh nghiệp. Hầu hết
các phiên bản SQL mà bạn kết nối sẽ yêu cầu bạn kết nối với

máy chủ và cổng của máy từ xa, chỉ định tên người dùng và
mật khẩu để xác thực. Ví dụ này yêu cầu bạn khởi động một
phiên bản SQL đang chạy cục bộ bắt chước một máy chủ từ xa
trên localhost để bạn có thể hiểu được quy trình làm việc.
# Import libraries
import pymysql
import pandas as pd
# Create a DB connection
# Use the following example to start a DB instance
# />conn = pymysql.connect(
host='localhost',
user='root',
password = "",
db='db',
)
# Read the SQL query into a dataframe
dataframe = pd.read_sql("select * from data", conn)
# View the first two rows
dataframe.head(2)


Tải dữ liệu từ Google Sheet
Mặc dù có thể dễ dàng tải xuống Google Sheets nhưng đơi
khi việc có thể đọc chúng trực tiếp vào Python mà không cần
bất kỳ bước trung gian nào cũng rất hữu ích. Tham số truy vấn /
export?format=csv ở cuối URL tạo ra một điểm cuối mà từ đó
chúng ta có thể tải tệp xuống hoặc đọc tệp đó vào pandas.
Sử dụng pandas read_CSV và chuyển URL xuất Google
Sheet dưới dạng CSV
# Import libraries

import pandas as pd
# Google Sheet URL that downloads the sheet as a CSV
url = " />"1ehC-9otcAuitqnmWksqt1mOrTRCL38dv0K9UjhwzTOA/export?format=csv"
# Read the CSV into a dataframe
dataframe = pd.read_csv(url)
# View the first two rows
dataframe.head(2)

Tải dữ liệu từ S3 bucket
Nhiều doanh nghiệp hiện lưu giữ dữ liệu trong các kho lưu
trữ blob của nhà cung cấp đám mây như Amazon S3 hoặc
Google Cloud Storage (GCS). Những người thực hành học máy
thường kết nối với các nguồn này để lấy dữ liệu. Mặc dù URI S3
(s3://machine-learning-python-cookbook/data.csv) là công khai
nhưng nó vẫn u cầu bạn cung cấp thơng tin xác thực truy cập
AWS của riêng bạn để truy cập vào nó. Điều đáng chú ý là các


đối tượng cơng khai cũng có URL HTTP mà từ đó chúng có thể
tải xuống tệp, chẳng hạn như URL này cho tệp CSV.
Thêm tùy chọn lưu trữ vào pandas để cấp cho nó quyền
truy cập vào đối tượng S3:
# Import libraries
import pandas as pd
# S3 path to CSV
s3_uri = "s3://machine-learning-python-cookbook/data.csv"
# Set AWS credentials (replace with your own)
ACCESS_KEY_ID = "xxxxxxxxxxxxx"
SECRET_ACCESS_KEY = "xxxxxxxxxxxxxxxx"
# Read the CSV into a dataframe

dataframe = pd.read_csv(s3_uri,storage_options={
"key": ACCESS_KEY_ID,
"secret": SECRET_ACCESS_KEY,
}
)
# View first two rows
dataframe.head(2)

Tải dữ liệu phi cấu trúc
Mặc dù dữ liệu có cấu trúc có thể dễ dàng được đọc từ
CSV, JSON hoặc các cơ sở dữ liệu khác nhau, nhưng dữ liệu phi
cấu trúc có thể khó khăn hơn và có thể yêu cầu xử lý tùy chỉnh
về sau. Đôi khi, việc mở và đọc tệp bằng chức năng mở cơ bản
của Python sẽ rất hữu ích. Điều này cho phép chúng ta mở file
và sau đó đọc nội dung của file đó.
Sử dụng hàm mở Python cơ bản để tải thông tin:
# Import libraries
import requests
# URL to download the txt file from
txt_url = " /># Get the txt file
r = requests.get(txt_url)


# Write it to text.txt locally
with open('text.txt', 'wb') as f:
f.write(r.content)
# Read in the file
with open('text.txt', 'r') as f:
text = f.read()
# Print the content

print(text)

Tải dữ liệu từ thư viện seaborn
Thư viện seaborn có sẵn một số tập tin dữ liệu. Chúng ta
có thể dùng method sns. Load_dataset để tải dữ liệu vào Python

anscome là một file dữ liệu có sẵn trong thư viện seaborn.
Tải dữ liệu từ thư viện scikit-learn
scikit-learn có một số bộ dataset mà bạn có thể sử dụng
# Load scikit-learn's datasets
from sklearn import datasets
# Load digits dataset
digits = datasets.load_digits()
# Create features matrix
features = digits.data
# Create target vector
target = digits.target


# View first observation
features[0]
array([ 0.,

0.,

5., 13.,

9.,

1.,


0.,

0.,

15.,

5.,

0.,

0.,

3., 15.,

2.,

0., 11.,

8.,

0.,

0.,

4.,

12.,

0.,


0.,

8.,

8.,

0.,

0.,

5.,

8.,

0.,

0.,

9.,

8.,

0.,

0.,

4., 11.,

0.,


1., 12.,

7.,

0.,

0.,

2., 14.,

5.,

0.,

0.,

0.,

6., 13., 10.,

0.,

0.,

10., 12.,

0.,

0.,


0., 13., 15., 10.,

0.])

Thông thường, chúng ta không muốn thực hiện công việc
tải, chuyển đổi và làm sạch tập dữ liệu trong thế giới thực trước
khi có thể khám phá một số thuật toán hoặc phương pháp học
máy. May mắn thay, scikit-learn đi kèm với một số bộ dữ liệu
phổ biến mà chúng ta có thể tải nhanh chóng. Những tập dữ
liệu này thường được gọi là tập dữ liệu “đồ chơi” vì chúng nhỏ
hơn và sạch hơn nhiều so với tập dữ liệu mà chúng ta thấy
trong thế giới thực. Một số bộ dữ liệu mẫu phổ biến trong scikitlearn là:
load_iris: Chứa 150 quan sát về số đo của hoa diên vĩ. Đây là
một bộ dữ liệu tốt để khám phá các thuật toán phân loại.
load_digits: Chứa 1.797 quan sát từ hình ảnh của các chữ số
viết tay. Đây là một bộ dữ liệu tốt để dạy phân loại hình ảnh.
Để xem thêm chi tiết về bất kỳ bộ dữ liệu nào trong số
này, bạn có thể in thuộc tính DESCR:
# Load scikit-learn's datasets
from sklearn import datasets
# Load digits dataset
digits = datasets.load_digits()
# Print the attribute
print(digits.DESCR)
.. _digits_dataset:
Optical recognition of handwritten digits dataset
-------------------------------------------------**Data Set Characteristics:**
:Number of Instances: 1797



:Number of Attributes: 64
:Attribute Information: 8x8 image of integer pixels in the range 0..16.
:Missing Attribute Values: None
:Creator: E. Alpaydin (alpaydin '@' boun.edu.tr)
:Date: July; 1998

Tạo dataset mô phỏng
Bạn cần tạo một tập dữ liệu dữ liệu mô phỏng. scikit-learn
cung cấp nhiều phương pháp để tạo dữ liệu mơ phỏng. Trong số
đó, ba phương thức đặc biệt hữu ích là make_regression,
make_classification và make_blobs.
Khi chúng ta muốn một tập dữ liệu được thiết kế để sử
dụng với hồi quy tuyến tính, make_regression là một lựa chọn
tốt:
# Load library
from sklearn.datasets import make_regression
# Generate features matrix, target vector, and the true coefficients
features, target, coefficients = make_regression(n_samples = 100,
n_features = 3,
n_informative = 3,
n_targets = 1,
noise = 0.0,
coef = True,
random_state = 1)
# View feature matrix and target vector
print('Feature Matrix\n', features[:3])
print('Target Vector\n', target[:3])
Feature Matrix
[[ 1.29322588 -0.61736206 -0.11044703]

[-2.793085

0.36633201

[ 0.80186103 -0.18656977

1.93752881]
0.0465673 ]]

Target Vector
[-10.37865986

25.5124503

19.67705609]

Nếu chúng ta quan tâm đến việc tạo một tập dữ liệu mô
phỏng

để

phân

loại,

chúng

ta

make_classification:

# Load library
from sklearn.datasets import make_classification
# Generate features matrix and target vector
features, target = make_classification(n_samples = 100,
n_features = 3,



thể

sử

dụng


n_informative = 3,
n_redundant = 0,
n_classes = 2,
weights = [.25, .75],
random_state = 1)
# View feature matrix and target vector
print('Feature Matrix\n', features[:3])
print('Target Vector\n', target[:3])
Feature Matrix
[[ 1.06354768 -1.42632219

1.02163151]

[ 0.23156977


1.49535261

0.33251578]

[ 0.15972951

0.83533515 -0.40869554]]

Target Vector
[1 0 0]

Cuối cùng, nếu chúng ta muốn một tập dữ liệu được thiết
kế để hoạt động tốt với các kỹ thuật phân cụm, scikit-learn
cung cấp make_blobs:
# Load library
from sklearn.datasets import make_blobs
# Generate features matrix and target vector
features, target = make_blobs(n_samples = 100,
n_features = 2,
centers = 3,
cluster_std = 0.5,
shuffle = True,
random_state = 1)
# View feature matrix and target vector
print('Feature Matrix\n', features[:3])
print('Target Vector\n', target[:3])
Feature Matrix
[[ -1.22685609

3.25572052]


[ -9.57463218

-4.38310652]

[-10.71976941

-4.20558148]]

Target Vector
[0 1 1]

Như có thể thấy rõ từ các giải pháp, make_regression trả
về ma trận đặc trưng của các giá trị float và vectơ đích của các
giá trị float, trong khi make_classification và make_blobs trả về
ma trận đặc trưng của các giá trị float và vectơ mục tiêu của
các số nguyên biểu thị tư cách thành viên trong một lớp.



×