Làm việc trong một dự án học máy có nghĩa là chúng ta cần thử nghiệm. Có một cách để định cấu hình tập lệnh của bạn một cách dễ dàng sẽ giúp bạn di chuyển nhanh hơn. Trong Python, chúng tôi có một cách để điều chỉnh mã từ một dòng lệnh. Trong hướng dẫn này, chúng ta sẽ xem cách chúng ta có thể tận dụng các đối số dòng lệnh cho tập lệnh Python để giúp bạn làm việc tốt hơn trong dự án máy học của mình
Sau khi kết thúc hướng dẫn này, bạn sẽ học
- Tại sao chúng tôi muốn kiểm soát tập lệnh Python trong dòng lệnh
- Làm thế nào chúng ta có thể làm việc trong một dòng lệnh một cách hiệu quả
Bắt đầu dự án của bạn với cuốn sách mới Python for Machine Learning của tôi, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ
Bắt đầu nàoĐối số dòng lệnh cho tập lệnh Python của bạn. Ảnh của insung yoon. Một số quyền được bảo lưu
Tổng quan
Hướng dẫn này gồm ba phần;
- Chạy tập lệnh Python trong dòng lệnh
- Làm việc trên dòng lệnh
- Thay thế cho đối số dòng lệnh
Chạy Tập lệnh Python trong Dòng lệnh
Có nhiều cách để chạy tập lệnh Python. Ai đó có thể chạy nó như một phần của sổ ghi chép Jupyter. Ai đó có thể chạy nó trong IDE. Nhưng trong tất cả các nền tảng, luôn có thể chạy tập lệnh Python trong dòng lệnh. Trong Windows, bạn có dấu nhắc lệnh hoặc PowerShell [hoặc tốt hơn nữa là Windows Terminal]. Trong macOS hoặc Linux, bạn có Terminal hoặc xterm. Chạy tập lệnh Python trong dòng lệnh rất hiệu quả vì bạn có thể chuyển các tham số bổ sung vào tập lệnh
Đoạn script sau cho phép chúng ta chuyển các giá trị từ dòng lệnh vào Python
1
2
3
4
nhập sys
n = int[sys.argv[1]]
in[n+1]
Chúng tôi lưu vài dòng này vào một tệp và chạy nó trong dòng lệnh với một đối số
Vỏ bọc1
2
dòng lệnh $ python. py 15
16
Sau đó, bạn sẽ thấy nó lấy đối số của chúng ta, chuyển đổi nó thành một số nguyên, thêm một số vào nó và in ra. Danh sách sys.argv
chứa tên tập lệnh của chúng tôi và tất cả các đối số [tất cả các chuỗi], trong trường hợp trên, là ["commandline.py", "15"]
Khi bạn chạy một dòng lệnh với một tập hợp các đối số phức tạp hơn, sẽ mất một số nỗ lực để xử lý danh sách sys.argv
. Do đó, Python đã cung cấp thư viện argparse
để trợ giúp. Điều này giả định kiểu GNU, có thể được giải thích bằng ví dụ sau
1
rsync -a -v --exclude="*. pyc" -B 1024 --ignore-hiện có 192. 168. 0. 3. /tmp/. /
Các đối số tùy chọn được giới thiệu bởi “-
” hoặc “--
“, trong đó một dấu gạch ngang sẽ mang một ký tự đơn “tùy chọn ngắn” [chẳng hạn như -a
, -B
và -v
ở trên] và hai dấu gạch ngang dành cho nhiều ký tự “tùy chọn dài” . Các đối số tùy chọn có thể có các tham số bổ sung, chẳng hạn như trong ["commandline.py", "15"]
1 hoặc ["commandline.py", "15"]
2 các ["commandline.py", "15"]
3 và ["commandline.py", "15"]
4 là các tham số tương ứng với -B
và --exclude
. Ngoài ra, chúng tôi cũng có thể có các đối số bắt buộc mà chúng tôi chỉ đưa vào dòng lệnh. Phần ["commandline.py", "15"]
7 và ["commandline.py", "15"]
8 ở trên là ví dụ. Thứ tự của các đối số bắt buộc là quan trọng. Ví dụ: lệnh ["commandline.py", "15"]
9 ở trên sẽ sao chép tệp từ ["commandline.py", "15"]
7 sang ["commandline.py", "15"]
8 thay vì ngược lại
Phần sau sao chép ví dụ trên bằng Python bằng argparse
1
2
3
4
5
6
7
8
9
10
11
12
13
14
nhập argparse
trình phân tích cú pháp = argparse. Trình phân tích đối số[mô tả=",
formatter_class=argparse. ArgumentDefaultsHelpFormatter]
trình phân tích cú pháp. add_argument["-a", "--archive", action="store_true", help="archive mode"]
trình phân tích cú pháp. add_argument["-v", "--verbose", action="store_true", help="increase verbosity"]
trình phân tích cú pháp. add_argument["-B", "--block-size", help="checksum blocksize"]
trình phân tích cú pháp. add_argument["--bỏ qua đối số", action="store_true", help="skip files that exist"]
trình phân tích cú pháp. add_argument["--exclude", help="files to exclude"]
trình phân tích cú pháp. add_argument["src", help="Source location"]
trình phân tích cú pháp. add_argument["dest", help="Destination location"]
args = trình phân tích cú pháp. parse_args[]
config = vars[args]
in[config]
Nếu bạn chạy đoạn script trên, bạn sẽ thấy
1
2
3
$ python argparse_example. py
cách sử dụng. argparse_example. py [-h] [-a] [-v] [-B BLOCK_SIZE] [--bỏ qua tồn tại] [--loại trừ EXCLUDE] src dest
argparse_example. py. lỗi. các đối số sau đây là bắt buộc. src, đích
Điều này có nghĩa là bạn đã không cung cấp các đối số bắt buộc cho sys.argv
2 và sys.argv
3. Có lẽ lý do tốt nhất để sử dụng argparse là để nhận màn hình trợ giúp miễn phí nếu bạn cung cấp ____04 hoặc sys.argv
5 làm đối số, như sau
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ python argparse_example. py --help
cách sử dụng. argparse_example. py [-h] [-a] [-v] [-B BLOCK_SIZE] [--bỏ qua tồn tại] [--loại trừ EXCLUDE] src dest
Chỉ là một ví dụ
đối số vị trí
src Vị trí nguồn
điểm đến Vị trí điểm đến
đối số tùy chọn
-h, --help hiển thị thông báo trợ giúp này và thoát
-a, --archive chế độ lưu trữ [mặc định. Sai]
-v, --verbose tăng mức độ chi tiết [mặc định. Sai]
-B BLOCK_SIZE, --kích thước khối BLOCK_SIZE
kích thước khối tổng kiểm tra [mặc định. Không có]
--ignore-current bỏ qua các tệp tồn tại [mặc định. Sai]
--exclude EXCLUDE tệp cần loại trừ [mặc định. Không có]
Mặc dù tập lệnh không có gì thực, nhưng nếu bạn cung cấp các đối số theo yêu cầu, bạn sẽ thấy điều này
1
2
$ python argparse_example. py -a --ignore-hiện có 192. 168. 0. 1. /tmp/ /nhà
{'lưu trữ'. Đúng, 'dài dòng'. Sai, 'block_size'. Không, 'bỏ qua_hiện tại'. Đúng, 'loại trừ'. Không, 'src'. '192. 168. 0. 1. /tmp/', 'đích'. '/Trang Chủ'}
Đối tượng trình phân tích cú pháp được tạo bởi sys.argv
6 có phương thức sys.argv
7 đọc sys.argv
và trả về một đối tượng không gian tên. Đây là một đối tượng mang các thuộc tính và chúng ta có thể đọc chúng bằng cách sử dụng sys.argv
9 chẳng hạn. Nhưng thông thường, sẽ dễ xử lý hơn nếu đó là từ điển Python. Do đó, chúng tôi có thể chuyển đổi nó thành một bằng cách sử dụng argparse
0
Thông thường, đối với tất cả các đối số tùy chọn, chúng tôi cung cấp tùy chọn dài và đôi khi cũng có tùy chọn ngắn. Sau đó, chúng tôi có thể truy cập giá trị được cung cấp từ dòng lệnh bằng cách sử dụng tùy chọn dài làm khóa [với dấu gạch nối được thay thế bằng dấu gạch dưới hoặc tùy chọn ngắn một ký tự làm khóa nếu chúng tôi không có phiên bản dài]. "Các đối số vị trí" không phải là tùy chọn và tên của chúng được cung cấp trong hàm argparse
1
Có nhiều loại lập luận. Đối với các đối số tùy chọn, đôi khi chúng tôi sử dụng chúng làm cờ Boolean, nhưng đôi khi chúng tôi mong đợi chúng mang lại một số dữ liệu. Ở phần trên, chúng tôi sử dụng argparse
2 để đặt tùy chọn đó thành argparse
3 theo mặc định và chuyển thành argparse
4 nếu được chỉ định. Đối với tùy chọn khác, chẳng hạn như -B
ở trên, theo mặc định, tùy chọn này sẽ có thêm dữ liệu theo sau tùy chọn đó
Chúng ta có thể yêu cầu thêm một đối số là một loại cụ thể. Ví dụ: trong tùy chọn -B
ở trên, chúng ta có thể làm cho nó mong đợi dữ liệu số nguyên bằng cách thêm argparse
7 như sau
1
trình phân tích cú pháp. add_argument["-B", "--block-size", type=int, help="checksum blocksize"]
Và nếu chúng tôi cung cấp sai loại, argparse sẽ giúp chấm dứt chương trình của chúng tôi với một thông báo lỗi đầy đủ thông tin
1
2
3
python argparse_example. py -a -B xin chào --ignore-hiện có 192. 168. 0. 1. /tmp/ /nhà
cách sử dụng. argparse_example. py [-h] [-a] [-v] [-B BLOCK_SIZE] [--bỏ qua tồn tại] [--loại trừ EXCLUDE] src dest
argparse_example. py. lỗi. đối số -B/--block-size. giá trị int không hợp lệ. 'xin chào'
Làm việc trên dòng lệnh
Trao quyền cho tập lệnh Python của bạn bằng các đối số dòng lệnh có thể đưa nó lên một cấp độ mới về khả năng sử dụng lại. Trước tiên, hãy xem một ví dụ đơn giản về việc khớp mô hình ARIMA với chuỗi thời gian GDP. Ngân hàng Thế giới thu thập dữ liệu GDP lịch sử từ nhiều quốc gia. Chúng ta có thể sử dụng gói argparse
8 để đọc dữ liệu. Nếu chưa cài đặt, bạn có thể sử dụng argparse
9 [hoặc -
0 nếu bạn đã cài đặt Anaconda] để cài đặt gói
1
pip cài đặt pandas_datareader
Mã cho dữ liệu GDP mà chúng tôi sử dụng là -
1;
1
2
3
từ pandas_datareader. wb nhập WorldBankReader
gdp = WorldBankReader["NY. GDP. MKTP. CN", "SE", bắt đầu=1960, end=2020].đọc[]
Sau đó, chúng ta có thể dọn dẹp DataFrame một chút bằng cách sử dụng các công cụ do gấu trúc cung cấp
1
2
3
4
5
6
7
8
9
nhập gấu trúc as pd
# Xoá tên quốc gia khỏi chỉ mục
gdp = gdp. cấp độ giảm[cấp độ=0, axis=0]
# Sắp xếp dữ liệu theo trình tự thời gian và đặt điểm dữ liệu vào cuối năm
gdp. chỉ mục = pd. to_datetime[gdp. chỉ mục]
gdp = gdp. sort_index[]. lấy mẫu lại["y"].lần cuối[]
# Chuyển đổi Khung dữ liệu gấu trúc thành Sê-ri gấu trúc
gdp = gdp["NY. GDP. MKTP. CN"]
Lắp mô hình ARIMA và sử dụng mô hình để dự đoán không khó. Trong phần sau, chúng tôi điều chỉnh nó bằng cách sử dụng 40 điểm dữ liệu đầu tiên và dự báo cho 3 điểm tiếp theo. Sau đó so sánh dự báo với thực tế về sai số tương đối
1
2
3
4
5
6
7
nhập mô hình thống kê. api as sm
mô hình = sm. tsa. ARIMA[endog=gdp . [:40], đặt hàng= . [1,1,1]].phù hợp[]
dự báo = mô hình. dự báo[các bước=3]
so sánh = pd. Khung dữ liệu[{"thực tế":gdp, "dự báo". dự báo}]. dropna[]
so sánh["lỗi liên quan"] =