“Phương pháp tạo bảng dữ liệu chỉnh chu với Python của Tiến sĩ Eirik Berge”

Hôm nay chúng ta sẽ tìm hiểu về cách sử dụng Python Enums để tạo cấu hình dữ liệu thanh lịch. Bài viết được viết bởi Tiến sĩ Eirik Berge và được đăng trên bản tin Sed ut perspiciatis unde.

Python Enums là một cách để xác định một tập hợp các hằng số được đặt tên, mang lại nhiều lợi ích cho việc lưu trữ thông tin cấu hình. Với Python Enums, chúng ta có thể nhóm lại các thông số khác nhau được sử dụng trong một hàm để đảm bảo an toàn cho loại và không cần đặt tên biến quá dài.

Với việc sử dụng Python Enums, chúng ta cũng có thể dễ dàng truy cập vào mã cấu hình sâu hơn trong tập lệnh và giúp cho đoạn mã trở nên dễ đọc hơn.

Python Enums cũng cung cấp nhiều tính năng đơn giản như truy xuất tên và giá trị của tập hợp các hằng số, hay quay ngược lại từ giá trị sang tên. Chúng cũng cho phép tạo danh sách các cặp tên/giá trị trong một Enum và pickle và unpickle liệt kê trong Python.

Tuy nhiên, khi sử dụng mã cấu hình nhạy cảm, chẳng hạn như mật khẩu hoặc khóa truy cập, chúng ta không nên viết chúng một cách rõ ràng trong mã và nên lưu trữ chúng trong một tệp riêng biệt bị hệ thống kiểm soát phiên bản bỏ qua.

Với những ưu điểm mà Python Enums mang lại, chúng ta có thể sử dụng chúng để tạo cấu hình dữ liệu thanh lịch và dễ sử dụng trong quá trình lập trình. #Python #Enums #CấuHìnhDữLiệuThanhLịch

Nguồn: https://techtoday.co/how-python-enumerations-make-data-configuration-elegant-by-eirik-berge-phd-may-2023/

bản tin

Sed ut perspiciatis unde.

Đặt mua

Ảnh của Zac Durant trên Bapt

Python Enums cung cấp giải pháp tinh tế hơn để lưu trữ thông tin cấu hình. Enums (viết tắt của kiểu liệt kê) về cơ bản là một cách để xác định một tập hợp các hằng số được đặt tên. Cách tốt nhất để hiểu Enums một cách nhanh chóng là điều chỉnh mã cấu hình máy học từ phần trước. Mã trước đó bạn có là:

# Configuration for RandomForestClassifier
N_ESTIMATORS_RANDOM_FOREST_CLASSIFIER = 100
MAX_DEPTH_RANDOM_FOREST_CLASSIFIER = 8
N_JOBS_RANDOM_FOREST_CLASSIFIER = 3

# Configuration for AdaBoostClassifier
N_ESTIMATORS_ADA_BOOST_CLASSIFIER = 50
LEARNING_RATE_ADA_BOOST_CLASSIFIER = 1.0

Bây giờ nó có thể được viết là:

from enum import Enum

class RandomForest(Enum):
"""An Enum for tracking the configuration of random forest classifiers."""
N_ESTIMATORS = 100
MAX_DEPTH = 8
N_JOBS = 3

class AdaBoost(Enum):
"""An Enum for tracking the configuration of Ada boost classifiers."""
N_ESTIMATORS = 50
LEARNING_RATE = 1.0

Một số ưu điểm

Hãy nhanh chóng xem những lợi thế mà Python Enums mang lại cho chúng ta:

  • Mỗi tham số (ví dụ: MAX_DEPTH) hiện được lưu trữ theo thứ bậc trong mô hình mà chúng được sử dụng. Điều này đảm bảo rằng không có gì bị ghi đè khi thêm mã cấu hình được đưa vào. Do đó cũng không cần đặt tên biến quá dài.
  • Các thông số khác nhau được sử dụng trong RandomForestClassifier bây giờ được nhóm lại trong RandomForest liệt kê. Do đó, chúng có thể được lặp đi lặp lại và được phân tích chung để đảm bảo an toàn cho loại.
  • Vì Enums là các lớp, chúng có thể có tài liệu như tôi đã minh họa ở trên. Mặc dù điều này có thể không thực sự cần thiết đối với ví dụ này, nhưng trong các ví dụ khác, điều này có thể làm rõ điều mà phép liệt kê đang đề cập đến. Có điều này dưới dạng một chuỗi tài liệu được kết hợp với lớp thay vì nhận xét tự do sẽ tốt hơn rất nhiều. Đối với một điều, phần mềm tài liệu tự động giờ đây sẽ nhận ra rằng chuỗi tài liệu thuộc về bảng liệt kê. Đối với nhận xét tự do, điều này có thể sẽ bị mất.

