Xây Dựng Ứng Dụng Web Tự Động Hóa Phân Tích Dữ Liệu Với GenAI và Python (Hướng Dẫn Chi Tiết)

By Nguyen Ha DS

Share:

Key Concepts

  • Ứng dụng web tự động hóa phân tích dữ liệu: Ứng dụng cho phép người dùng tương tác với dữ liệu thông qua hỏi đáp và trực quan hóa.
  • Mô hình ngôn ngữ lớn (LLM): Sử dụng LLM (ví dụ: GPT-3.5 Turbo) để phân tích và trả lời câu hỏi về dữ liệu.
  • Trực quan hóa dữ liệu: Tạo biểu đồ và dashboard tương tự Tableau mà không cần cài đặt thêm công cụ.
  • Langchain: Thư viện Python hỗ trợ xây dựng ứng dụng LLM, đặc biệt là các agent.
  • Streamlit: Framework Python để tạo ứng dụng web tương tác một cách nhanh chóng.
  • Agent: Công cụ cho phép LLM mở rộng khả năng, ví dụ: tương tác với pandas DataFrame.
  • Pick worker: Thư viện cho phép tạo các biểu đồ tương tác trực tiếp trên Streamlit.
  • Cookiecutter: Công cụ tạo cấu trúc dự án Python chuẩn.
  • Virtual environment: Môi trường ảo Python để quản lý các thư viện riêng biệt cho từng dự án.
  • Git: Hệ thống quản lý phiên bản mã nguồn.

1. Giới thiệu và mục tiêu dự án

  • Mục tiêu: Xây dựng ứng dụng web cho phép người dùng:
    • Hỏi đáp trực tiếp với bộ dữ liệu (tương tự ChatGPT-4).
    • Trực quan hóa dữ liệu (tương tự Tableau).
  • Lợi ích:
    • Tự động hóa quy trình phân tích dữ liệu.
    • Công cụ hỗ trợ công việc hàng ngày.
    • Dự án showcase khi xin việc trong ngành data science/phát triển phần mềm.
  • Kết quả:
    • Dự án lưu trên GitHub với mô tả chi tiết (README).
    • Ứng dụng web cho phép hỏi đáp và trực quan hóa dữ liệu.

2. Thiết lập môi trường và cấu trúc dự án

  • Công cụ: VS Code (hoặc IDE tương tự).
  • Cấu trúc dự án: Sử dụng Cookiecutter data science để tạo cấu trúc thư mục chuẩn:
    • data: Chứa dữ liệu.
    • notebooks: Chứa file Jupyter Notebook.
    • src: Chứa mã nguồn Python.
    • models: Chứa các mô hình.
    • README.md: Mô tả dự án.
  • Tạo môi trường ảo: Sử dụng python -m venv venv để tạo môi trường ảo.
  • Kích hoạt môi trường ảo: Sử dụng source venv/bin/activate (Linux/macOS) hoặc venv\Scripts\activate (Windows).
  • Cài đặt thư viện: Sử dụng pip install để cài đặt các thư viện cần thiết:
    • langchain: Hỗ trợ LLM.
    • streamlit: Tạo ứng dụng web.
    • pandas: Xử lý dữ liệu DataFrame.
    • matplotlib: Vẽ biểu đồ.
    • streamlit_pckworker: Tạo biểu đồ tương tác.
    • python-dotenv: Đọc file .env.
  • Lưu trữ danh sách thư viện: Lưu danh sách các thư viện đã cài đặt vào file requirements.txt.
  • Quản lý mã nguồn với Git:
    • Tạo repository trên GitHub.
    • Khởi tạo Git trong thư mục dự án: git init.
    • Thêm các file vào staging area: git add ..
    • Commit các thay đổi: git commit -m "Initial commit".
    • Kết nối với repository trên GitHub: git remote add origin <URL>.
    • Đẩy mã nguồn lên GitHub: git push -u origin master.
  • File .gitignore: Loại bỏ các file không cần thiết khỏi việc upload lên Git (ví dụ: thư mục venv, file chứa API key).

