Data visualization framework (Phần 2): Tăng hiệu suất xử lý dữ liệu với Taipy

Taipy là một Python framework có khả năng tùy biến giao diện cao, được đánh giá là có hiệu suất tốt trong xử lý và hiển thị dữ liệu, đặc biệt có thể giải quyết những hạn chế mà Streamlit chưa xử lý được.

Upload image

Đọc thêm: Data Visualization Framework (Phần 1): Tạo ứng dụng siêu tốc với Streamlit

Tiếp tục series Data Visualization Framework, bài viết trước đề cập đến Streamlit và những vấn đề Streamlit gặp phải như hạn chế khả năng tùy biến giao diện, không phù hợp để offload việc xử lý dữ liệu cho worker hoặc hệ thống khác, không hỗ trợ client-side rendering. Vậy các framework khác xử lý vấn đề đó như thế nào? Chúng ta sẽ cùng tìm hiểu về Taipy, một framework khá hot trong năm 2024.

Taipy là gì?

Taipy là một Python framework cho phép lập trình viên xây dựng data app. Là framework sinh sau đẻ muộn, mục tiêu của Taipy là nhắm vào các dự án doanh nghiệp với yêu cầu cao về hiệu suất và khả năng tùy biến, nhưng vẫn giữ tính đơn giản.

Mục tiêu ban đầu của Taipy là multi-scenario pipeline-driven application. Ngoài việc cung cấp công cụ trực quan hóa cho data app, Taipy được thiết kế để cho phép người dùng tùy biến và chạy data pipeline ngay trên giao diện của người dùng. Ví dụ, với bộ dữ liệu cho trước, sau khi lọc theo khoảng thời gian, người dùng có thể tùy chỉnh các tác vụ như: chọn column, chọn phép tính thống kê (sum, avg, median), tùy chỉnh thời gian số lượng history data để chạy các hàm ML prediction, chọn loại đồ thị. Sau khi cài đặt, hệ thống sẽ xử lý dữ liệu và hiển thị kết quả ngay trên giao diện người dùng.

Bài viết này nằm trong series Data Visualization nên sẽ tập trung vào phần hiển thị dữ liệu hơn là về phần tùy biến data pipeline.

Đặc trưng của Taipy

Vì đều là những framework hữu ích để xây dựng ứng dụng trực quan hóa dữ liệu nên Taipy cũng có nhiều điểm tương đồng với Streamlit. Tuy nhiên, để hiểu rõ hơn về thế mạnh của Taipy, chúng ta sẽ đi sâu vào những điểm khác biệt chính của nó so với Streamlit.

Kiến trúc event-driven

Taipy sử dụng kiến trúc event-driven, kiến trúc thường thấy trong các web framework hiện nay, giúp tăng hiệu suất xử lý với những thay đổi trên giao diện như tương tác của người dùng, thay đổi dữ liệu, hay các event bên ngoài khác.

Hầu hết các component đều sẽ bao gồm callbacks, cho phép lập trình viên định nghĩa function xử lý tương ứng với hành vi người dùng. Khi người dùng tương tác với giao diện, hệ thống sẽ không xử lý lại toàn bộ giao diện, mà chỉ chạy những callback function và render lại những phần giao diện bị thay đổi.

def on_slider(state):
    state.dataset_date = dataset[dataset["index"] >= state.n_date]
    state.display_date = dataset.loc[state.n_date, 'ts']

page = """
# Atekco traffic

# <{n_date}|slider|min={date_min}|max={date_max} |on_change=on_slider | >
# <{dataset_date} | chart | type=line|x=ts|y=total_users width=50% | >
"""

Kiến trúc Taipy framework được thiết kế trên nền tảng của Flask. Khi chạy ứng dụng Taipy, về bản chất, chúng ta đang khởi động một ứng dụng Flask. Flask là một web framework rất nổi tiếng của Python, cung cấp công cụ xây dựng web app ở mức độ production-ready. Bằng cách tận dụng các component và kiến trúc của Flask, Taipy được thừa hưởng các sức mạnh từ sự ổn định, khả năng scale và sự hỗ trợ đông đảo từ cộng đồng Flask.

Hiệu suất xử lý dữ liệu tốt

Tại sao data visualization app lại cần xử lý dữ liệu?

