Chuyển một tệp dưới dạng đối số trong python

Các đối số được đưa ra sau tên của chương trình trong trình bao dòng lệnh của hệ điều hành được gọi là Đối số dòng lệnh. Python cung cấp nhiều cách khác nhau để xử lý các loại đối số này. Ba phổ biến nhất là.  

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

Chuyển một tệp dưới dạng đối số trong python

Đố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ọc

1

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 ở 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.argv2 và sys.argv3. 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.argv5 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.argv6 có phương thức sys.argv7 đọ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.argv9 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 argparse0

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 ngang đượ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 argparse1

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 argparse2 để đặt tùy chọn đó thành argparse3 theo mặc định và chuyển thành argparse4 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 argparse7 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 argparse8 để đọc dữ liệu. Nếu chưa cài đặt, bạn có thể sử dụng argparse9 (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"] =< (compare["forecast"] - compare["actual"])/compare["actual"]

in(so sánh)

Đặt tất cả lại với nhau và sau khi đánh bóng một chút, sau đây là mã hoàn chỉnh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

nhập cảnh báo

cảnh báo. bộ lọc đơn giản("bỏ qua")

 

từ pandas_datareader. wb nhập WorldBankReader

nhập mô hình thống kê. api as sm

nhập gấu trúc as pd

 

sê-ri = "NY. GDP. MKTP. CN"

quốc gia = "SE" # Thụy Điển

độ dài = 40

bắt đầu = 0

các bước = 3

đơn đặt hàng = (1,1,1)

 

# Đọc dữ liệu GDP từ cơ sở dữ liệu của Ngân hàng Thế giới

gdp = WorldBankReader(bộ, country, start=1960, end=2020).đọc()

# 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 chuỗi gấu trúc

gdp = gdp[loạt]

# Phù hợp với mô hình arima

kết quả = sm. tsa. ARIMA(endog=gdp . [start:bắt đầu+độ dài], . order=order).phù hợp()

# Dự báo và tính toán sai số tương đối

dự báo = kết quả. dự báo(bước=bước)

df = pd. Khung dữ liệu({"Thực tế":gdp, "Dự báo". dự báo}). dropna()

df["Lỗi Rel"] =< (df["Forecast"] - df["Actual"]) / df["Actual"]

# In kết quả

với pd. option_context('hiển thị. max_rows', Không có, 'hiển thị. max_columns', 3).

    in(df)

Tập lệnh này in đầu ra sau

1

2

3

4

Thực tế      Lỗi Dự báo Rel

2000-12-31  2408151000000  2. 367152e+12  -0. 017025

2001-12-31  2503731000000  2. 449716e+12  -0. 021574

2002-12-31  2598336000000  2. 516118e+12  -0. 031643

Đoạn mã trên ngắn, nhưng chúng tôi đã làm cho nó đủ linh hoạt bằng cách giữ một số tham số trong các biến. Chúng ta có thể thay đổi đoạn mã trên để sử dụng argparse để có thể thay đổi một số tham số từ dòng lệnh, như sau

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

từ argparse nhập ArgumentParser, ArgumentDefaultsHelpFormatter

nhập cảnh báo

cảnh báo. bộ lọc đơn giản("bỏ qua")

 

từ pandas_datareader. wb nhập WorldBankReader

nhập mô hình thống kê. api as sm

nhập gấu trúc as pd

 

# Phân tích đối số dòng lệnh

trình phân tích cú pháp = Trình phân tích đối số(formatter_class=ArgumentDefaultsHelpFormatter)

trình phân tích cú pháp. add_argument("-c", "--country", default="SE", help="Two-letter country code")

trình phân tích cú pháp. add_argument("-l", "--length", default=40, type=int, help="Length of time series to fit the ARIMA model")

trình phân tích cú pháp. add_argument("-s", "--start", default=0, type=int, help="Starting offset to fit the ARIMA model")

args = vars(trình phân tích cú pháp.parse_args())

 

# Cài đặt thông số

sê-ri = "NY. GDP. MKTP. CN"

quốc gia = args["quốc gia"]

độ dài = đối số["độ dài"]

start = args["start"]

các bước = 3

đơn đặt hàng = (1,1,1)

 

# Đọc dữ liệu GDP từ cơ sở dữ liệu của Ngân hàng Thế giới

gdp = WorldBankReader(bộ, country, start=1960, end=2020).đọc()

# 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 chuỗi gấu trúc

gdp = gdp[loạt]

# Phù hợp với mô hình arima

kết quả = sm. tsa. ARIMA(endog=gdp . [start:bắt đầu+độ dài], . order=order).phù hợp()

# Dự báo và tính toán sai số tương đối

dự báo = kết quả. dự báo(bước=bước)

df = pd. Khung dữ liệu({"Thực tế":gdp, "Dự báo". dự báo}). dropna()

df["Lỗi Rel"] =< (df["Forecast"] - df["Actual"]) / df["Actual"]

# In kết quả

với pd. option_context('hiển thị. max_rows', Không có, 'hiển thị. max_columns', 3).

    in(df)

Nếu chúng ta chạy đoạn mã trên trong một dòng lệnh, chúng ta có thể thấy nó hiện có thể chấp nhận các đối số

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

$ python gdp_arima. py --help

cách sử dụng. gdp_arima. py [-h] [-c QUỐC GIA] [-l LENGTH] [-s BẮT ĐẦU]

 

đối số tùy chọn

-h, --help            hiển thị thông báo trợ giúp này và thoát

-c QUỐC GIA, --quốc gia QUỐC GIA

Mã quốc gia gồm hai chữ cái (mặc định. SE)

-l LENGTH, --length LENGTH

Độ dài của chuỗi thời gian để phù hợp với mô hình ARIMA (mặc định. 40)

-s BẮT ĐẦU, --bắt đầu BẮT ĐẦU

Bắt đầu offset để phù hợp với mô hình ARIMA (mặc định. 0)

$ python gdp_arima. py

Thực tế      Lỗi Dự báo Rel

2000-12-31  2408151000000  2. 367152e+12  -0. 017025

2001-12-31  2503731000000  2. 449716e+12  -0. 021574

2002-12-31  2598336000000  2. 516118e+12  -0. 031643

$ python gdp_arima. py -c KHÔNG

Thực tế      Lỗi Dự báo Rel

2000-12-31  1507283000000  1. 337229e+12  -0. 112821

2001-12-31  1564306000000  1. 408769e+12  -0. 099429

2002-12-31  1561026000000  1. 480307e+12  -0. 051709

Trong lệnh cuối cùng ở trên, chúng tôi chuyển vào -2 để áp dụng mô hình tương tự cho dữ liệu GDP của Na Uy (NO) thay vì Thụy Điển (SE). Do đó, để tránh rủi ro làm rối mã, chúng tôi đã sử dụng lại mã của mình cho một tập dữ liệu khác

Sức mạnh của việc giới thiệu một đối số dòng lệnh là chúng ta có thể dễ dàng kiểm tra mã của mình với các tham số khác nhau. Ví dụ: chúng tôi muốn xem liệu mô hình ARIMA(1,1,1) có phải là mô hình tốt để dự đoán GDP hay không và chúng tôi muốn xác minh với một cửa sổ thời gian khác của các quốc gia Bắc Âu

  • Đan Mạch (DK)
  • Phần Lan (FI)
  • Ai-xơ-len (IS)
  • Na Uy (KHÔNG)
  • Thụy Điển (SE)

Chúng tôi muốn kiểm tra cửa sổ 40 năm nhưng với các điểm xuất phát khác nhau (kể từ 1960, 1965, 1970, 1975). Tùy thuộc vào hệ điều hành, bạn có thể tạo vòng lặp for trong Linux và mac bằng cú pháp bash shell

Vỏ bọc

1

2

3

4

5

C ĐK FI IS NO SE; do

    cho S trong 0 5 10 15; do

        python gdp_arima. py -c $C -s $S

    xong

xong

Hoặc, khi cú pháp trình bao cho phép, chúng ta có thể đặt mọi thứ vào một dòng

Vỏ bọc

1

C ĐK FI IS NO SE; do for S in 0 5 10 15; do python gdp_arima.py -c $C -s $S ; done ; done

Hoặc thậm chí tốt hơn, hãy cung cấp một số thông tin ở mỗi lần lặp lại vòng lặp và chúng tôi sẽ chạy tập lệnh của mình nhiều lần

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

$ cho C trong DK FI LÀ KHÔNG SE; . py -c $C -s $S ;

ĐK 0

Thực tế      Lỗi Dự báo Rel

2000-12-31  1. 326912e+12  1. 290489e+12  -0. 027449

2001-12-31  1. 371526e+12  1. 338878e+12  -0. 023804

2002-12-31  1. 410271e+12  1. 386694e+12  -0. 016718

ĐK 5

Thực tế      Lỗi Dự báo Rel

2005-12-31  1. 585984e+12  1. 555961e+12  -0. 018931

2006-12-31  1. 682260e+12  1. 605475e+12  -0. 045644

2007-12-31  1. 738845e+12  1. 654548e+12  -0. 048479

ĐK 10

Thực tế      Lỗi Dự báo Rel

2010-12-31  1. 810926e+12  1. 762747e+12  -0. 026605

2011-12-31  1. 846854e+12  1. 803335e+12  -0. 023564

2012-12-31  1. 895002e+12  1. 843907e+12  -0. 026963

 

...

 

 

SE 5

Thực tế      Lỗi Dự báo Rel

2005-12-31  2931085000000  2. 947563e+12   0. 005622

2006-12-31  3121668000000  3. 043831e+12  -0. 024934

2007-12-31  3320278000000  3. 122791e+12  -0. 059479

SE 10

Thực tế      Lỗi Dự báo Rel

31-12-2010  3573581000000  3. 237310e+12  -0. 094099

31-12-2011  3727905000000  3. 163924e+12  -0. 151286

31-12-2012 3743086000000  3. 112069e+12  -0. 168582

SE 15

Thực tế      Lỗi Dự báo Rel

31-12-2015 4260470000000  4. 086529e+12  -0. 040827

31-12-2016 4415031000000  4. 180213e+12  -0. 053186

31-12-2017 4625094000000  4. 273781e+12  -0. 075958

Nếu đang sử dụng Windows, bạn có thể sử dụng cú pháp sau trong dấu nhắc lệnh

Hệ điều hành MS

1

cho % C trong (DK FI IS NO SE) do for %S in (0 5 10 15) do python gdp_arima. py -c $ C -s $S

hoặc phần sau trong PowerShell

PowerShell

1

foreach ($C in "DK"< . ,"FI","IS","NO","SE") { foreach ($S in 0,5,10,15) { python gdp_arima.py -c $C -s $S } }

Cả hai sẽ tạo ra cùng một kết quả

Mặc dù chúng ta có thể đặt một vòng lặp tương tự bên trong tập lệnh Python của mình, đôi khi sẽ dễ dàng hơn nếu chúng ta có thể thực hiện điều đó tại dòng lệnh. Nó có thể thuận tiện hơn khi chúng ta đang khám phá các tùy chọn khác nhau. Hơn nữa, bằng cách sử dụng vòng lặp bên ngoài mã Python, chúng tôi có thể yên tâm rằng mỗi khi chúng tôi chạy tập lệnh, nó sẽ độc lập vì chúng tôi sẽ không chia sẻ bất kỳ biến nào giữa các lần lặp

Thay thế cho đối số dòng lệnh

Sử dụng đối số dòng lệnh không phải là cách duy nhất để chuyển dữ liệu vào tập lệnh Python của bạn. Ít nhất, cũng có một số cách khác

  • sử dụng biến môi trường
  • sử dụng tập tin cấu hình

Biến môi trường là các tính năng từ hệ điều hành của bạn để giữ một lượng nhỏ dữ liệu trong bộ nhớ. Chúng ta có thể đọc các biến môi trường trong Python bằng cú pháp sau

1

2

nhập os

in(os. môi trường["MYVALUE"])

Ví dụ, trong Linux, đoạn script hai dòng trên sẽ hoạt động với shell như sau

1

2

3

$ xuất MYVALUE="xin chào"

$ python show_env. py

xin chào

Trong Windows, cú pháp bên trong dấu nhắc lệnh cũng tương tự

1

2

3

4

C. \MLM> đặt MYVALUE=xin chào

 

C. \MLM> python show_env. py

xin chào

Bạn cũng có thể thêm hoặc chỉnh sửa các biến môi trường trong Windows bằng hộp thoại trong Bảng điều khiển

Chuyển một tệp dưới dạng đối số trong python

Vì vậy, chúng tôi có thể giữ các tham số cho tập lệnh trong một số biến môi trường và để tập lệnh điều chỉnh hành vi của nó, chẳng hạn như thiết lập đối số dòng lệnh

Trong trường hợp chúng ta có nhiều tùy chọn để thiết lập, tốt hơn hết là lưu các tùy chọn vào một tệp thay vì tràn ngập dòng lệnh. Tùy thuộc vào định dạng chúng tôi đã chọn, chúng tôi có thể sử dụng mô-đun -3 hoặc -4 từ Python để đọc định dạng Windows INI hoặc định dạng JSON tương ứng. Chúng tôi cũng có thể sử dụng thư viện của bên thứ ba PyYAML để đọc định dạng YAML

Đối với ví dụ trên chạy mô hình ARIMA trên dữ liệu GDP, chúng ta có thể sửa đổi mã để sử dụng tệp cấu hình YAML

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

nhập cảnh báo

cảnh báo. bộ lọc đơn giản("bỏ qua")

 

từ pandas_datareader. wb nhập WorldBankReader

nhập mô hình thống kê. api as sm

nhập gấu trúc as pd

nhập yaml

 

# Tải cấu hình từ tệp YAML

với mở("config. yaml", "r") như fp:

    args = yaml. safe_load(fp)

 

# Cài đặt thông số

sê-ri = "NY. GDP. MKTP. CN"

quốc gia = args["quốc gia"]

độ dài = đối số["độ dài"]

start = args["start"]

các bước = 3

đơn đặt hàng = (1,1,1)

 

# Đọc dữ liệu GDP từ cơ sở dữ liệu của Ngân hàng Thế giới

gdp = WorldBankReader(bộ, country, start=1960, end=2020).đọc()

# 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 chuỗi gấu trúc

gdp = gdp[loạt]

# Phù hợp với mô hình arima

kết quả = sm. tsa. ARIMA(endog=gdp . [start:bắt đầu+độ dài], . order=order).phù hợp()

# Dự báo và tính toán sai số tương đối

dự báo = kết quả. dự báo(bước=bước)

df = pd. Khung dữ liệu({"Thực tế":gdp, "Dự báo". dự báo}). dropna()

df["Lỗi Rel"] =< (df["Forecast"] - df["Actual"]) / df["Actual"]

# In kết quả

với pd. option_context('hiển thị. max_rows', Không có, 'hiển thị. max_columns', 3).

    in(df)

Tệp cấu hình YAML có tên là -5 và nội dung của nó như sau

1

2

3

quốc gia. ĐN

chiều dài. 40

bắt đầu. 0

Sau đó, chúng ta có thể chạy đoạn mã trên và thu được kết quả như trước. Đối tác JSON rất giống nhau, trong đó chúng tôi sử dụng hàm -6 từ mô-đun -4

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

nhập json

nhập cảnh báo

cảnh báo. bộ lọc đơn giản("bỏ qua")

 

từ pandas_datareader. wb nhập WorldBankReader

nhập mô hình thống kê. api as sm

nhập gấu trúc as pd

 

# Tải cấu hình từ tệp JSON

với mở("config. json", "r") as fp:

    args = json. tải(fp)

 

# Cài đặt thông số

sê-ri = "NY. GDP. MKTP. CN"

quốc gia = args["quốc gia"]

độ dài = đối số["độ dài"]

start = args["start"]

các bước = 3

đơn đặt hàng = (1,1,1)

 

# Đọc dữ liệu GDP từ cơ sở dữ liệu của Ngân hàng Thế giới

gdp = WorldBankReader(bộ, country, start=1960, end=2020).đọc()

# 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 chuỗi gấu trúc

gdp = gdp[loạt]

# Phù hợp với mô hình arima

kết quả = sm. tsa. ARIMA(endog=gdp . [start:bắt đầu+độ dài], . order=order).phù hợp()

# Dự báo và tính toán sai số tương đối

dự báo = kết quả. dự báo(bước=bước)

df = pd. Khung dữ liệu({"Thực tế":gdp, "Dự báo". dự báo}). dropna()

df["Lỗi Rel"] =< (df["Forecast"] - df["Actual"]) / df["Actual"]

# In kết quả

với pd. option_context('hiển thị. max_rows', Không có, 'hiển thị. max_columns', 3).

    in(df)

Và tệp cấu hình JSON, -8, sẽ là

1

2

3

4

5

{

"quốc gia". "SE",

"chiều dài". 40,

"bắt đầu". 0

}

Bạn có thể tìm hiểu thêm về cú pháp của JSON và YAML cho dự án của mình. Nhưng ý tưởng ở đây là chúng ta có thể tách biệt dữ liệu và thuật toán để mã của chúng ta có khả năng sử dụng lại tốt hơn

Bạn muốn bắt đầu với Python cho Machine Learning?

Tham gia khóa học xử lý sự cố email miễn phí trong 7 ngày của tôi ngay bây giờ (có mã mẫu)

Nhấp để đăng ký và cũng nhận được phiên bản PDF Ebook miễn phí của khóa học

Tải xuống khóa học nhỏ MIỄN PHÍ của bạn

Đọc thêm

Phần này cung cấp nhiều tài nguyên hơn về chủ đề này nếu bạn muốn tìm hiểu sâu hơn

thư viện

  • mô-đun argparse, https. // tài liệu. con trăn. org/3/library/argparse. html
  • Trình đọc dữ liệu Pandas, https. // pandas-datareader. đọcthedocs. io/vi/mới nhất/
  • ARIMA trong mô hình thống kê, https. //www. mô hình thống kê. org/devel/tạo/statsmodels. tsa. arima. mô hình. ARIMA. html
  • mô-đun configparser, https. // tài liệu. con trăn. org/3/library/configparser. html
  • mô-đun json, https. // tài liệu. con trăn. org/3/thư viện/json. html
  • PyYAML, https. //pyyaml. org/wiki/PyYAMLTài liệu

Bài viết

  • Làm việc với JSON, https. // nhà phát triển. mozilla. org/en-US/docs/Learn/JavaScript/Objects/JSON
  • YAML trên Wikipedia, https. // vi. wikipedia. tổ chức/wiki/YAML

Sách

  • Sách dạy nấu ăn Python, ấn bản thứ ba, của David Beazley và Brian K. Jones, https. //www. amazon. com/dp/1449340377/

Tóm lược

Trong hướng dẫn này, bạn đã thấy cách chúng ta có thể sử dụng dòng lệnh để kiểm soát tập lệnh Python hiệu quả hơn. Cụ thể, bạn đã học

3 loại đối số trong Python là gì?

Do đó, chúng tôi kết luận rằng Đối số hàm Python và ba loại đối số hàm của nó. Đây là- các đối số mặc định, từ khóa và tùy ý .

Cái gì được sử dụng để truyền đối số cho tệp Python bằng dòng lệnh?

Python cung cấp một mô-đun getopt giúp bạn phân tích các đối số và tùy chọn dòng lệnh. hệ thống. argv là danh sách các đối số dòng lệnh.