🚢 Ứng Dụng Titanic Dự Đoán Tỉ Lệ Survive Bằng Streamlit
Chào mừng các bạn đến với bài viết này! Hôm nay, tôi rất vui được chia sẻ với cộng đồng lập trình viên một dự án thú vị của mình: Ứng dụng Titanic Survival Predictor được xây dựng bằng Streamlit và Scikit-Learn. Ứng dụng này không chỉ giúp bạn khám phá dữ liệu của vụ tàu Titanic mà còn dự đoán khả năng sống sót dựa trên các đặc điểm mà bạn chọn. Hãy cùng tôi tìm hiểu chi tiết hơn về dự án này!
🌟 Giới thiệu về ứng dụng
Ứng dụng Titanic Survival Predictor cho phép người dùng nhập các thông số như giới tính, độ tuổi, và lớp vé để dự đoán khả năng sống sót. Đây là một dự án lý tưởng cho những ai muốn biến một kịch bản phân tích dữ liệu thành một ứng dụng web tương tác mà không cần phải biết HTML, CSS hay JavaScript.
✨ Demo và mã nguồn
Trước khi đi vào chi tiết, bạn có thể thử nghiệm ứng dụng ngay lập tức!
- 🚀 Thử ứng dụng trực tuyến
- 👨💻 Khám phá mã nguồn trên GitHub
(Nếu bạn thích dự án, hãy để lại một sao ⭐ trên repo nhé!)
🛠️ Công nghệ sử dụng
Dự án này rất đơn giản nhưng mạnh mẽ nhờ vào các công cụ được sử dụng:
- Streamlit: Dùng để xây dựng giao diện người dùng web một cách nhanh chóng và dễ dàng chỉ với Python.
- Pandas: Dùng để thao tác và làm sạch dữ liệu của vụ tàu Titanic.
- Scikit-learn: Sử dụng để huấn luyện mô hình
RandomForestClassifier, một lựa chọn tuyệt vời cho các bài toán phân loại. - Plotly & Seaborn: Dùng để tạo các đồ thị và hình ảnh trực quan.
🔬 Cách hoạt động của ứng dụng
Dự án được chia thành ba bước chính:
1. Khám Phá và Phân Tích Dữ Liệu (EDA)
Phần đầu tiên của ứng dụng tập trung vào phân tích dữ liệu. Tôi sử dụng Plotly và Seaborn để tạo ra các đồ thị trả lời những câu hỏi như:
- Giới tính có ảnh hưởng đến khả năng sống sót không?
- Lớp vé có vai trò gì không?
- Độ tuổi phân bố như thế nào giữa những người sống sót và không sống sót?
Ví dụ mã cho đồ thị phân loại sống sót theo giới tính:
python
import plotly.express as px
gender_survival = df.groupby('Sex')['Survived'].value_counts(normalize=True).unstack().fillna(0)
gender_survival = (gender_survival * 100).round(2)
fig = px.pie(names=['Không sống sót', 'Sống sót'],
values=gender_survival.loc[selected_gender],
title=f"Tỉ lệ sống sót theo giới tính: {selected_gender}")
st.plotly_chart(fig)
2. Huấn Luyện Mô Hình Machine Learning
Tôi chọn RandomForestClassifier vì tính ổn định và hiệu suất tốt ngay khi sử dụng lần đầu. Quá trình này bao gồm:
- Làm sạch dữ liệu: Thay thế các giá trị thiếu (ví dụ: sử dụng độ tuổi trung bình cho các trường hợp thiếu).
- Feature Engineering: Chuyển đổi các biến phân loại (như giới tính hoặc cảng lên tàu) thành các giá trị số.
- Huấn luyện: Chia dữ liệu thành tập huấn luyện và kiểm tra, sau đó huấn luyện mô hình trên tập huấn luyện.
python
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']
X = df[features]
y = df['Survived']
X = pd.get_dummies(X, columns=['Sex'], drop_first=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
3. Tạo Giao Diện Dự Đoán
Tại đây, sức mạnh của Streamlit sẽ được thể hiện. Tôi sử dụng thanh bên (st.sidebar) để tạo một biểu mẫu nơi người dùng có thể nhập dữ liệu của riêng mình (lớp, giới tính, độ tuổi, v.v.).
python
st.sidebar.header("Dự đoán sống sót của bạn:")
pclass = st.sidebar.selectbox('Lớp vé', [1, 2, 3])
sex = st.sidebar.selectbox('Giới tính', ['nam', 'nữ'])
age = st.sidebar.slider('Độ tuổi', 0, 100, 25)
if st.sidebar.button("Dự đoán sống sót"):
user_input = pd.DataFrame(...)
prediction = model.predict(user_input)
if prediction[0] == 1:
st.sidebar.success("Chúc mừng! Bạn có thể đã sống sót!")
else:
st.sidebar.error("Rất tiếc... Bạn có thể đã không sống sót.")
🏁 Kết luận
Dự án này là một cơ hội tuyệt vời để kết hợp phân tích dữ liệu, machine learning và phát triển web một cách dễ tiếp cận. Streamlit vẫn luôn khiến tôi ấn tượng với khả năng tạo ra các ứng dụng dữ liệu tương tác chỉ trong thời gian ngắn.
Tôi rất mong nhận được phản hồi từ các bạn! Các bạn nghĩ sao? Có những hình ảnh hoặc chức năng nào mà bạn muốn thấy được thêm vào không? Cảm ơn vì đã đọc!
⚙️ Thực hành tốt và mẹo
- Làm sạch dữ liệu là một bước quan trọng và không thể bỏ qua.
- Khả năng mở rộng: Cân nhắc sử dụng các mô hình khác để so sánh hiệu suất.
🚧 Những cạm bẫy thường gặp
- Chưa tối ưu hóa mô hình cho các tham số tốt nhất.
- Không kiểm tra mô hình trên tập dữ liệu không thấy.
🏎️ Mẹo hiệu suất
- Sử dụng
GridSearchCVđể tối ưu hóa siêu tham số. - Xem xét việc giảm kích thước dữ liệu nếu cần thiết để cải thiện tốc độ xử lý.
❓ Câu hỏi thường gặp
Q: Tôi cần biết những gì để bắt đầu?
A: Bạn cần có kiến thức cơ bản về Python và các thư viện như Pandas, Scikit-Learn, và Streamlit.
Q: Ứng dụng này có thể chạy trên máy tính cá nhân không?
A: Có, bạn chỉ cần cài đặt các thư viện cần thiết và chạy ứng dụng trong môi trường Python.
Hy vọng bạn sẽ thích dự án này và tìm thấy nhiều giá trị trong việc học hỏi từ nó!