Làm chủ Shiny cho Python: Hướng dẫn cho người mới bắt đầu để xây dựng ứng dụng web tương tác
Khám phá những kiến thức cơ bản về Shiny cho Python để bạn có thể nhanh chóng bắt đầu tạo bảng điều khiển và ứng dụng web tương tác với thư viện mới này!
Những ai đã từng làm việc với R có lẽ đã nghe đến gói Shiny, cho phép bạn tạo ứng dụng web tương tác. R Shiny được phát hành vào năm 2012 và nhanh chóng được ưa chuộng khi người dùng nhận ra rằng gói dễ dùng này có thể giúp cả nhà khoa học lẫn nhà phân tích tạo ra các mô hình và bảng điều khiển tương tác hơn.
Năm 2023, Shiny cho Python ra khỏi giai đoạn alpha, cung cấp một khung phản ứng tương tự cho ngôn ngữ Python. Shiny nổi tiếng nhờ sự đơn giản và hiệu quả trong việc tạo bảng điều khiển và ứng dụng web mà không cần kỹ năng phát triển web chuyên sâu.
Shiny là gì?
Shiny là một khung ứng dụng web mã nguồn mở cho R và, với các phát triển gần đây, cho cả Python. Nó cho phép các chuyên gia dữ liệu biến phân tích của mình thành các ứng dụng web tương tác. Nòng cốt của Shiny xoay quanh khái niệm lập trình phản ứng (reactive programming), nơi các thay đổi ở đầu vào (như thanh trượt hoặc nút bấm) sẽ tự động kích hoạt việc cập nhật các đầu ra (như biểu đồ hoặc bảng).
Có nhiều lợi ích khi dùng Shiny để tạo ứng dụng web. Shiny tận dụng lập trình phản ứng, cho phép bạn xây dựng các ứng dụng phản hồi động trước đầu vào của người dùng, mang lại trải nghiệm hấp dẫn và cá nhân hóa hơn. Shiny có thư viện thân thiện với người dùng và tài liệu hướng dẫn toàn diện, giúp những người chỉ có kiến thức lập trình cơ bản cũng có thể tạo ứng dụng tương tác và bắt mắt. Với những người yêu thích Python, Shiny giờ đây tạo cầu nối giữa hệ sinh thái khoa học dữ liệu phong phú của Python và năng lực phát triển web của Shiny.
Dưới đây là một vài ví dụ nơi khung Shiny tỏ ra hữu ích:
Bảng điều khiển tương tác: Shiny rất phù hợp để xây dựng các bảng điều khiển cho phép người dùng khám phá và trực quan hóa dữ liệu theo thời gian thực. Bạn có thể dùng những mẹo này để thiết kế một bảng điều khiển xuất sắc.
Khám phá dữ liệu: Nhà phân tích có thể dùng Shiny để tạo ứng dụng giúp người dùng tương tác khám phá tập dữ liệu, điều chỉnh tham số và trực quan hóa ngay lập tức.
Hệ thống hỗ trợ ra quyết định: Shiny có thể được dùng để phát triển các hệ thống hỗ trợ quyết định, giúp ra quyết định dựa trên dữ liệu bằng cách cung cấp thông tin động.
Công cụ giáo dục: Shiny hữu ích trong giáo dục, cho phép tạo ra tài liệu giảng dạy và minh họa tương tác.
Lưu ý: Cần hiểu rằng Shiny cho R và Shiny cho Python là khác nhau. Dù có các khái niệm nền tảng tương tự, cú pháp và thuật ngữ không thể hoán đổi cho nhau. Nếu bạn biết dùng Shiny cho R, bạn sẽ có lợi thế khi học Shiny cho Python, nhưng vẫn cần nắm các khác biệt được đưa vào để phù hợp với Python.
So sánh Shiny với các khung ứng dụng web khác
Khi cân nhắc phát triển ứng dụng web cho khoa học dữ liệu, sẽ hữu ích nếu hiểu Shiny so với các khung khác như thế nào.
Shiny mang đến sự kết hợp độc đáo giữa đơn giản và linh hoạt. Tuy nhiên, phiên bản Python tương đối mới so với các khung khác. Shiny được thiết kế để việc phát triển ứng dụng web trở nên dễ tiếp cận với bất kỳ ai có kiến thức mã Python.
Bên cạnh sự dễ dùng, nó được thiết kế để mở rộng mượt mà, tận dụng bộ nhớ đệm và tính phản ứng chọn lọc để giữ cho khung phản ứng hoạt động hiệu quả. Điều này mang lại lợi thế so với một số khung thiết kế web khác. Cú pháp khai báo và mô hình lập trình phản ứng của Shiny cũng giúp các nhà phân tích dữ liệu dễ tiếp cận, cho phép họ tạo ứng dụng tương tác mà không cần nhiều chuyên môn phát triển web.
Ngược lại, các khung khác như Dash và Streamlit có những điểm mạnh riêng. Dash dùng cú pháp “Pythonic” và nhấn mạnh vào phát triển nhanh. Streamlit vượt trội ở tạo mẫu nhanh với kết xuất tự động nhưng sẽ chạy lại toàn bộ chương trình khi đầu vào thay đổi, dẫn đến kém hiệu quả khi ứng dụng mở rộng. Flask và Django là các khung web mục đích chung, mang đến sự linh hoạt và kiểm soát nhưng thường đòi hỏi chuyên môn phát triển web nhiều hơn. Nếu bạn muốn học những khung này, bạn có thể đọc hướng dẫn Django của DataCamp.
Ngoài các nền tảng phát triển web dựa trên mã, nhà phân tích dữ liệu cũng dùng Tableau và Power BI cho mục đích tạo bảng điều khiển tương tự. Đây là các nền tảng trực quan hóa dữ liệu có công cụ mạnh mẽ nhưng đi kèm chi phí bản quyền. Các chương trình này cũng có tính năng phân tích hạn chế so với viết mã thuần và yêu cầu hầu hết mô hình, phân tích phức tạp phải thực hiện ở nơi khác. Bạn có thể tìm hiểu thêm về Power BI tại DataCamp.
Điều cần thiết là cân nhắc yêu cầu dự án, sở thích ngôn ngữ và nhu cầu tính năng chuyên biệt khi chọn khung phù hợp nhất cho ứng dụng khoa học dữ liệu. Dù các khung khác có điểm mạnh riêng, sự kết hợp độc đáo giữa đơn giản và linh hoạt của Shiny, cộng thêm việc tích hợp với Python, khiến nó trở thành lựa chọn hấp dẫn cho bất kỳ ai muốn nâng tầm dự án khoa học dữ liệu.
Khung
Tính năng chính
Hỗ trợ ngôn ngữ
Độ khó học
Trường hợp sử dụng
Shiny
Đơn giản và linh hoạt
R, Python
Thấp
Ứng dụng và trực quan hóa tương tác
Dash
Cú pháp đậm chất Python
Python
Trung bình
Phát triển nhanh ứng dụng web gọn nhẹ
Streamlit
Tạo mẫu nhanh với kết xuất tự động
Python
Thấp
Tạo mẫu nhanh cho ứng dụng dữ liệu
Flask
Khung web mục đích chung
Python
Trung bình đến Cao
Ứng dụng web đầy đủ chức năng
Django
Khung web Python cấp cao
Python
Trung bình đến Cao
Ứng dụng và dịch vụ web có thể mở rộng
Tableau/Power BI
Nền tảng trực quan hóa dữ liệu
Không áp dụng
Thấp
Trực quan hóa Business Intelligence
Thiết lập môi trường phát triển
Một điểm tuyệt vời của Shiny cho Python là có trình soạn thảo web nơi bạn có thể tạo ứng dụng mà không cần tải xuống hay cài đặt gì. Trình soạn thảo web này đi kèm nhiều ví dụ về ứng dụng và chức năng để bạn bắt đầu và thử ứng dụng Shiny mới.
Tuy nhiên, sẽ đến lúc trong quá trình phát triển bạn muốn chạy Shiny trên thiết bị cục bộ. Phần này sẽ hướng dẫn bạn cài đặt Python, Shiny và các phụ thuộc tương ứng, cũng như các cấu hình cần thiết để môi trường cục bộ hoạt động trơn tru.
Cài đặt Python
Để bắt đầu làm việc với Shiny ngoại tuyến, bạn cần cài đặt Python trên máy tính. Nếu bạn chưa cài Python, hãy truy cập trang chính thức của Python tại python.org và tải phiên bản mới nhất phù hợp với hệ điều hành của bạn. Nếu trước đây bạn đã cài Python, tôi khuyên nên cập nhật lên phiên bản mới nhất để đảm bảo Shiny chạy đúng.
Chạy trình cài đặt đã tải và đánh dấu vào ô "Add Python to PATH" trong quá trình cài đặt. Điều này giúp chạy Python từ dòng lệnh dễ dàng hơn. Mở cửa sổ lệnh hoặc terminal và gõ python --version để xác minh Python đã được cài đặt thành công. Bạn sẽ thấy số phiên bản hiển thị. Bạn cũng có thể chọn cài Môi trường Phát triển Tích hợp (IDE) cho tiện lợi.
Cài đặt Shiny
Khi Python đã sẵn sàng, bạn có thể cài Shiny. Chỉ cần có phiên bản Python mới nhất, bạn có thể mở cửa sổ lệnh hoặc terminal và dùng lệnh sau để cài thư viện Shiny cho Python bằng pip:
Tùy cấu hình hệ thống, Shiny có thể cần thêm các phụ thuộc. Hãy đảm bảo cài đặt các phụ thuộc này theo hướng dẫn trong tài liệu Shiny.
Cấu hình môi trường phát triển
Giờ bạn đã cài đặt Python và Shiny, còn ba chủ đề nữa cần xử lý.
IDE: Nếu bạn dùng IDE như VS Code, bạn có thể cài một tiện ích mở rộng để cho phép kết quả Shiny hiển thị ngay trong IDE.
Quản lý phiên bản: Cân nhắc dùng hệ thống quản lý phiên bản như Git để theo dõi thay đổi trong mã. Khởi tạo kho Git trong thư mục dự án để dễ quản lý và cộng tác trên các ứng dụng Shiny.
Cấu trúc mã: Tổ chức cấu trúc dự án. Tạo các thư mục riêng cho ứng dụng Shiny, tập dữ liệu và các tài nguyên bổ sung. Điều này giúp duy trì codebase gọn gàng, đây là thực hành tốt cho mọi dự án lập trình.
Với môi trường phát triển đã được thiết lập và cấu hình, bạn sẵn sàng bắt tay xây dựng ứng dụng web tương tác với Shiny cho Python.
Tạo một ứng dụng Shiny cơ bản
Hiểu cấu trúc của một ứng dụng Shiny
Một ứng dụng Shiny gồm hai thành phần chính: giao diện người dùng (UI) và logic phía máy chủ (server).
UI xác định giao diện ứng dụng và các thành phần để người dùng tương tác. Mọi thứ người dùng có thể nhìn thấy hoặc tương tác đều thuộc UI, bao gồm các thành phần như thanh trượt, nút bấm và biểu đồ.
UI được tạo bằng các hàm bắt đầu với “ui.”, như ui.input_numeric, ui.input_slider và ui.output_text. Các hàm này được bọc trong một hàm trang, thường là ui.page_fluid, mô tả bố cục cơ bản của trang.
Logic server xác định cách ứng dụng hoạt động và phản hồi trước đầu vào người dùng. Nó gồm các hàm nhận đầu vào từ UI, xử lý chúng và cập nhật các phần tử đầu ra tương ứng. Logic server được tạo bằng hàm server và bao gồm các biểu thức phản ứng để xử lý đầu vào và đầu ra.
Sau khi UI và logic server được định nghĩa, chúng ta kết nối chúng lại trong một ứng dụng hoàn chỉnh, bắt buộc phải đặt tên là “app”.
Ví dụ này nhận đầu vào từ một thanh trượt và dùng nó để thực hiện phép tính được hiển thị trong hộp văn bản bên dưới thanh trượt. Ví dụ rất đơn giản này chạy trong trình duyệt đơn giản trên localhost trong VS Code.
Như bạn thấy từ minh họa đơn giản này, “phép màu” của Shiny nằm ở tính tương tác. Động cơ phía sau tính tương tác của Shiny là mô hình lập trình phản ứng. Trong Shiny, chúng ta định nghĩa các biểu thức phản ứng để tạo chuỗi phụ thuộc giữa đầu vào và đầu ra. Khi một đầu vào thay đổi, mọi biểu thức phản ứng và đầu ra phụ thuộc đều tự động được cập nhật. Tính phản ứng này là cốt lõi của Shiny. Bạn có thể đọc thêm chi tiết về tính phản ứng của Shiny tại đây.
Có vài yếu tố then chốt giúp tính phản ứng này khả thi.
Thứ nhất là phép tính phản ứng, hay reactive.Calc. Đây là phép tính dựa trên một đầu vào. Phép tính này lưu vào bộ nhớ đệm giá trị trả về cho đến khi đầu vào thay đổi, lúc đó nó chạy lại với đầu vào mới. Điều này cho phép ứng dụng phản hồi hiệu quả trước đầu vào người dùng. Tính toán phản ứng dùng decorator @reactive.Calc, như trong ví dụ dưới đây.
@reactive.Calcdefdouble_number():returninput.number()*2Được hỗ trợ bởi
Một phần tử phản ứng khác là hiệu ứng phản ứng, hay reactive.Effect. Hiệu ứng phản ứng không trả về giá trị khi chạy. Thay vào đó, nó kích hoạt một hiệu ứng như sửa đổi biến hoặc lưu tệp. Nó cũng chạy lại khi đầu vào thay đổi. reactive.Effect phổ biến nhất là decorator @output, thêm một chuỗi kết quả vào hàng đợi thông điệp, như trong ví dụ dưới đây.
@output@render.textdeftxt():returnf"The value of x is {input.x()}"Được hỗ trợ bởi
Đôi khi, bạn có thể không muốn ứng dụng phản ứng quá tức thời. Ví dụ, nếu bạn có một mô hình tốn nhiều tài nguyên tính toán, bạn có thể muốn chờ đến khi nhiều tham số được cập nhật rồi mới chạy lại mô hình. Trong trường hợp này, reactive.event() hoặc với reactive.isolate() cung cấp các lựa chọn để giới hạn tính phản ứng của ứng dụng.
Bổ sung tính tương tác cho ứng dụng Shiny của bạn
Khi bạn cần một ứng dụng phức tạp hơn
Với logic phản ứng này, Shiny cho Python có thể tạo ứng dụng phức tạp hay đơn giản tùy nhu cầu. Bạn có thể thêm nút chọn, hộp kiểm, thanh trượt, ô nhập văn bản, đồ thị, bản đồ và còn nhiều nữa! Dưới đây là một ví dụ phức tạp hơn một chút từ tài liệu Shiny.
Trong ví dụ này, chúng ta tạo một bản đồ nhiệt của dữ liệu ngẫu nhiên. Có lựa chọn nút radio cho kiểu bản đồ nhiệt mà người dùng muốn xem, và thanh trượt thay đổi dải màu trên bản đồ nhiệt. Posit (công ty tạo ra Shiny) cung cấp thêm nhiều ví dụ trên trang web của họ, bao gồm bản sao Wordle thú vị này.
Ngoài việc tương tác vui mắt, còn rất nhiều ứng dụng hữu ích. Bạn có thể thiết kế một mô hình nhận các yếu tố môi trường như độ mặn và nhiệt độ để dự đoán hiện tượng tảo nở hoa. Một nhà nghiên cứu ngoài thực địa có thể nhập các giá trị hiện tại vào ứng dụng Shiny của bạn và nhận dự đoán theo thời gian thực.
Bạn có thể thiết kế một mô hình hiển thị dự báo doanh thu theo năm nếu đáp ứng các điều kiện nhất định. Khi đó, nhà quản lý có thể dùng ứng dụng của bạn để thử các kịch bản khác nhau bằng cách nhập số lượng bán hàng hoặc đánh dấu các sản phẩm cung cấp, và họ sẽ thấy kết quả dự báo cập nhật ngay trước mắt.
Các trường hợp sử dụng rất đa dạng trên nhiều ngành.
Các loại đầu vào và đầu ra
Shiny cung cấp nhiều lựa chọn đầu vào và đầu ra để đáp ứng nhu cầu trực quan hóa và tương tác dữ liệu khác nhau. Dưới đây là bảng đơn giản về các đầu vào và đầu ra phổ biến trong Shiny cho Python.
Đầu vào
Chức năng
Action Button Input
Cung cấp một nút để người dùng chọn.
Action Link Input
Cho phép người dùng nhấp vào một liên kết.
Text input
Cung cấp ô văn bản cho một dòng văn bản đơn giản.
Numeric input
Cung cấp ô nhập số với mũi tên lên xuống.
Slider input
Tạo một thanh trượt số.
Checkbox input
Tạo một hộp kiểm đơn cho các ứng dụng Đúng/Sai.
Switch input
Tạo một công tắc bật/tắt đơn.
Checkbox group input
Tạo nhiều hộp kiểm cho lựa chọn đa mục.
Select input
Cung cấp menu thả xuống các lựa chọn.
Radio buttons input
Tạo các nút radio, buộc phải chọn một lựa chọn duy nhất.
Text area input
Cung cấp ô văn bản lớn hơn với cửa sổ có thể thay đổi kích thước cho văn bản dài.
Date input
Tạo ô nhập ngày với lịch để người dùng chọn ngày.
Date range input
Về cơ bản là hai ô nhập ngày ghép đôi cho phép nhập một khoảng thời gian.
Password input
Tạo ô văn bản ẩn nội dung nhập.
———————————————————————————————————————
Đầu ra
Chức năng
Text output
Viết văn bản bằng HTML thuần.
Verbatim text output
Viết văn bản trong khối mã monospace.
UI output
Cho phép UI linh hoạt hơn dựa trên đầu vào người dùng.
Plot output
Tạo biểu đồ bằng các thư viện Python phổ biến, như matplotlib.
Table output
Tạo bảng đơn giản với tiêu đề cột.
Data Frame / Grid output
Tạo bảng có thể tùy chỉnh với bộ lọc, đường lưới và giới hạn số hàng.
Để xem danh sách đầy đủ các thành phần của Shiny, hãy xem trang này.
Tùy biến giao diện người dùng trong Shiny cho Python
Bố cục và chủ đề
Shiny cung cấp sự linh hoạt trong tùy biến giao diện người dùng thông qua các bố cục khác nhau bằng hàm trang. Hàm trang được dùng phổ biến nhất là page_fluid(), cung cấp thiết kế đáp ứng phù hợp với nhiều kích thước màn hình. Một bố cục cố định bề ngang, phù hợp với ứng dụng có yêu cầu thiết kế cụ thể, có thể thực hiện bằng hàm trang page_fixed().
Shiny tận dụng HTML để tạo ứng dụng web của mình. Điều này có nghĩa bạn có thể dùng chủ đề CSS để tạo kiểu cho ứng dụng. Việc thêm CSS tùy chỉnh cho phép bạn điều chỉnh diện mạo ứng dụng Shiny để phù hợp với sở thích thẩm mỹ hoặc nhận diện thương hiệu doanh nghiệp.Đầu trang
Triển khai tiện ích và phần mở rộng tùy chỉnh
Shiny hỗ trợ ipywidgets cho nhiều đồ thị tương tác, bản đồ, trực quan 3D và truyền thông đa phương tiện. Nó cũng có một số chức năng cho các widget Python khác có thể lưu dưới dạng tệp HTML. Bằng cách tích hợp các tiện ích tùy chỉnh, bạn có thể điều chỉnh ứng dụng Shiny theo trường hợp sử dụng cụ thể và tạo trải nghiệm người dùng cá nhân hóa hơn.
Triển khai ứng dụng Shiny cho Python của bạn
Giải thích các tùy chọn triển khai khác nhau
Khi bạn đã tạo một ứng dụng Shiny hấp dẫn, bạn có thể sẽ muốn chia sẻ nó với đối tượng rộng hơn, cho hồ sơ cá nhân hoặc cho khách hàng, bằng cách triển khai lên web. Shiny hỗ trợ nhiều tùy chọn triển khai để đáp ứng các nhu cầu khác nhau.
Triển khai cục bộ: Bạn có thể triển khai ứng dụng Shiny trên máy chủ cục bộ, giúp nó khả dụng trong tổ chức của bạn hoặc cho một nhóm người dùng cụ thể.
Nền tảng đám mây: Các nền tảng đám mây mang đến giải pháp có thể mở rộng và dễ truy cập để triển khai ứng dụng Shiny. Những lựa chọn phổ biến gồm:
Shinyapps.io: Nền tảng của riêng Posit được thiết kế riêng để lưu trữ ứng dụng Shiny.
Heroku: Nền tảng đám mây hỗ trợ triển khai ứng dụng Shiny.
AWS, Azure và Google Cloud: Các nhà cung cấp đám mây lớn cho phép bạn triển khai ứng dụng Shiny trên máy ảo hoặc container.
ShinyLive: Shiny cung cấp cách mới để chạy ứng dụng Shiny ngay trong trình duyệt web mà không cần máy chủ riêng chạy Python. Nó kết hợp WebAssembly và pyodide để cho phép ứng dụng Shiny chạy mà không cần cài đặt Python hay Shiny trên máy của bạn. Nền tảng này giới hạn các gói Python sẵn có và có thể không an toàn bằng các nền tảng khác, nhưng là cách tốt để chia sẻ nhanh mã không nhạy cảm.
Kết luận
Shiny cho Python là một nhân tố mới đầy hứng khởi trong lĩnh vực phát triển ứng dụng web. Việc sử dụng nó có thể nâng cấp đáng kể dự án dữ liệu của bạn mà không cần đầu tư thời gian lớn vào học phát triển web. Nếu bạn muốn thử Shiny cho R, hãy xem khóa học nền tảng Shiny của DataCamp và khóa học về tạo bảng điều khiển với R Shiny. Khi đã nắm vững các kiến thức cơ bản, hãy luyện tập kỹ năng mới với một case study Shiny!
Tôi là Tiến sĩ với 13 năm kinh nghiệm làm việc với dữ liệu trong môi trường nghiên cứu sinh học. Tôi phát triển phần mềm bằng nhiều ngôn ngữ lập trình, bao gồm Python, MATLAB và R. Tôi đam mê chia sẻ tình yêu học hỏi của mình với mọi người.
Học cách sử dụng Shiny, một gói R phổ biến, để xây dựng các ứng dụng web tương tác cao và chia sẻ các phân tích của bạn dưới dạng bảng điều khiển và trực quan hóa.
Giới thiệu về Shiny và các lợi ích
Những ai đã từng làm việc với R có lẽ đã nghe đến gói Shiny, cho phép bạn tạo ứng dụng web tương tác. R Shiny được phát hành vào năm 2012 và nhanh chóng được ưa chuộng khi người dùng nhận ra rằng gói dễ dùng này có thể giúp cả nhà khoa học lẫn nhà phân tích tạo ra các mô hình và bảng điều khiển tương tác hơn.
Năm 2023, Shiny cho Python ra khỏi giai đoạn alpha, cung cấp một khung phản ứng tương tự cho ngôn ngữ Python. Shiny nổi tiếng nhờ sự đơn giản và hiệu quả trong việc tạo bảng điều khiển và ứng dụng web mà không cần kỹ năng phát triển web chuyên sâu.
Shiny là gì?
Shiny là một khung ứng dụng web mã nguồn mở cho R và, với các phát triển gần đây, cho cả Python. Nó cho phép các chuyên gia dữ liệu biến phân tích của mình thành các ứng dụng web tương tác. Nòng cốt của Shiny xoay quanh khái niệm lập trình phản ứng (reactive programming), nơi các thay đổi ở đầu vào (như thanh trượt hoặc nút bấm) sẽ tự động kích hoạt việc cập nhật các đầu ra (như biểu đồ hoặc bảng).
Có nhiều lợi ích khi dùng Shiny để tạo ứng dụng web. Shiny tận dụng lập trình phản ứng, cho phép bạn xây dựng các ứng dụng phản hồi động trước đầu vào của người dùng, mang lại trải nghiệm hấp dẫn và cá nhân hóa hơn. Shiny có thư viện thân thiện với người dùng và tài liệu hướng dẫn toàn diện, giúp những người chỉ có kiến thức lập trình cơ bản cũng có thể tạo ứng dụng tương tác và bắt mắt. Với những người yêu thích Python, Shiny giờ đây tạo cầu nối giữa hệ sinh thái khoa học dữ liệu phong phú của Python và năng lực phát triển web của Shiny.
Dưới đây là một vài ví dụ nơi khung Shiny tỏ ra hữu ích:
Lưu ý: Cần hiểu rằng Shiny cho R và Shiny cho Python là khác nhau. Dù có các khái niệm nền tảng tương tự, cú pháp và thuật ngữ không thể hoán đổi cho nhau. Nếu bạn biết dùng Shiny cho R, bạn sẽ có lợi thế khi học Shiny cho Python, nhưng vẫn cần nắm các khác biệt được đưa vào để phù hợp với Python.
So sánh Shiny với các khung ứng dụng web khác
Khi cân nhắc phát triển ứng dụng web cho khoa học dữ liệu, sẽ hữu ích nếu hiểu Shiny so với các khung khác như thế nào.
Shiny mang đến sự kết hợp độc đáo giữa đơn giản và linh hoạt. Tuy nhiên, phiên bản Python tương đối mới so với các khung khác. Shiny được thiết kế để việc phát triển ứng dụng web trở nên dễ tiếp cận với bất kỳ ai có kiến thức mã Python.
Bên cạnh sự dễ dùng, nó được thiết kế để mở rộng mượt mà, tận dụng bộ nhớ đệm và tính phản ứng chọn lọc để giữ cho khung phản ứng hoạt động hiệu quả. Điều này mang lại lợi thế so với một số khung thiết kế web khác. Cú pháp khai báo và mô hình lập trình phản ứng của Shiny cũng giúp các nhà phân tích dữ liệu dễ tiếp cận, cho phép họ tạo ứng dụng tương tác mà không cần nhiều chuyên môn phát triển web.
Ngược lại, các khung khác như Dash và Streamlit có những điểm mạnh riêng. Dash dùng cú pháp “Pythonic” và nhấn mạnh vào phát triển nhanh. Streamlit vượt trội ở tạo mẫu nhanh với kết xuất tự động nhưng sẽ chạy lại toàn bộ chương trình khi đầu vào thay đổi, dẫn đến kém hiệu quả khi ứng dụng mở rộng. Flask và Django là các khung web mục đích chung, mang đến sự linh hoạt và kiểm soát nhưng thường đòi hỏi chuyên môn phát triển web nhiều hơn. Nếu bạn muốn học những khung này, bạn có thể đọc hướng dẫn Django của DataCamp.
Ngoài các nền tảng phát triển web dựa trên mã, nhà phân tích dữ liệu cũng dùng Tableau và Power BI cho mục đích tạo bảng điều khiển tương tự. Đây là các nền tảng trực quan hóa dữ liệu có công cụ mạnh mẽ nhưng đi kèm chi phí bản quyền. Các chương trình này cũng có tính năng phân tích hạn chế so với viết mã thuần và yêu cầu hầu hết mô hình, phân tích phức tạp phải thực hiện ở nơi khác. Bạn có thể tìm hiểu thêm về Power BI tại DataCamp.
Điều cần thiết là cân nhắc yêu cầu dự án, sở thích ngôn ngữ và nhu cầu tính năng chuyên biệt khi chọn khung phù hợp nhất cho ứng dụng khoa học dữ liệu. Dù các khung khác có điểm mạnh riêng, sự kết hợp độc đáo giữa đơn giản và linh hoạt của Shiny, cộng thêm việc tích hợp với Python, khiến nó trở thành lựa chọn hấp dẫn cho bất kỳ ai muốn nâng tầm dự án khoa học dữ liệu.
Khung
Tính năng chính
Hỗ trợ ngôn ngữ
Độ khó học
Trường hợp sử dụng
Shiny
Đơn giản và linh hoạt
R, Python
Thấp
Ứng dụng và trực quan hóa tương tác
Dash
Cú pháp đậm chất Python
Python
Trung bình
Phát triển nhanh ứng dụng web gọn nhẹ
Streamlit
Tạo mẫu nhanh với kết xuất tự động
Python
Thấp
Tạo mẫu nhanh cho ứng dụng dữ liệu
Flask
Khung web mục đích chung
Python
Trung bình đến Cao
Ứng dụng web đầy đủ chức năng
Django
Khung web Python cấp cao
Python
Trung bình đến Cao
Ứng dụng và dịch vụ web có thể mở rộng
Tableau/Power BI
Nền tảng trực quan hóa dữ liệu
Không áp dụng
Thấp
Trực quan hóa Business Intelligence
Thiết lập môi trường phát triển
Một điểm tuyệt vời của Shiny cho Python là có trình soạn thảo web nơi bạn có thể tạo ứng dụng mà không cần tải xuống hay cài đặt gì. Trình soạn thảo web này đi kèm nhiều ví dụ về ứng dụng và chức năng để bạn bắt đầu và thử ứng dụng Shiny mới.
Tuy nhiên, sẽ đến lúc trong quá trình phát triển bạn muốn chạy Shiny trên thiết bị cục bộ. Phần này sẽ hướng dẫn bạn cài đặt Python, Shiny và các phụ thuộc tương ứng, cũng như các cấu hình cần thiết để môi trường cục bộ hoạt động trơn tru.
Cài đặt Python
Để bắt đầu làm việc với Shiny ngoại tuyến, bạn cần cài đặt Python trên máy tính. Nếu bạn chưa cài Python, hãy truy cập trang chính thức của Python tại python.org và tải phiên bản mới nhất phù hợp với hệ điều hành của bạn. Nếu trước đây bạn đã cài Python, tôi khuyên nên cập nhật lên phiên bản mới nhất để đảm bảo Shiny chạy đúng.
Chạy trình cài đặt đã tải và đánh dấu vào ô "Add Python to PATH" trong quá trình cài đặt. Điều này giúp chạy Python từ dòng lệnh dễ dàng hơn. Mở cửa sổ lệnh hoặc terminal và gõ python --version để xác minh Python đã được cài đặt thành công. Bạn sẽ thấy số phiên bản hiển thị. Bạn cũng có thể chọn cài Môi trường Phát triển Tích hợp (IDE) cho tiện lợi.
Cài đặt Shiny
Khi Python đã sẵn sàng, bạn có thể cài Shiny. Chỉ cần có phiên bản Python mới nhất, bạn có thể mở cửa sổ lệnh hoặc terminal và dùng lệnh sau để cài thư viện Shiny cho Python bằng pip:
Nếu bạn dùng conda thay vì pip, hãy dùng lệnh sau:
Tùy cấu hình hệ thống, Shiny có thể cần thêm các phụ thuộc. Hãy đảm bảo cài đặt các phụ thuộc này theo hướng dẫn trong tài liệu Shiny.
Cấu hình môi trường phát triển
Giờ bạn đã cài đặt Python và Shiny, còn ba chủ đề nữa cần xử lý.
Với môi trường phát triển đã được thiết lập và cấu hình, bạn sẵn sàng bắt tay xây dựng ứng dụng web tương tác với Shiny cho Python.
Tạo một ứng dụng Shiny cơ bản
Hiểu cấu trúc của một ứng dụng Shiny
Một ứng dụng Shiny gồm hai thành phần chính: giao diện người dùng (UI) và logic phía máy chủ (server).
UI xác định giao diện ứng dụng và các thành phần để người dùng tương tác. Mọi thứ người dùng có thể nhìn thấy hoặc tương tác đều thuộc UI, bao gồm các thành phần như thanh trượt, nút bấm và biểu đồ.
UI được tạo bằng các hàm bắt đầu với “ui.”, như ui.input_numeric, ui.input_slider và ui.output_text. Các hàm này được bọc trong một hàm trang, thường là ui.page_fluid, mô tả bố cục cơ bản của trang.
Logic server xác định cách ứng dụng hoạt động và phản hồi trước đầu vào người dùng. Nó gồm các hàm nhận đầu vào từ UI, xử lý chúng và cập nhật các phần tử đầu ra tương ứng. Logic server được tạo bằng hàm server và bao gồm các biểu thức phản ứng để xử lý đầu vào và đầu ra.
Sau khi UI và logic server được định nghĩa, chúng ta kết nối chúng lại trong một ứng dụng hoàn chỉnh, bắt buộc phải đặt tên là “app”.
Hiểu mô hình lập trình phản ứng
Hãy xem ví dụ này từ tài liệu Shiny.
Ví dụ này nhận đầu vào từ một thanh trượt và dùng nó để thực hiện phép tính được hiển thị trong hộp văn bản bên dưới thanh trượt. Ví dụ rất đơn giản này chạy trong trình duyệt đơn giản trên localhost trong VS Code.
Như bạn thấy từ minh họa đơn giản này, “phép màu” của Shiny nằm ở tính tương tác. Động cơ phía sau tính tương tác của Shiny là mô hình lập trình phản ứng. Trong Shiny, chúng ta định nghĩa các biểu thức phản ứng để tạo chuỗi phụ thuộc giữa đầu vào và đầu ra. Khi một đầu vào thay đổi, mọi biểu thức phản ứng và đầu ra phụ thuộc đều tự động được cập nhật. Tính phản ứng này là cốt lõi của Shiny. Bạn có thể đọc thêm chi tiết về tính phản ứng của Shiny tại đây.
Có vài yếu tố then chốt giúp tính phản ứng này khả thi.
Thứ nhất là phép tính phản ứng, hay
reactive.Calc. Đây là phép tính dựa trên một đầu vào. Phép tính này lưu vào bộ nhớ đệm giá trị trả về cho đến khi đầu vào thay đổi, lúc đó nó chạy lại với đầu vào mới. Điều này cho phép ứng dụng phản hồi hiệu quả trước đầu vào người dùng. Tính toán phản ứng dùng decorator @reactive.Calc, như trong ví dụ dưới đây.Một phần tử phản ứng khác là hiệu ứng phản ứng, hay
reactive.Effect. Hiệu ứng phản ứng không trả về giá trị khi chạy. Thay vào đó, nó kích hoạt một hiệu ứng như sửa đổi biến hoặc lưu tệp. Nó cũng chạy lại khi đầu vào thay đổi. reactive.Effect phổ biến nhất là decorator @output, thêm một chuỗi kết quả vào hàng đợi thông điệp, như trong ví dụ dưới đây.Đôi khi, bạn có thể không muốn ứng dụng phản ứng quá tức thời. Ví dụ, nếu bạn có một mô hình tốn nhiều tài nguyên tính toán, bạn có thể muốn chờ đến khi nhiều tham số được cập nhật rồi mới chạy lại mô hình. Trong trường hợp này, reactive.event() hoặc với reactive.isolate() cung cấp các lựa chọn để giới hạn tính phản ứng của ứng dụng.
Bổ sung tính tương tác cho ứng dụng Shiny của bạn
Khi bạn cần một ứng dụng phức tạp hơn
Với logic phản ứng này, Shiny cho Python có thể tạo ứng dụng phức tạp hay đơn giản tùy nhu cầu. Bạn có thể thêm nút chọn, hộp kiểm, thanh trượt, ô nhập văn bản, đồ thị, bản đồ và còn nhiều nữa! Dưới đây là một ví dụ phức tạp hơn một chút từ tài liệu Shiny.
Trong ví dụ này, chúng ta tạo một bản đồ nhiệt của dữ liệu ngẫu nhiên. Có lựa chọn nút radio cho kiểu bản đồ nhiệt mà người dùng muốn xem, và thanh trượt thay đổi dải màu trên bản đồ nhiệt. Posit (công ty tạo ra Shiny) cung cấp thêm nhiều ví dụ trên trang web của họ, bao gồm bản sao Wordle thú vị này.
Ngoài việc tương tác vui mắt, còn rất nhiều ứng dụng hữu ích. Bạn có thể thiết kế một mô hình nhận các yếu tố môi trường như độ mặn và nhiệt độ để dự đoán hiện tượng tảo nở hoa. Một nhà nghiên cứu ngoài thực địa có thể nhập các giá trị hiện tại vào ứng dụng Shiny của bạn và nhận dự đoán theo thời gian thực.
Bạn có thể thiết kế một mô hình hiển thị dự báo doanh thu theo năm nếu đáp ứng các điều kiện nhất định. Khi đó, nhà quản lý có thể dùng ứng dụng của bạn để thử các kịch bản khác nhau bằng cách nhập số lượng bán hàng hoặc đánh dấu các sản phẩm cung cấp, và họ sẽ thấy kết quả dự báo cập nhật ngay trước mắt.
Các trường hợp sử dụng rất đa dạng trên nhiều ngành.
Các loại đầu vào và đầu ra
Shiny cung cấp nhiều lựa chọn đầu vào và đầu ra để đáp ứng nhu cầu trực quan hóa và tương tác dữ liệu khác nhau. Dưới đây là bảng đơn giản về các đầu vào và đầu ra phổ biến trong Shiny cho Python.
Đầu vào
Chức năng
Action Button Input
Cung cấp một nút để người dùng chọn.
Action Link Input
Cho phép người dùng nhấp vào một liên kết.
Text input
Cung cấp ô văn bản cho một dòng văn bản đơn giản.
Numeric input
Cung cấp ô nhập số với mũi tên lên xuống.
Slider input
Tạo một thanh trượt số.
Checkbox input
Tạo một hộp kiểm đơn cho các ứng dụng Đúng/Sai.
Switch input
Tạo một công tắc bật/tắt đơn.
Checkbox group input
Tạo nhiều hộp kiểm cho lựa chọn đa mục.
Select input
Cung cấp menu thả xuống các lựa chọn.
Radio buttons input
Tạo các nút radio, buộc phải chọn một lựa chọn duy nhất.
Text area input
Cung cấp ô văn bản lớn hơn với cửa sổ có thể thay đổi kích thước cho văn bản dài.
Date input
Tạo ô nhập ngày với lịch để người dùng chọn ngày.
Date range input
Về cơ bản là hai ô nhập ngày ghép đôi cho phép nhập một khoảng thời gian.
Password input
Tạo ô văn bản ẩn nội dung nhập.
———————————————————————————————————————
Đầu ra
Chức năng
Text output
Viết văn bản bằng HTML thuần.
Verbatim text output
Viết văn bản trong khối mã monospace.
UI output
Cho phép UI linh hoạt hơn dựa trên đầu vào người dùng.
Plot output
Tạo biểu đồ bằng các thư viện Python phổ biến, như matplotlib.
Table output
Tạo bảng đơn giản với tiêu đề cột.
Data Frame / Grid output
Tạo bảng có thể tùy chỉnh với bộ lọc, đường lưới và giới hạn số hàng.
Để xem danh sách đầy đủ các thành phần của Shiny, hãy xem trang này.
Tùy biến giao diện người dùng trong Shiny cho Python
Bố cục và chủ đề
Shiny cung cấp sự linh hoạt trong tùy biến giao diện người dùng thông qua các bố cục khác nhau bằng hàm trang. Hàm trang được dùng phổ biến nhất là page_fluid(), cung cấp thiết kế đáp ứng phù hợp với nhiều kích thước màn hình. Một bố cục cố định bề ngang, phù hợp với ứng dụng có yêu cầu thiết kế cụ thể, có thể thực hiện bằng hàm trang page_fixed().
Shiny tận dụng HTML để tạo ứng dụng web của mình. Điều này có nghĩa bạn có thể dùng chủ đề CSS để tạo kiểu cho ứng dụng. Việc thêm CSS tùy chỉnh cho phép bạn điều chỉnh diện mạo ứng dụng Shiny để phù hợp với sở thích thẩm mỹ hoặc nhận diện thương hiệu doanh nghiệp.Đầu trang
Triển khai tiện ích và phần mở rộng tùy chỉnh
Shiny hỗ trợ ipywidgets cho nhiều đồ thị tương tác, bản đồ, trực quan 3D và truyền thông đa phương tiện. Nó cũng có một số chức năng cho các widget Python khác có thể lưu dưới dạng tệp HTML. Bằng cách tích hợp các tiện ích tùy chỉnh, bạn có thể điều chỉnh ứng dụng Shiny theo trường hợp sử dụng cụ thể và tạo trải nghiệm người dùng cá nhân hóa hơn.
Triển khai ứng dụng Shiny cho Python của bạn
Giải thích các tùy chọn triển khai khác nhau
Khi bạn đã tạo một ứng dụng Shiny hấp dẫn, bạn có thể sẽ muốn chia sẻ nó với đối tượng rộng hơn, cho hồ sơ cá nhân hoặc cho khách hàng, bằng cách triển khai lên web. Shiny hỗ trợ nhiều tùy chọn triển khai để đáp ứng các nhu cầu khác nhau.
Triển khai cục bộ: Bạn có thể triển khai ứng dụng Shiny trên máy chủ cục bộ, giúp nó khả dụng trong tổ chức của bạn hoặc cho một nhóm người dùng cụ thể.
Nền tảng đám mây: Các nền tảng đám mây mang đến giải pháp có thể mở rộng và dễ truy cập để triển khai ứng dụng Shiny. Những lựa chọn phổ biến gồm:
ShinyLive: Shiny cung cấp cách mới để chạy ứng dụng Shiny ngay trong trình duyệt web mà không cần máy chủ riêng chạy Python. Nó kết hợp WebAssembly và pyodide để cho phép ứng dụng Shiny chạy mà không cần cài đặt Python hay Shiny trên máy của bạn. Nền tảng này giới hạn các gói Python sẵn có và có thể không an toàn bằng các nền tảng khác, nhưng là cách tốt để chia sẻ nhanh mã không nhạy cảm.
Kết luận
Shiny cho Python là một nhân tố mới đầy hứng khởi trong lĩnh vực phát triển ứng dụng web. Việc sử dụng nó có thể nâng cấp đáng kể dự án dữ liệu của bạn mà không cần đầu tư thời gian lớn vào học phát triển web. Nếu bạn muốn thử Shiny cho R, hãy xem khóa học nền tảng Shiny của DataCamp và khóa học về tạo bảng điều khiển với R Shiny. Khi đã nắm vững các kiến thức cơ bản, hãy luyện tập kỹ năng mới với một case study Shiny!