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
TechnologyAIEducation
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
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
.
- 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.md
và lưu trữ mã nguồn trên GitHub để chia sẻ dự án.
Chat with this Video
AI-PoweredHi! I can answer questions about this video "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)". What would you like to know?
Chat is based on the transcript of this video and may not be 100% accurate.