Gần đây, tôi được giao nhiệm vụ tạo sơ đồ cây logic để thể hiện quy trình giải quyết vấn đề trong công việc của mình. Trong cây logic, tôi phải biểu diễn các phương trình khác nhau để giải bài toán. Rõ ràng, tôi có thể tạo một cây logic bằng các chương trình như MS PowerPoint hoặc Paint. Nhưng việc sử dụng các chương trình này sẽ là một quy trình thủ công, có thể dẫn đến một số điểm không nhất quán về hình dạng và kích thước trong quá trình trực quan hóa. Hơn nữa, sửa đổi các ô như vậy theo cách thủ công có thể là một quá trình tẻ nhạt
Tôi muốn tự động hóa quá trình này. Vì vậy, tôi bắt đầu bằng cách khám phá khả năng tạo cây logic bằng Python. Tôi đã xem các gói khác nhau có thể phục vụ mục đích của mình, chẳng hạn như networkx
và graphviz
. Tôi muốn khám phá thêm các khả năng với Python để thể hiện các quy trình giải quyết vấn đề. Trong loạt bài này, tôi sẽ chia sẻ những phát hiện của mình về các khả năng khác nhau của trực quan hóa biểu đồ bằng Python. Trong phần đầu tiên của loạt bài này, tôi sẽ chia sẻ một kỹ thuật mà tôi đã tìm ra để tạo lưu đồ trong Python bằng gói SchemDraw. Trong các phần tiếp theo, tôi sẽ chia sẻ các cách để trực quan hóa cấu trúc cây như cây logic và biểu đồ tổ chức bằng các gói khác. Bắt đầu nào
Hình ảnh của Kelly Sikkema từ môi trường UnsplashVirtual cho dự án này
Tôi bắt đầu bằng việc tạo một môi trường ảo tên là graphs
cho dự án này. Môi trường ảo Python tạo môi trường biệt lập cho các dự án. Điều này ngụ ý rằng mỗi dự án có các phần phụ thuộc riêng [Real Python, 2018]. Sử dụng môi trường ảo để tránh cài đặt các gói Python trên toàn cầu, điều này có thể làm hỏng các công cụ hệ thống hoặc các dự án khác [PyPA, 2022]
Để tạo môi trường ảo mình tạo 1 file yml như hình bên dưới. Nó bao gồm danh sách các phụ thuộc được yêu cầu cho dự án này
Tệp môi trường để tạo một môi trường ảo có tên là đồ thị
Để tạo môi trường ảo có tên graphs
bằng tệp yml đã cho, tôi chạy phần sau trong thiết bị đầu cuối
conda env create -n graphs --file graphs-environment.yml
Khi môi trường được tạo, tôi kích hoạt nó bằng cách sử dụng
conda activate graphs
Cũng có thể tạo một hạt nhân duy nhất trong sổ ghi chép jupyter cho môi trường ảo này mà tôi đã tạo bằng lệnh sau trong thiết bị đầu cuối
python -m ipykernel install --user --name graphs --display-name "graphs"
Sau khi hạt nhân được cài đặt, sau đó để chạy sổ ghi chép trong môi trường nhất định, tôi chỉ cần đi tới Hạt nhân, Thay đổi hạt nhân và chọn biểu đồ. Nếu môi trường không còn cần thiết nữa, nó cũng có thể được gỡ bỏ dễ dàng bằng cách sử dụng
conda env remove -n graphs
Sơ đồLưu đồ là một bức tranh thể hiện các bước khác nhau trong một quy trình theo thứ tự tuần tự. Lưu đồ có thể có nhiều loại khác nhau nhưng mục đích chính của chúng là phản ánh dòng chảy của quy trình để giải quyết vấn đề hoặc đạt được mục tiêu. Tôi nhớ lại ở trường trung học, lần đầu tiên tôi học về lưu đồ trong lớp khoa học máy tính. Việc phác thảo lưu đồ bằng bút và giấy để giải các bài toán đơn giản như tính tổng của n số hay in một dãy số là một thử thách thú vị hồi đó.
Trong phần sau, tôi sẽ mô tả cách tạo lưu đồ trong Python bằng gói SchemDraw. Tôi sẽ xem xét một ví dụ về bài toán phát hiện xem một chuỗi có phải là một palindrome hay không
Các thành phần của sơ đồ
Gói SchemDraw, được phát triển bởi Colling J. Delker, cho phép tạo sơ đồ mạch điện chất lượng cao. Tuy nhiên, tôi thấy rằng gói này cũng có thể được sử dụng để tạo lưu đồ tùy chỉnh
Có sáu yếu tố chính trong một lưu đồ. Các nút bắt đầu hoặc kết thúc được biểu thị bằng hình elip. Hình bình hành biểu thị đầu vào do người dùng xác định trong khi hình chữ nhật biểu thị một quá trình. Hình dạng kim cương minh họa một giai đoạn ra quyết định trong quy trình. Các hình dạng khác nhau được kết nối bằng mũi tên nhọn, còn được gọi là đầu nối. Với SchemDraw, có thể xây dựng các hình dạng cơ bản này bằng Python bằng cách nhập schemdraw.Drawing[]
và chuyển các tham số và nhãn tương ứng cho từng phần tử. Hơn nữa, gói này cho phép người dùng kiểm soát kích thước của các thành phần như chiều rộng và chiều cao, cũng như hướng của các mũi tên như trong ảnh chụp màn hình bên dưới
Xây dựng các thành phần cơ bản của lưu đồ bằng gói SchemDraw. Hình ảnh của tác giả
Lưu đồ biểu diễn bài toán palindrome
Palindrome là một từ hoặc một chuỗi được đọc xuôi hoặc ngược giống nhau. Thuật toán cho bài toán này rất đơn giản. Đầu tiên, tôi yêu cầu người dùng nhập một chuỗi. Tiếp theo, tôi đảo ngược chuỗi. Nếu chuỗi và đảo ngược của nó giống nhau, thì chuỗi là một bảng màu ngược lại và nếu không, nó không phải là một bảng màu. Vấn đề này có thể được nêu trong Python chỉ là một vài dòng mã như hình bên dưới
string = input[“Enter a string: “]reverse_string = string[::-1]if string == reverse_string:
print [f”{string} is a palindrome.”]
else:
print [f”{string} is not a palindrome.”]
Mã để lấy lưu đồ cho vấn đề này bằng SchemDraw được cung cấp trong ý chính bên dưới. Nó bắt đầu bằng nút bắt đầu, theo sau là hộp nhập để nhập chuỗi. Tiếp theo, có một hộp quy trình để đảo ngược chuỗi và hộp kim cương để kiểm tra xem chuỗi và đảo ngược của nó có giống nhau không. Có hai mũi tên khác nhau chuyển hướng ra khỏi hộp quyết định dựa trên việc quyết định là Đúng hay Sai. Sau khi in kết quả, các mũi tên cuối cùng đạt cực đại ở nút cuối
Kết quả là mình được lưu đồ như bên dưới, cũng có thể lưu dưới dạng file ảnh
Lưu đồ để giải quyết vấn đề đối xứng được tạo bằng SchemDraw. Hình ảnh của tác giả. Phần kết luận
Trực quan hóa đồ thị là một khái niệm thú vị để biểu diễn mạng, luồng quy trình như chuỗi cung ứng hoặc quy trình giải quyết vấn đề, cấu trúc cây như cây quyết định, cây tổ chức, cây logic và cây thư mục. Mặc dù có sẵn các gói tinh vi để trực quan hóa dữ liệu bằng Python, chẳng hạn như matplotlib, seaborn, Bokeh, Plotly, v.v. , có một số gói hiện có để biểu diễn đồ thị và mạng trong Python mặc dù chúng không phổ biến
Trong bài đăng này, tôi bắt đầu bằng cách tạo một môi trường ảo cho dự án này. Và sau đó tôi đã giải thích một phương pháp để tạo lưu đồ đơn giản trong Python bằng gói SchemDraw. Trong các phần tiếp theo của loạt bài này, tôi sẽ chia sẻ một số cách mà tôi đã tìm ra để biểu diễn các cấu trúc cây như biểu đồ tổ chức và cây logic bằng cách sử dụng các gói như networkx và graphviz