Data app thông thường đều đã có bước xử lý dữ liệu trước khi hiển thị. Tuy nhiên, người dùng luôn có nhu cầu tương tác với biểu đồ, nên có nhiều dữ liệu cần phải được tính toán khi hiển thị (ví dụ đơn giản là sum, average, đếm theo filter trên giao diện). Khi logic phức tạp hơn, hệ thống cần xử lý qua nhiều bước, tham khảo một lượng lớn data trong quá khứ hoặc từ nhiều nguồn khác nhau, chạy ML model, rồi phản hồi kết quả ngay lập tức cho người dùng. Điều này dẫn đến nhu cầu data visualization app không đơn thuần là nơi chỉ hiển thị dữ liệu, mà phải là nơi có hiệu suất xử lý dữ liệu tốt để đáp ứng nhu cầu về các pipeline phức tạp cho người dùng.

Trong Taipy định nghĩa một vài concept như entities, data nodes, tasks, pipelines, và scenarios. Taipy chia flow xử lý thành nhiều module nhỏ hơn để quản lý, độc lập với nhau, giao tiếp với nhau bằng input và output đã được định nghĩa từ trước. Nhờ đó, Taipy có thể chuyển giao việc xử lý các tác vụ nặng trong một module cho nhiều công cụ bên ngoài khác như Apache Spark (cho việc xử lý phân phối dữ liệu) hay Tensorflow (cho Machine Learning). Taipy cũng cung cấp những tính năng để người dùng có thể tùy biến pipeline này ngay trên giao diện tùy thuộc vào nhu cầu của họ.

Khi nói đến môi trường production, Streamlit thường không được lựa chọn sử dụng cũng là do performance không tốt. Performance ở đây bao gồm cả hai việc là xử lý dữ liệu và hiển thị dữ liệu.

Visualization chart

Khi người dùng tương tác với giao diện, Taipy có cơ chế chỉ thay đổi một phần UI thay vì phải load lại toàn bộ. Điều này có được thông qua xử lý dữ liệu ở server và Javascript ở máy người dùng. Khi người dùng truy cập vào trang web, dữ liệu sẽ được xử lý ở server và gửi về trình duyệt người dùng để hiển thị. Khi người dùng tương tác (ví dụ như filter), Taipy sẽ ưu tiên xử lý ở ngay trên máy người dùng, nếu cần thiết mới gửi dữ liệu về server. Điều này đặc biệt cải thiện tốc độ xử lý ở những trường hợp đơn giản do không cần thông qua đường truyền internet.

Demo bên dưới sử dụng Taipy để lọc dữ liệu theo ngày với lượng dữ liệu của 650 records. Biểu đồ cũng thay đổi rất mượt theo thao tác filter trên thanh trượt.

Upload image

Thao tác với Taipy

Trường hợp sử dụng Streamlit với usecase tương tự, mỗi lần người dùng kéo nhẹ thanh trượt thì màn hình sẽ bị đơ, status hiển thị running, và giao diện sẽ chuyển dần thành màu trắng. Người dùng hầu như không thể tương tác với biểu đồ.

Upload image

Thao tác với Streamlit

Taipy hỗ trợ thuật toán là Decimator để tăng hiệu suất hiển thị biểu đồ. Ví dụ trong đồ thị time-series với một lượng lớn dữ liệu, thuật toán này sẽ chỉ giữ lại những điểm có ý nghĩa nhất trên đồ thị (mặc định là 300 điểm) và bỏ đi tất cả những điểm khác. Điều này giúp giảm workload cho việc hiển thị biểu đồ ở trình duyệt người dùng, cũng như giảm dung lượng data cần truyền trên internet. Phần dữ liệu còn lại sẽ được lazy load tới trình duyệt của người dùng sau đó để hỗ trợ tương tác ở client-side.

Upload image

Taipy dùng thuật toán Decimator để tăng hiệu suất hiển thị biểu đồ

Cache

Nếu như Streamlit chỉ hỗ trợ cache ở mức function, Taipy cho phép kiểm soát ở mức dữ liệu cụ thể nào sẽ được phép cache. Điều này sẽ làm giảm dung lượng của cache, vì lập trình viên sẽ chỉ cần cache những dữ liệu cần thiết, và tăng tốc độ truy xuất cache nhanh hơn.

Ngoài việc cho phép cache ở memory và ổ đĩa, Taipy cũng hỗ trợ sử dụng các dịch vụ bên ngoài để làm cache như Redis, Memcache.