3. Xây dựng ứng dụng Streamlit

  • Cấu trúc thư mục:
    • src/: Chứa mã nguồn chính.
    • src/pages/: Chứa các trang (page) của ứng dụng Streamlit.
      • src/pages/Chat_with_Data.py: Trang hỏi đáp với dữ liệu.
      • src/pages/Interactive_Visualization_Tool.py: Trang trực quan hóa dữ liệu.
  • Trang "Chat with Data":
    • Thư viện: streamlit, pandas, matplotlib, python-dotenv, langchain.
    • Load API key: Sử dụng dotenv.load_dotenv() để đọc API key từ file .env.
    • Logger: Tạo logger đơn giản để ghi log.
    • Load LLM:
      • Hàm load_llm(model_name): Load mô hình LLM từ OpenAI (GPT-3.5 Turbo, GPT-4).
      • Thiết lập temperature (độ sáng tạo) và max_tokens (giới hạn số lượng token).
    • Giao diện Streamlit:
      • st.set_page_config(): Thiết lập tiêu đề, icon, layout cho trang web.
      • st.sidebar.file_uploader(): Cho phép người dùng upload file CSV.
      • st.header(), st.write(): Hiển thị tiêu đề và thông báo chào mừng.
    • Chat history: Sử dụng st.session_state để lưu trữ lịch sử trò chuyện.
    • Đọc file CSV: Sử dụng pandas.read_csv() để đọc file CSV đã upload.
    • Tạo agent:
      • Sử dụng create_pandas_dataframe_agent() từ Langchain.
      • Truyền LLM, DataFrame, agent_type="zero-shot-react-description", allow_code=True, verbose=True.
    • Xử lý câu hỏi (query):
      • st.text_input(): Cho phép người dùng nhập câu hỏi.
      • st.button(): Tạo nút để gửi câu hỏi.
      • st.spinner(): Hiển thị hiệu ứng loading khi LLM đang xử lý.
      • Hàm process_query(agent, query):
        • Gọi agent để xử lý câu hỏi: response = agent.run(query).
        • Kiểm tra xem response có chứa code vẽ biểu đồ (plt) hay không.
        • Nếu có:
          • Lấy code từ response["intermediate_steps"].
          • Chạy code bằng hàm execute_code(code, df).
          • Hiển thị biểu đồ bằng st.pyplot(fig).
          • Hiển thị code bằng st.markdown().
        • Nếu không:
          • Hiển thị câu trả lời trực tiếp.
        • Lưu câu hỏi và câu trả lời vào chat history.
    • Hiển thị chat history:
      • Hàm display_chat_history(history): Hiển thị lịch sử trò chuyện.
      • Sử dụng st.markdown() để định dạng câu hỏi và câu trả lời.
  • Trang "Interactive Visualization Tool":
    • Thư viện: streamlit, streamlit_pckworker.
    • Giao diện Streamlit:
      • st.set_page_config(): Thiết lập tiêu đề, icon, layout cho trang web.
      • st.write(): Hiển thị thông báo chào mừng.
    • Render Pick worker:
      • Sử dụng streamlit_pckworker.st_pckworker(df) để tạo giao diện trực quan hóa dữ liệu tương tác.

4. Hàm hỗ trợ

  • load_llm(model_name): Load mô hình ngôn ngữ lớn từ OpenAI.
    • Hỗ trợ GPT-3.5 Turbo và GPT-4.
    • Thiết lập temperature và max_tokens.
  • execute_code(code, df): Chạy code Python để vẽ biểu đồ.
    • Sử dụng compile() và exec() để thực thi code.
    • Trả về đối tượng matplotlib.figure.Figure.
  • display_chat_history(history): Hiển thị lịch sử trò chuyện.
    • Sử dụng st.markdown() để định dạng câu hỏi và câu trả lời.

5. Kết luận

  • Ứng dụng LLM hữu ích: Xây dựng ứng dụng LLM không chỉ là đồ chơi mà còn có thể giúp ích trong việc phân tích dữ liệu.
  • Tiết kiệm chi phí: Sử dụng ứng dụng này rẻ hơn so với việc sử dụng GPT-4o trực tiếp.
  • Trực quan hóa dữ liệu: Cung cấp chức năng trực quan hóa dữ liệu tương tự Tableau mà không cần cài đặt thêm công cụ.
  • Khuyến khích tự xây dựng: Bất kỳ ai cũng có thể xây dựng ứng dụng tương tự cho riêng mình.
  • Lưu trữ và chia sẻ dự án: Sửa file README.md và lưu trữ mã nguồn trên GitHub để chia sẻ dự án.

Chat with this Video

AI-Powered

Load the transcript when you're ready to chat so the initial page stays lighter.

Ready to summarize another video?

Summarize YouTube Video