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ặcvenv\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ụcvenv, 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).
- Hàm
- 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.
- Sử dụng
- 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().
- Lấy code từ
- 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.
- Gọi agent để xử lý câu hỏi:
- 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.
- Hàm
- Thư viện:
- 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.
- Sử dụng
- Thư viện:
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
temperaturevà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.
- Sử dụng
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.
- Sử dụng
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.mdvà lưu trữ mã nguồn trên GitHub để chia sẻ dự án.
Chat with this Video
AI-PoweredLoad the transcript when you're ready to chat so the initial page stays lighter.
Related Videos

How the hometown humiliation of Putin marks a turning point for Ukraine | DW News
DW News

Shocking video shows moment paramedics are hit by Israel in 'double-tap' strike
Sky News

Inside Jeffrey Epstein's Network of Power
Bloomberg Originals

Putin Xi, To Catch a Castro, Red Carpet Rebellion • FRANCE 24 English
FRANCE 24 English

Trump's supporters furious over Trump smartphone scam.
ABC News In-depth

Nvidia Crushes Earnings again — What Jensen Huang sees next for AI
CGTN America

Throwing out the first pitch for the Rockies for STEM Day!
Sick Science!