0
0
Lập trình
Admin Team
Admin Teamtechmely

🚢 Ứng Dụng Titanic Dự Đoán Tỉ Lệ Survive Bằng Streamlit

Đăng vào 1 tháng trước

• 4 phút đọc

🚢 Ứ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 StreamlitScikit-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!

🛠️ 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 Copy
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 Copy
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 Copy
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ó!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào