Trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo bảng điều khiển tương tác Python bằng cách sử dụng plotly Dash, với một ví dụ
Bảng điều khiển dựa trên web là một cách hiệu quả để hiển thị và chia sẻ thông tin với những người khác. Nhưng nó thường liên quan đến một quy trình phức tạp mà chỉ những nhà phát triển web chuyên nghiệp mới có thể đạt được. Là lập trình viên Python trong khoa học dữ liệu, làm thế nào chúng ta có thể xây dựng một ứng dụng web tương tác với trực quan hóa dữ liệu?
Plotly
conventional 15012 organic 15009 Name: type, dtype: int649 là thư viện đi đến. Nó trao quyền cho chúng tôi xây dựng các bảng điều khiển đẹp mắt, tương tác và dễ chia sẻ, tất cả đều bằng Python
Theo hướng dẫn Python Dash này, bạn sẽ học
- Dấu gạch ngang là gì
- Cách xây dựng bố cục ứng dụng Dash với trực quan hóa dữ liệu
- Cách thêm tính năng tương tác [gọi lại]
- Cách chạy và hiển thị bảng điều khiển
Vì vậy, nếu bạn muốn xây dựng bảng điều khiển tương tác đầu tiên của mình với Python Dash, thì hướng dẫn này sẽ hướng dẫn bạn qua một ví dụ từng bước
Bắt đầu nào
Ghi chú của biên tập viên. Hướng dẫn này được cập nhật vào tháng 4 năm 2022 để bao gồm các tính năng mới trong Dash 2. 0
học thêm. để tìm hiểu thêm chi tiết và chuyên sâu về Dash, vui lòng tham gia khóa học video của chúng tôi. Bảng điều khiển tương tác Python với Plotly Dash. Nó bao gồm các giải thích từng bước, các chức năng nâng cao hơn, tất cả đều có các ví dụ về bộ dữ liệu trong thế giới thực
Để theo dõi trang tổng quan tương tác Python này trong hướng dẫn Dash, bạn cần biết Python, bao gồm kiến thức cơ bản về
conventional 15012 organic 15009 Name: type, dtype: int640. Nếu bạn cần trợ giúp, vui lòng xem các tài nguyên bên dưới
- Khái niệm cơ bản về Python. Khóa học cấp tốc về Python MIỄN PHÍ
- Con trăn
conventional 15012 organic 15009 Name: type, dtype: int64
0. Khóa học Python để phân tích dữ liệu với các dự án. Khóa học này dạyconventional 15012 organic 15009 Name: type, dtype: int64
0, điều cần thiết để chuyển đổi tập dữ liệu thành bảng điều khiển và hơn thế nữa
Mục lục
- Dash là gì?
- Bước 1. Khám phá tập dữ liệu
- Bước 2. Thiết lập môi trường Python
- Bước 3. Chuẩn bị xây dựng ứng dụng Dash
- Bước 4. Xây dựng bố cục của bảng điều khiển
- Bước #5. Thêm tương tác vào bảng điều khiển
- Bước #6. Chạy bảng điều khiển
Dash là gì?
Dash là một thư viện Python miễn phí được xây dựng bởi cùng một công ty đã tạo ra thư viện vẽ đồ thị
conventional 15012 organic 15009 Name: type, dtype: int643. Với Dash, bạn có thể phát triển các bảng điều khiển tương tác, có thể tùy chỉnh, dựa trên web, tất cả đều bằng Python mà không cần viết HTML hoặc JavaScript
Mỗi ứng dụng Dash có hai phần chính
- cách trình bày. xác định ứng dụng Dash trông như thế nào
- chức năng gọi lại. chức năng kết nối các thành phần của Dash và xác định các tính năng tương tác của chúng
Chúng tôi sẽ xây dựng cả hai phần trong hướng dẫn này. Bây giờ, hãy xem qua ví dụ của chúng tôi để tạo trực quan hóa dữ liệu tương tác bằng Dash
Bước 1. Khám phá tập dữ liệu
Trước khi xây dựng ứng dụng Dash, chúng ta cần khám phá bộ dữ liệu. Chúng tôi khuyên bạn nên làm điều này trong JupyterLab/Notebook. Vì nó có giao diện tương tác nên chúng ta có thể dễ dàng viết mã và kiểm tra kết quả đầu ra
Đầu tiên, chúng tôi sẽ nhập hai thư viện [vui lòng cài đặt chúng nếu bạn chưa cài đặt]
conventional 15012 organic 15009 Name: type, dtype: int64
0. để tải và thao tác bộ dữ liệu- ____00. để tạo trực quan hóa dữ liệu
Dash được xây dựng dựa trên biểu đồ, vì vậy thật dễ dàng để đưa các số liệu theo biểu đồ vào ứng dụng Dash. Đây là lý do tại sao chúng tôi đang sử dụng sơ đồ, thay vì các thư viện trực quan hóa dữ liệu Python khác
Trong hướng dẫn này, chúng tôi sẽ sử dụng bộ dữ liệu Giá bơ để xây dựng trang tổng quan mẫu của chúng tôi. Vì vậy, hãy tải nó và xem tóm tắt của nó
Như bạn có thể thấy, tập dữ liệu chứa thông tin về bơ
RangeIndex: 30021 entries, 0 to 30020 Data columns [total 13 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 30021 non-null object 1 average_price 30021 non-null float64 2 total_volume 30021 non-null float64 3 4046 30021 non-null float64 4 4225 30021 non-null float64 5 4770 30021 non-null float64 6 total_bags 30021 non-null float64 7 small_bags 30021 non-null float64 8 large_bags 30021 non-null float64 9 xlarge_bags 30021 non-null float64 10 type 30021 non-null object 11 year 30021 non-null int64 12 geography 30021 non-null object dtypes: float64[9], int64[1], object[3] memory usage: 3.0+ MB
Bây giờ, giả sử chúng tôi muốn trình bày giá trung bình của các loại bơ khác nhau cho các khu vực địa lý khác nhau theo thời gian, tôi. e. , chúng tôi muốn tập trung trình bày thông tin của các cột
conventional 15012 organic 15009 Name: type, dtype: int641,
conventional 15012 organic 15009 Name: type, dtype: int642,
conventional 15012 organic 15009 Name: type, dtype: int643, và
conventional 15012 organic 15009 Name: type, dtype: int644
Hãy khám phá thêm những cột này.
conventional 15012 organic 15009 Name: type, dtype: int643 và
conventional 15012 organic 15009 Name: type, dtype: int644 khác nhau của quả bơ là gì? . Điều này sẽ cho chúng tôi thấy các danh mục duy nhất cho các biến này
Từ kết quả bên dưới, bạn có thể thấy rằng có hai danh mục của
conventional 15012 organic 15009 Name: type, dtype: int643 và nhiều danh mục khác nhau cho
conventional 15012 organic 15009 Name: type, dtype: int644
conventional 15012 organic 15009 Name: type, dtype: int64
RangeIndex: 30021 entries, 0 to 30020 Data columns [total 13 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 30021 non-null object 1 average_price 30021 non-null float64 2 total_volume 30021 non-null float64 3 4046 30021 non-null float64 4 4225 30021 non-null float64 5 4770 30021 non-null float64 6 total_bags 30021 non-null float64 7 small_bags 30021 non-null float64 8 large_bags 30021 non-null float64 9 xlarge_bags 30021 non-null float64 10 type 30021 non-null object 11 year 30021 non-null int64 12 geography 30021 non-null object dtypes: float64[9], int64[1], object[3] memory usage: 3.0+ MB2
Vì chỉ có hai loại bơ nên chúng ta có thể vẽ chuỗi thời gian
conventional 15012 organic 15009 Name: type, dtype: int642 của chúng trên cùng một biểu đồ đường. Hãy thử tạo một con số như vậy khi
conventional 15012 organic 15009 Name: type, dtype: int644 là 'Los Angeles'
Học thêm. Nếu bạn không quen thuộc với plotly, vui lòng xem hướng dẫn của chúng tôi, Plotly Python Tutorial. Cách tạo biểu đồ tương tác
Đây là một biểu đồ đẹp, nhưng nó chỉ dành cho một
conventional 15012 organic 15009 Name: type, dtype: int644 của ‘Los Angeles’
Làm cách nào chúng tôi có thể giúp người dùng dễ dàng khám phá thông tin này từ các
conventional 15012 organic 15009 Name: type, dtype: int644 khác nhau?
Nếu chúng tôi có danh sách thả xuống với các tùy chọn
conventional 15012 organic 15009 Name: type, dtype: int644, người dùng sẽ có thể chọn trong số đó. Sau đó, theo
conventional 15012 organic 15009 Name: type, dtype: int644 được người dùng chọn, chúng tôi có thể hiển thị biểu đồ đường trên cho họ cho
conventional 15012 organic 15009 Name: type, dtype: int644 cụ thể đó
Đây là điều chúng ta có thể làm dễ dàng với Dash
Đã đến lúc sử dụng Dash
Bước 2. Thiết lập môi trường Python
Sau khi khám phá tập dữ liệu trong Jupyter Notebook, chúng tôi khuyên bạn nên sử dụng một trong các trình chỉnh sửa Python để triển khai ứng dụng Dash. Điều này là do khi làm việc trên các ứng dụng Dash, chúng tôi muốn tập trung vào việc xây dựng và chạy các bảng điều khiển dưới dạng toàn bộ tập lệnh. Vì vậy, việc kiểm tra trong các trình soạn thảo Python như PyCharm sẽ dễ dàng hơn
Chúng tôi đang sử dụng PyCharm Editor – Phiên bản cộng đồng. Nó miễn phí và có nhiều tính năng hữu ích để viết mã Python. Tuy nhiên, nếu bạn vẫn thích Jupyter Notebook hơn, bạn có thể dùng thử thư viện jupyter-dash, thư viện này sẽ không được đề cập trong hướng dẫn này
Bạn cũng cần sử dụng lệnh
RangeIndex: 30021 entries, 0 to 30020 Data columns [total 13 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 30021 non-null object 1 average_price 30021 non-null float64 2 total_volume 30021 non-null float64 3 4046 30021 non-null float64 4 4225 30021 non-null float64 5 4770 30021 non-null float64 6 total_bags 30021 non-null float64 7 small_bags 30021 non-null float64 8 large_bags 30021 non-null float64 9 xlarge_bags 30021 non-null float64 10 type 30021 non-null object 11 year 30021 non-null int64 12 geography 30021 non-null object dtypes: float64[9], int64[1], object[3] memory usage: 3.0+ MB27 trong thiết bị đầu cuối của mình để cài đặt Dash trước khi sử dụng
Bước 3. Chuẩn bị xây dựng ứng dụng Dash
Chúng ta có thể chuyển sang trình soạn thảo Python chẳng hạn như PyCharm để bắt đầu viết ứng dụng Dash
Các đoạn mã bên dưới cần được kết hợp và chạy dưới dạng một tập lệnh Python duy nhất. Chúng tôi đang chia nhỏ chúng thành nhiều phần để dễ giải thích hơn. Bạn có thể nhập chúng vào tệp Python của mình hoặc sao chép và dán phiên bản hoàn chỉnh sẽ được cung cấp ở bước cuối cùng của hướng dẫn này
Đầu tiên, chúng ta cần nhập các thư viện. Những cái cần thiết cho bảng điều khiển của chúng tôi là
RangeIndex: 30021 entries, 0 to 30020 Data columns [total 13 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 30021 non-null object 1 average_price 30021 non-null float64 2 total_volume 30021 non-null float64 3 4046 30021 non-null float64 4 4225 30021 non-null float64 5 4770 30021 non-null float64 6 total_bags 30021 non-null float64 7 small_bags 30021 non-null float64 8 large_bags 30021 non-null float64 9 xlarge_bags 30021 non-null float64 10 type 30021 non-null object 11 year 30021 non-null int64 12 geography 30021 non-null object dtypes: float64[9], int64[1], object[3] memory usage: 3.0+ MB
28. thư viện Dash, bao gồmconventional 15012 organic 15009 Name: type, dtype: int64
9. lớp dấu gạch ngang
conventional 15012 organic 15009 Name: type, dtype: int64
20 [mô-đun Thành phần Dash HTML]. để xây dựng bố cục, chứa các thành phần cho mọi thẻ HTML, chẳng hạn như tiêu đề H1conventional 15012 organic 15009 Name: type, dtype: int64
21 [mô-đun Thành phần cốt lõi của Dash]. để xây dựng bố cục, chứa nhiều thành phần cấp cao hơn, chẳng hạn như danh sách thả xuống và biểu đồconventional 15012 organic 15009 Name: type, dtype: int64
22,conventional 15012 organic 15009 Name: type, dtype: int64
23. để xác định chức năng gọi lại
conventional 15012 organic 15009 Name: type, dtype: int64
0. tải và thao tác dữ liệuconventional 15012 organic 15009 Name: type, dtype: int64
0. tạo hình
Sau đó, chúng tôi có thể tải tập dữ liệu dưới dạng Khung dữ liệu
conventional 15012 organic 15009 Name: type, dtype: int640, giống như trước đó. Vui lòng đảm bảo rằng bạn đã lưu tập lệnh Python này và tập dữ liệu
conventional 15012 organic 15009 Name: type, dtype: int6427 trong cùng một thư mục để tránh đặt đường dẫn trong hàm
conventional 15012 organic 15009 Name: type, dtype: int6428
Chúng ta cũng sẽ tạo một đối tượng ứng dụng Dash có tên là
conventional 15012 organic 15009 Name: type, dtype: int6429.
conventional 15012 organic 15009 Name: type, dtype: int6429 này là thứ chúng ta sẽ tập trung vào trong phần còn lại của hướng dẫn
Bước 4. Xây dựng bố cục của bảng điều khiển
Quá trình xây dựng ứng dụng luôn bắt đầu từ bố cục. Vì vậy, trước tiên, chúng ta cần thiết kế giao diện của bảng điều khiển
Bố cục có cấu trúc của một cây các thành phần. Và chúng tôi sử dụng từ khóa
conventional 15012 organic 15009 Name: type, dtype: int6491 của
conventional 15012 organic 15009 Name: type, dtype: int6429 để chỉ định bố cục của nó. Sau đó, sử dụng hai mô-đun.
conventional 15012 organic 15009 Name: type, dtype: int6420 và
conventional 15012 organic 15009 Name: type, dtype: int6421, chúng tôi có thể hiển thị ba thành phần trên bảng điều khiển của mình, từ trên xuống dưới
- tiêu đề H1 [
conventional 15012 organic 15009 Name: type, dtype: int64
95] làm tiêu đề của trang tổng quan. Chúng tôi chỉ định thuộc tính con của nó là văn bản 'Bảng điều khiển giá bơ' - một trình đơn thả xuống [
conventional 15012 organic 15009 Name: type, dtype: int64
96, là mộtconventional 15012 organic 15009 Name: type, dtype: int64
97] dựa trênconventional 15012 organic 15009 Name: type, dtype: int64
4
Chúng tôi đã tạo nó như một biến bên ngoài và sau đó tham chiếu nó trongconventional 15012 organic 15009 Name: type, dtype: int64
91.
–conventional 15012 organic 15009 Name: type, dtype: int64
00. thuộc tính này chỉ định các tùy chọn về khu vực địa lý duy nhất mà danh sách thả xuống có
–conventional 15012 organic 15009 Name: type, dtype: int64
01 thuộc tính này là khu vực địa lý được chọn khi chúng tôi khởi chạy ứng dụng lần đầu tiên. Chúng tôi đặt tên là ‘New York’ - một đồ thị [______402] với id là 'đồ thị giá'
Dưới đây là mã để thiết lập bố cục
Như bạn có thể nhận thấy, chúng tôi đang sử dụng thành phần
conventional 15012 organic 15009 Name: type, dtype: int6403 để giữ ba thành phần Dash của chúng tôi.
conventional 15012 organic 15009 Name: type, dtype: int6403 là một thành phần vùng chứa, thành phần này luôn được sử dụng khi chúng ta có nhiều thành phần Dash trong bố cục. Chúng tôi đặt các thành phần khác của Dash dưới dạng danh sách bên trong thuộc tính
conventional 15012 organic 15009 Name: type, dtype: int6405 của nó
Sau khi thiết lập giao diện của bảng điều khiển, đã đến lúc thêm chức năng gọi lại để làm cho nó tương tác
Bước #5. Thêm tương tác vào bảng điều khiển
Các hàm gọi lại là các hàm Python. Họ được Dash tự động gọi bất cứ khi nào đầu vào của họ thay đổi. Do đó, các chức năng chạy và cập nhật kết quả đầu ra của chúng
Hai phần chính của chức năng gọi lại là
- trang trí, bắt đầu bằng
conventional 15012 organic 15009 Name: type, dtype: int64
06 - chức năng của chính nó, bắt đầu bằng
conventional 15012 organic 15009 Name: type, dtype: int64
07
Dưới đây là mã của chức năng gọi lại của chúng tôi để làm cho hình đồ thị phụ thuộc vào danh sách thả xuống
Trong decorator
conventional 15012 organic 15009 Name: type, dtype: int6406, chúng tôi chỉ định các đối tượng
conventional 15012 organic 15009 Name: type, dtype: int6423 và
conventional 15012 organic 15009 Name: type, dtype: int6422 của hàm gọi lại. Cả hai đều là thuộc tính của các thành phần Dash
Trong ví dụ của chúng tôi, đầu ra là thuộc tính
conventional 15012 organic 15009 Name: type, dtype: int6401 của thành phần Dash với id = ‘price-graph’, là thành phần
conventional 15012 organic 15009 Name: type, dtype: int6402 được đặt trong
conventional 15012 organic 15009 Name: type, dtype: int6491. Trong khi đầu vào là thuộc tính
conventional 15012 organic 15009 Name: type, dtype: int6404 của thành phần Dash có tên biến
conventional 15012 organic 15009 Name: type, dtype: int6496, là thành phần
conventional 15012 organic 15009 Name: type, dtype: int6497 được đặt trong
conventional 15012 organic 15009 Name: type, dtype: int6491. Vậy là bạn đã thấy hai cách chỉ định các thành phần trong hàm gọi lại
- chuyển ID tới
conventional 15012 organic 15009 Name: type, dtype: int64
08 - chuyển tên biến trực tiếp tới
conventional 15012 organic 15009 Name: type, dtype: int64
08, trong trường hợp đó, Dash sẽ tự động tạo ID cho thành phần
Sau khi chỉ định chúng, chúng tôi sử dụng chúng trong chức năng bên dưới. Trong dấu ngoặc đơn sau
conventional 15012 organic 15009 Name: type, dtype: int6400, chúng tôi đặt tên đầu vào là
conventional 15012 organic 15009 Name: type, dtype: int6401. Điều này tương ứng với
conventional 15012 organic 15009 Name: type, dtype: int6402. Sau đó, trong phần thân của hàm, chúng ta yêu cầu hàm
- tạo tập dữ liệu được lọc
conventional 15012 organic 15009 Name: type, dtype: int64
03 dựa trênconventional 15012 organic 15009 Name: type, dtype: int64
01 - tạo một hình vẽ đồ thị có tên là
conventional 15012 organic 15009 Name: type, dtype: int64
05 dựa trên bộ dữ liệu được lọc này
Hàm trả về kết quả là
conventional 15012 organic 15009 Name: type, dtype: int6405 này, tương ứng với
conventional 15012 organic 15009 Name: type, dtype: int6407
Đây là một ví dụ. Khi người dùng chọn 'Los Angeles' trong thành phần thả xuống, thuộc tính
conventional 15012 organic 15009 Name: type, dtype: int6404 của nó sẽ trở thành 'Los Angeles', có nghĩa là đầu vào của hàm
conventional 15012 organic 15009 Name: type, dtype: int6409. Thay đổi này sẽ kích hoạt chức năng gọi lại và cập nhật đầu ra, vì hình vẽ đường chỉ dành cho Los Angeles
Đó là tất cả công việc cần thiết cho chức năng gọi lại
Chúng tôi đã sẵn sàng để chạy bảng điều khiển
Bước #6. Chạy bảng điều khiển
Theo mặc định, ứng dụng Dash chạy trên máy tính cục bộ của chúng tôi. Để hoàn thành kịch bản, chúng tôi cần thêm mã để chạy máy chủ. Chúng ta có thể thêm hai dòng mã này sau hàm gọi lại
Và đó là nó
Như đã đề cập trước đó, chúng ta cần chạy tất cả mã dưới dạng toàn bộ tập lệnh. Vì vậy, nếu chưa, bạn có thể sao chép toàn bộ tập lệnh bên dưới và lưu nó vào trình chỉnh sửa Python của mình
Vì vậy, chúng ta có thể đặt tên cho tập lệnh Python này là
conventional 15012 organic 15009 Name: type, dtype: int6430 và lưu nó trong cùng thư mục với tập dữ liệu
conventional 15012 organic 15009 Name: type, dtype: int6427. Sau đó, chúng ta có thể vào terminal để chạy nó bằng cách gõ lệnh
conventional 15012 organic 15009 Name: type, dtype: int6432
Sau khi chạy thành công, bạn sẽ thấy các thông báo bên dưới trong cửa sổ terminal
conventional 15012 organic 15009 Name: type, dtype: int642
Hãy nhớ rằng Dash tạo ra các ứng dụng web? . Bạn có thể vào đó và xem bảng điều khiển tương tác Python đầu tiên của bạn đang mở trong trình duyệt
đây là những gì nó sẽ giống
Nếu bạn chưa có cơ hội chạy ứng dụng của mình, hãy xem tại đây. Chúng tôi đã triển khai ứng dụng này trên Heroku để bạn có thể tương tác với nó với tư cách là người dùng. Cố gắng chọn các khu vực địa lý khác nhau trong danh sách thả xuống và xem biểu đồ được cập nhật
Trong hướng dẫn này, bạn đã tạo thành công bảng điều khiển tương tác Python đầu tiên của mình với plotly Dash
Một lần nữa, để tìm hiểu về cách
- thiết lập thêm các thành phần Dash như thanh trượt phạm vi, mục radio, dữ liệu
- tùy chỉnh giao diện của bảng điều khiển
- tạo bảng điều khiển bố cục dạng lưới
- các tính năng tương tác năng động hơn
Vui lòng tham gia khóa học định dạng video của chúng tôi. Bảng điều khiển tương tác Python với Plotly Dash. Bạn cũng sẽ có cái nhìn tổng quan về HTML và CSS trong khóa học để hiểu rõ hơn về Dash
Để lại một bình luận cho bất kỳ câu hỏi mà bạn có thể có hoặc bất cứ điều gì khác
- Dash, Khoa học dữ liệu, trực quan hóa dữ liệu, cốt truyện, Python
Lianne và Justin
Trước đóCách sử dụng Học máy có thể giải thích với Python
Cách sử dụng các công cụ AutoML Python để tự động hóa quy trình học máy của bạnTiếp theo
2 thoughts on “How to create Python Interactive Dashboards with Plotly Dash: 6 steps Tutorial
Converting your data visualizations to interactive dashboards”
Lekan Adenusi
Tháng Bảy 5, 2022 tại 8. 28 giờ sáng
Cảm ơn bạn cho bài viết này. Tôi mới bắt đầu học Dash và đến đây để nhanh chóng làm quen với nó. Một chút suy nghĩ, khi tôi chuyển biến geo_dropdown làm id thành phần, tôi liên tục gặp lỗi gọi lại. Nhưng khi tôi đặt id cho thành phần thả xuống và chuyển id đó vào Đầu vào, nó hoạt động tốt
Hồi đáp
Lianne và Justin
Tháng Bảy 5, 2022 tại 3. 44 giờ chiều
Xin chào Lekan, chuyển biến trực tiếp vào component_id là một tính năng mới của Dash 2. 0. Tôi đoán bạn đang sử dụng phiên bản Dash cũ hơn. Hãy thử cập nhật nó và sẽ hoạt động
Hồi đáp
Để lại một bình luận Hủy trả lời
Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *
Nhập ở đây
Tên*
E-mail*
Trang mạng
Lưu tên, email và trang web của tôi trong trình duyệt này cho lần bình luận tiếp theo
Bài viết gần đây hơn
Tăng cường độ dốc trong học máy là gì. các nguyên tắc cơ bản được giải thích
Phải đọc trước khi triển khai
Lianne & Justin Ngày 22 tháng 11 năm 2022
Đây là hướng dẫn dành cho người mới bắt đầu về tăng cường độ dốc trong học máy.
Tìm hiểu nó là gì và cách cải thiện hiệu suất của nó bằng quy chuẩn hóa.
Lỗi Python là gì và cách khắc phục chúng
Lianne & Justin Ngày 4 tháng 10 năm 2022
Đây là hướng dẫn về lỗi Python cho người mới bắt đầu. Tìm hiểu các loại của chúng và cách khắc phục chúng bằng các bước chung