---
title: "Streamlit: Công cụ phát triển Ứng dụng Web Data Science"
description: "Streamlit là một thư viện Python mã nguồn mở được thiết kế để giúp các data scientist, machine learning engineer xây dựng ứng dụng web dễ dàng"
canonical: "https://200lab.io/blog/streamlit-la-gi"
published: "2025-03-10T04:01:10Z"
updated: "2026-08-21T07:17:43Z"
authors: ["Hướng nội"]
tags: ["AI", "Data"]
reading_minutes: 6
access: "public"
---

## 1. Streamlit là gì?

Streamlit là một thư viện Python mã nguồn mở được thiết kế để giúp các developer, data scientist, và machine learning engineer xây dựng các ứng dụng web tương tác mà không cần kỹ năng về front-end.

Ra mắt vào năm 2019, Streamlit nhanh chóng trở thành một công cụ yêu thích của cộng đồng nhờ sự đơn giản và linh hoạt trong việc phát triển **data apps** (ứng dụng làm việc với dữ liệu).

![](https://assets.200lab.io/images/2025/03/10/streamlit-la-gi-1-e9be5a8d017cb2936038.webp)

Streamlit mang lại nhiều lợi ích cho quy trình phát triển:

- **Dễ sử dụng:** Không cần phải biết HTML, CSS hay JavaScript – chỉ cần dùng Python.
- **Tốc độ phát triển vượt trội:** Từ khâu lên ý tưởng đến hoàn thiện ứng dụng chỉ trong vài giờ.
- **Tương tác thời gian thực:** Ứng dụng tự động cập nhật (hot-reloading) ngay khi bạn thay đổi mã nguồn.
- **Tích hợp mạnh mẽ với Python:** Hỗ trợ tốt cho các thư viện quen thuộc như Pandas, NumPy, Matplotlib, Plotly, TensorFlow, v.v.
- **Triển khai dễ dàng:** Đưa ứng dụng lên web với Streamlit Cloud hoặc trên các nền tảng như Heroku, AWS.
- **Hỗ trợ từ cộng đồng:** Cộng đồng lớn mạnh với nhiều components và extensions sẵn có, giúp mở rộng tính năng của ứng dụng.

Với Streamlit, bất kỳ ai cũng có thể tạo ra những ứng dụng trực quan để trình bày kết quả và ý tưởng của mình một cách ấn tượng, tất cả chỉ bằng một vài dòng Python.

## 2. Hướng dẫn Cài đặt và Sử dụng Streamlit

### 2.1 Cài đặt Streamlit

Các bạn mở terminal và chạy câu lệnh sau

```
pip install streamlit
```

Kiểm tra cài đặt, lệnh này sẽ mở một ứng dụng demo trong trình duyệt của bạn.

```
streamlit hello
```

### 2.2 Tạo ứng dụng với Streamlit

Tạo file `app.py` với nội dung sau:

```
import streamlit as st
import pandas as pd
import numpy as np

st.title('Ứng dụng Streamlit đầu tiên của tôi')

st.write("Đây là một ứng dụng Streamlit đơn giản. Hãy cùng thêm một biểu đồ.")

chart_data = pd.DataFrame(
    np.random.randn(20, 3),
    columns=['A', 'B', 'C'])

st.line_chart(chart_data)

if st.checkbox('Hiển thị dữ liệu thô'):
    st.subheader('Dữ liệu thô')
    st.write(chart_data)

```

Chạy ứng dụng:

```
streamlit run app.py
```

### 2.2 Các component chính trong Streamlit

#### 2.2.1 Hiển thị dữ liệu

```
# Hiển thị text
st.text("Đây là văn bản thông thường")
st.markdown("**Đây là văn bản Markdown**")
st.title("Tiêu đề")
st.header("Header")
st.subheader("Subheader")
st.code("print('Hello, Streamlit!')", language="python")

# Hiển thị dữ liệu
st.dataframe(df)  # DataFrame với định dạng tương tác
st.table(df)      # DataFrame dạng tĩnh
st.json(data)     # Hiển thị JSON

```

#### 2.2.2 Các widget tương tác

```
# Widgets cơ bản
name = st.text_input("Tên của bạn:")
age = st.number_input("Tuổi:", min_value=0, max_value=120)
happy = st.checkbox("Bạn có hài lòng không?")

# Lựa chọn
option = st.selectbox("Chọn một option:", ["Option 1", "Option 2", "Option 3"])
options = st.multiselect("Chọn nhiều options:", ["A", "B", "C", "D"])

# Sliders
values = st.slider("Chọn một khoảng:", 0, 100, (25, 75))
value = st.slider("Chọn một giá trị:", 0, 100, 50)

# Buttons
if st.button("Click me"):
    st.write("Bạn đã click vào button!")

```

#### 2.2.3 Hiển thị biểu đồ

```
# Biểu đồ tích hợp
st.line_chart(data)
st.bar_chart(data)
st.area_chart(data)

# Sử dụng matplotlib
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 9])
st.pyplot(fig)

# Plotly
import plotly.express as px

fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
st.plotly_chart(fig)

```

## 3. Xây dựng ứng dụng phân tích dữ liệu đơn giản

Dưới đây là một ví dụ về ứng dụng phân tích bộ dữ liệu Iris:

```
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Tiêu đề ứng dụng
st.title('Phân tích Bộ dữ liệu Iris')

# Tải dữ liệu
@st.cache_data
def load_data():
    return sns.load_dataset('iris')

df = load_data()

# Sidebar với các tùy chọn
st.sidebar.header('Tùy chọn')
species = st.sidebar.multiselect(
    'Chọn loài hoa:',
    options=df['species'].unique(),
    default=df['species'].unique()
)

# Lọc dữ liệu
mask = df['species'].isin(species)
filtered_df = df[mask]

# Hiển thị dữ liệu
st.subheader('Dữ liệu Iris')
st.write(filtered_df)

# Thống kê cơ bản
st.subheader('Thống kê cơ bản')
st.write(filtered_df.describe())

# Vẽ biểu đồ
st.subheader('Biểu đồ')
chart_type = st.sidebar.selectbox(
    'Chọn loại biểu đồ:',
    ['Scatter', 'Histogram', 'Box Plot']
)

if chart_type == 'Scatter':
    x_axis = st.sidebar.selectbox('Chọn trục X:', df.columns[:-1])
    y_axis = st.sidebar.selectbox('Chọn trục Y:', df.columns[1:-1])

    fig, ax = plt.subplots(figsize=(10, 6))
    for species_name in species:
        species_df = df[df['species'] == species_name]
        ax.scatter(species_df[x_axis], species_df[y_axis], label=species_name, alpha=0.7)

    ax.set_xlabel(x_axis)
    ax.set_ylabel(y_axis)
    ax.legend()
    st.pyplot(fig)

elif chart_type == 'Histogram':
    feature = st.sidebar.selectbox('Chọn đặc trưng:', df.columns[:-1])
    bins = st.sidebar.slider('Số lượng bins:', 5, 30, 15)

    fig, ax = plt.subplots(figsize=(10, 6))
    for species_name in species:
        species_df = df[df['species'] == species_name]
        ax.hist(species_df[feature], bins=bins, alpha=0.5, label=species_name)

    ax.set_xlabel(feature)
    ax.legend()
    st.pyplot(fig)

elif chart_type == 'Box Plot':
    feature = st.sidebar.selectbox('Chọn đặc trưng:', df.columns[:-1])

    fig, ax = plt.subplots(figsize=(10, 6))
    sns.boxplot(x='species', y=feature, data=filtered_df, ax=ax)
    st.pyplot(fig)

```

## 4. Kết luận

Streamlit mang đến một cách tiếp cận mới, linh hoạt và dễ dàng hơn để xây dựng các ứng dụng web liên quan đến dữ liệu. Nhờ cú pháp đơn giản và trực quan, các developer có thể tập trung hoàn toàn vào việc xử lý dữ liệu và phát triển logic nghiệp vụ, mà không cần lo lắng về phần giao diện front-end.

Hy vọng bài viết này sẽ giúp bạn bắt đầu khám phá Streamlit và mở ra nhiều ý tưởng sáng tạo. Chúc bạn thành công trong việc xây dựng những ứng dụng dữ liệu ấn tượng!

## Đọc thêm

- [Self Evolution: cách để Grok Bot tự cải tiến liên tục từ kinh nghiệm làm việc và người dùng](https://200lab.io/blog/grok-bot-self-evolution.md): Self Evolution giúp Grok Bot rút bài học từ việc hằng ngày, nhưng bot chỉ học khi có ghi log kèm bằng chứng và thay đổi rủi ro vẫn chờ bạn duyệt.
- [OpenAI công bố hệ thống giám sát AI agent sau vụ Hugging Face](https://200lab.io/blog/openai-ai-agent-monitoring-system.md): Giám sát AI agent ở OpenAI có 4 lớp, dựng sau vụ agent thoát sandbox. Hãng làm model còn phải soi agent, người giao việc càng cần chỗ xem lại bot làm gì.
- [Cách đặt Grok Bot gửi bản tin cuối ngày nhắc việc cho chủ shop](https://200lab.io/blog/grok-bot-daily-digest-routine.md): Bản tin cuối ngày giúp người bán một mình gom việc còn treo. Với routine của Grok Bot, bot chỉ đọc bảng và nhắc việc theo lịch, chủ shop vẫn tự quyết định.
- [Dùng Grok Bot UI UX Pro Max làm landing page shop nến tiếng Việt](https://200lab.io/blog/ui-ux-pro-max-bot-candle-shop-landing-page.md): Grok Bot UI UX Pro Max dựng landing page shop nến; mình kiểm tra từng bước design system, contrast, font tiếng Việt và rút ra câu nhắn chỉnh bot cho mỗi bước.
- [Dùng AI trả lời đánh giá xấu đúng chính sách, không cam kết vượt mức](https://200lab.io/blog/reply-bad-reviews-with-ai.md): Trả lời đánh giá xấu dễ khiến shop cam kết vượt chính sách. Cách khắc phục: chép chính sách đổi trả vào skill, bot chỉ soạn nháp, chủ shop duyệt rồi mới đăng.
- [Mọi bài viết chủ đề AI](https://200lab.io/blog/tags/ai.md)

Toàn bộ nội dung: https://200lab.io/llms.txt