Tùy biến giao diện

Về giao diện, nếu như ở Streamlit, layout được viết bằng script (st.columns, st.container, st.sidebar), chia dashboard thành những phần theo cột bằng nhau, việc tùy biến giao diện không hề đơn giản (ví dụ như thay đổi độ rộng giữa mỗi cột). Trong khi đó, Taipy cung cấp việc quản lý các component độc lập và có thể tái sử dụng ở nhiều giao diện khác nhau, tương tự như các web framework hiện đại khác. Lập trình viên cũng dễ dàng tùy biến component này bằng CSS hoặc dễ dàng tạo ra component mới cho riêng mình.

Trong Streamlit, layout chỉ có thể tạo bằng cách define các column, có thể merge các column với nhau. Tuy nhiên, để tùy biến chiều cao, chiều rộng cho từng column cũng không phải đơn giản.

col1, col2 = st.columns(2)

with col1:
    st.write("DataFrame:")
    st.write(df)

with col2:
    st.write("Pie Chart:")
    fig = px.pie(df, values='second column', names='first column')
    st.plotly_chart(fig, use_container_width=True)

Taipy cung cấp việc tạo layout bằng markdown, so với HTML thì markdown đơn giản và dễ dùng hơn. Điều này giúp lập trình viên tập trung vào nội dung cần hiển thị nhiều hơn và dễ tùy biến hơn các script như trong Streamlit. Lập trình viên cũng dễ dàng sử dụng CSS vào file markdown này để tùy biến giao diện phù hợp với nhu cầu hệ thống.

page = """
<layout columns=1 1>
# DataFrame: <{data} table |>
# Pie chart: <{data} chart | type=pie | values=second column | labels=first column | width=100% height=50% |>
"""

License

Taipy là open-source framework, với license dễ chịu bao gồm:

  • Taipy component: MIT license
  • Taipy framework: Apache 2.0

Lập trình viên có thể thoải mái sử dụng framework này cho các dự án thương mại, hầu như không gặp bất kỳ vấn đề về pháp lý nào.

Taipy cũng cung cấp phiên bản enterprise, thêm những tính năng cho dự án enterprise như security, component tích hợp với hệ thống enterprise khác và các công cụ để tối ưu hóa hiệu suất.

Khuyết điểm

Vấn đề lớn nhất khi tiếp cận Taipy là độ trưởng thành còn hạn chế. Do là một framework mới (ra mắt khoảng 2 năm), Taipy có cộng đồng và hệ sinh thái rất nhỏ khi so sánh với các đối thủ như Streamlit hay Dash. Điều này sẽ dẫn đến nhiều hạn chế khi tìm các thư viện của bên thứ ba, tutorial hay cụ thể là việc hỗ trợ generate code từ AI.

Với cách tiếp cận component-based thay vì declarative như Streamlit, Taipy cho phép tái sử dụng component và logic trên nhiều giao diện khác nhau. Tương tự với dataflow và việc quản lý state, Taipy cũng có những engine tích hợp sẵn để tự động quản lý luồng và dữ liệu giữa các component. Tuy nhiên, vì vẫn cần phải manual config ở nhiều nơi, nên so với Streamlit, Taipy yêu cầu lập trình viên cần phải có kiến thức tương đối về lập trình web.

Kết luận

Taipy là một Python framework rất mới và mạnh mẽ để lập trình viên tạo data app. Taipy thích hợp với những dự án production, yêu cầu phải xử lý lượng lớn dữ liệu và pipeline phức tạp ở bước visualization. Taipy sẽ phù hợp nhất với những dự án cho phép người dùng tùy biến data pipeline ngay trên giao diện. Vì là Python framework, được xây dựng trên nền tảng của Flask, Taipy cũng sở hữu nhiều lợi ích từ thư viện, cộng đồng của cả Python và Flask.

Tuy nhiên, vì là một framework mới ra mắt, cộng đồng và hệ sinh thái không lớn, người dùng cần cân nhắc đến những vấn đề như hỗ trợ hạn chế từ cộng đồng, ít tích hợp với thư viện và plugin của các bên khác. Điều này dẫn đến những giới hạn trong tính năng và khả năng tùy biến của hệ thống.

Atekco - Home for Authentic Technical Consultants