Nếu bây giờ bạn muốn truy cập mã cấu hình sâu hơn trong tập lệnh, bạn chỉ cần viết:

from sklearn.ensemble import RandomForestClassifier

RandomForestClassifier(
n_estimators=RandomForest.N_ESTIMATORS.value,
max_depth=RandomForest.MAX_DEPTH.value,
n_jobs=RandomForest.N_JOBS.value
)

Điều này có vẻ rõ ràng và dễ đọc

Một số tính năng Python của Enums

Hãy minh họa một số tính năng đơn giản của phép liệt kê Python bằng cách xem ví dụ về đồ chơi:

from enum import Enum
class HTTPStatusCodes(Enum):
"""An Enum that keeps track of status codes for HTTP(s) requests."""
OK = 200
CREATED = 201
BAD_REQUEST = 400
NOT_FOUND = 404
SERVER_ERROR = 500

Rõ ràng, thông tin chứa trong bảng liệt kê có liên quan với nhau; chúng là tất cả về (các) mã trạng thái HTTP. Với điều này, bây giờ bạn có thể sử dụng đoạn mã đơn giản sau để trích xuất tên và giá trị:

print(HTTPStatusCodes.OK.name)
>>> OK

print(HTTPStatusCodes.OK.value)
>>> 200

Python Enums cũng cho phép bạn quay ngược lại: Cho rằng giá trị mã trạng thái là 404bạn có thể tìm thấy tên mã trạng thái bằng cách viết đơn giản:

print(HTTPStatusCodes(200).name)
>>> OK

Bạn có thể làm việc chung với các cặp tên/giá trị trong một Enum bằng cách sử dụng hàm tạo danh sách, ví dụ: list():

print(list(HTTPStatusCodes))
>>> (
<HTTPStatusCodes.OK: 200>,
<HTTPStatusCodes.CREATED: 201>,
<HTTPStatusCodes.BAD_REQUEST: 400>,
<HTTPStatusCodes.NOT_FOUND: 404>,
<HTTPStatusCodes.SERVER_ERROR: 500>
)

Cuối cùng, bạn có thể pickle và unpickle liệt kê trong Python. Để làm điều này, chỉ cần sử dụng pickle mô hình như bạn làm với các đối tượng quen thuộc khác trong Python:

from pickle import dumps, loads
print(HTTPStatusCodes is loads(dumps(HTTPStatusCodes)))
>>> True

Điều này đặc biệt quan trọng đối với mã cấu hình cho các mô hình máy học. Trong trường hợp đó, cũng có những thư viện nổi tiếng như MLflow lưu mã cấu hình một cách trang nhã cho bạn.

Mã cấu hình nhạy cảm

Khi sử dụng mã cấu hình nhạy cảm (như mật khẩu hoặc khóa truy cập), bạn KHÔNG BAO GIỜ nên viết chúng một cách rõ ràng trong mã. Chúng phải nằm trong một tệp riêng biệt bị hệ thống kiểm soát phiên bản bạn đang sử dụng bỏ qua và được nhập vào tập lệnh.

Điều đó không có nghĩa là chúng không thể được lưu trữ trong Enums trong mã. Enums là về tổ chức và thậm chí thông tin bị kiểm duyệt cũng có thể được tổ chức. Ví dụ: đây là bảng liệt kê biểu thị kết nối với tài khoản lưu trữ trong Microsoft Azure:

from enum import Enum
import os

class StorageAccount(Enum):
ACCOUNT_NAME = "my account name"
ACCESS_KEY = os.environ.get('ACCESS_KEY')
CONTAINER_NAME = "my container name"

đây StorageAccount liệt kê đang tìm nạp ACCESS_KEY từ một biến môi trường. Điều này có thể được thiết lập trong ví dụ, một .env tài liệu. Lưu ý rằng trong tập lệnh Python, không có thông tin nhạy cảm nào được tiết lộ. Tuy nhiên, tất cả thông tin về tài khoản lưu trữ được sắp xếp gọn gàng thành một bảng liệt kê.


Leave a Reply

Your email address will not be published. Required fields are marked *