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
Trang 1Tả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ỏiPython rằng file dữ liệu này vẫn đang mở và kết nối với Pythonhay không Nếu file vẫn đang mở thì kết quả trả lời là False, cònngược lại là True
Trang 2Trong dòng lệnh 16 chúng ta dùng method mode để hỏi Pythonrằ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áchnhau 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ì pandaskhô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ệnpandas vào Python
Khi đã tải được thư viện Pandas, chúng ta có thể sử dụnghàm read_csv() để tải file dữ liệu CSV Để tiếp cận được vớihàm read_csv() chúng ta sử dụng phương pháp “dotnotation” (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ếmtrong đó 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àonú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ựachọn là ‘\t’ nghĩa là dữ liệu được cách nhau bởi dấu tab
Trang 3Tả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:
để 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áchtheo 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 địnhdấu phân cách được sử dụng trong tệp Mặc dù không phải lúcnà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
Trang 4chúng tôi) Tham số tiêu đề cho phép chúng ta chỉ định xemhàng tiêu đề có tồn tại hay không Nếu hàng tiêu đề không tồntạ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 đốitượ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ànhtiê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ầntạ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
Trang 5Nhậ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=<excel_sh eet_name>)
Trang 6Tải file excel từ github
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 toload sheet_name can accept both strings, containing the name
of the sheet, and integers, pointing to sheet positions indexed) If we need to load multiple sheets, we include them
(zero-as a list For example, sheet_name=[0,1,2, "Monthly Sales"] willreturn 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ácbiệt chính là tham số bổ sung, sheet_name, chỉ định trang tínhnà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êntrỏ đến vị trí của trang tính (không được lập chỉ mục) Nếu cầntải nhiều trang tính, chúng tôi sẽ đưa chúng vào dưới dạng danhsách Ví dụ: sheet_name=[0,1,2, "Monthly Sales"] sẽ trả về một
Trang 7từ đ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 methodsread_pickle
Để đọc một file pickle của Dataframe chúng ta dùng methodread_pickle tương tự như series
Trang 8Tả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ứcgầ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 Tuynhiên, có thể cần một số thử nghiệm để tìm ra đối số nào
Trang 9(split, records, index, columns, or values) là đối số đúng Mộtcô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 DataFramecủa pandas.
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àoDataframe
Trang 10Lưu ý là các biến date như born_dat, died_dt của file JSON khichuyển vào Dataframe sẽ có dạng rất kỳ quái Đó là vì các biếnnày trong file JSON có định dạng là ISO 8601 do đó khi tải vàoDataframe chúng sẽ trở thành biến chuỗi chứ không phải biếndates
Trang 11Để chuyển biến date dạng chuỗi thành dạng date, chúng taphả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ựctiếp với hàm read_json
Trang 12Tải một tập tin Parquet
Parquet là một định dạng lưu trữ dữ liệu phổ biến trongkhô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àitrọ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ệuquả 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ị
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ếtbà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 đangngày càng phổ biến do tính chất hiệu quả của chúng Nếu bạnlàm việc với các hệ thống dữ liệu lớn, bạn có thể sẽ gặp phảimột trong những định dạng này trong tương lai gần
Trang 13Truy 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ốivới công cụ cơ sở dữ liệu SQL có tên là SQLite Tiếp theo, chúngtô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 Truyvấ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ôngchạ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
Trang 14dataframe = 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ươngnày, đây có lẽ là công thức chúng ta sẽ sử dụng nhiều nhấttrong thế giới thực Mặc dù việc kết nối và đọc từ cơ sở dữ liệusqlite mẫu rất hữu ích nhưng nó có thể không đại diện cho cácbảng bạn cần kết nối trong môi trường doanh nghiệp Hầu hếtcá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ớimá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ộtphiên bản SQL đang chạy cục bộ bắt chước một máy chủ từ xatrên localhost để bạn có thể hiểu được quy trình làm việc
# Read the SQL query into a dataframe
dataframe = pd.read_sql("select * from data", conn)
# View the first two rows
dataframe.head(2)
Trang 15Tải dữ liệu từ Google Sheet
Mặc dù có thể dễ dàng tải xuống Google Sheets nhưng đôikhi việc có thể đọc chúng trực tiếp vào Python mà không cầnbấ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 GoogleSheet dưới dạng CSV
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ưutrữ blob của nhà cung cấp đám mây như Amazon S3 hoặcGoogle Cloud Storage (GCS) Những người thực hành học máythườ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 khainhưng nó vẫn yêu cầu bạn cung cấp thông tin xác thực truy cậpAWS của riêng bạn để truy cập vào nó Điều đáng chú ý là các
Trang 16đố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ềntruy cập vào đối tượng S3:
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 phicấ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ảncủ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:
Trang 17# Write it to text.txt locally
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
Trang 18# View first observation
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
Trang 19: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-learncung 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ọntố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,
# View feature matrix and target vector
print('Feature Matrix\n', features[:3])
print('Target Vector\n', target[:3])
# Load library
from sklearn.datasets import make_classification
# Generate features matrix and target vector
features, target = make_classification(n_samples = 100,
n_features = 3,
Trang 20# View feature matrix and target vector
print('Feature Matrix\n', features[:3])
print('Target Vector\n', target[:3])
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-learncung 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,
# View feature matrix and target vector
print('Feature Matrix\n', features[:3])
print('Target Vector\n', target[:3])
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ácgiá 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ủacác số nguyên biểu thị tư cách thành viên trong một lớp
Trang 21Bộ dữ liệu mô phỏng của scikit-learn cung cấp các tùychọn mở rộng để kiểm soát loại dữ liệu được tạo Tài liệu củascikit-learn chứa mô tả đầy đủ về tất cả các tham số, nhưng chỉ
có một số tham số đáng chú ý
Trong make_regression và make_classification,n_informative xác định số lượng đối tượng được sử dụng để tạovectơ mục tiêu Nếu n_informative nhỏ hơn tổng số thuộc tính(n_features), tập dữ liệu thu được sẽ có các đối tượng dư thừa
có thể được xác định thông qua kỹ thuật lựa chọn đối tượng
Ngoài ra, make_classification còn chứa tham số trọng số(weights) cho phép chúng ta mô phỏng các tập dữ liệu với cáclớp không cân bằng Ví dụ: trọng số = [.25, 75] sẽ trả về mộttập dữ liệu có 25% quan sát thuộc một lớp và 75% quan sátthuộc lớp thứ hai
Đối với make_blobs, tham số trung tâm (center) xác định
số lượng cụm được tạo Sử dụng thư viện trực quan hóamatplotlib, chúng ta có thể hình dung các cụm được tạo bởimake_blobs: