0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Lộ Trình Hoàn Chỉnh Seaborn Trong 2 Ngày

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

• 5 phút đọc

Lộ Trình Hoàn Chỉnh Seaborn Trong 2 Ngày

Mục tiêu: Nắm bắt các nguyên tắc cơ bản của Seaborn trong phân tích dữ liệu với bộ dữ liệu tips. Hướng dẫn này bao gồm thiết lập, giải thích, ví dụ mã, cạm bẫy, điểm kiểm tra và một dự án nhỏ. Cuối cùng, bạn sẽ có kỹ năng trực quan hóa sẵn sàng cho công việc.

Mục tiêu chính:

  • Bộ dữ liệu: sns.load_dataset("tips")
  • Tập trung: Phân tích khám phá dữ liệu (EDA) • Kể chuyện • Hình ảnh rõ ràng
  • Kết quả: Kỹ năng vẽ đồ thị sẵn sàng cho công việc

Lưu ý: Đừng ghi nhớ. Đối với mỗi chủ đề:

  • Chạy ví dụ
  • Điều chỉnh 2–3 tham số
  • Viết một hiểu biết bằng tiếng Việt đơn giản

Yêu cầu:

  • Python ≥ 3.9
  • Thư viện: pandas, numpy, matplotlib, seaborn
  • IDE: Jupyter/Colab hoặc bất kỳ IDE Python nào

0) Thiết lập nhanh

python Copy
pip install seaborn matplotlib pandas numpy
python Copy
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

sns.set_theme(style="whitegrid", context="notebook")
tips = sns.load_dataset("tips")
tips.head()

Cột trong bộ dữ liệu:
total_bill, tip, sex, smoker, day, time, size


📅 Ngày 1 — Nền tảng & EDA chính

Mục tiêu: Hiểu API của Seaborn, khám phá phân phối, so sánh các danh mục và quét các mối quan hệ theo cặp nhanh chóng.

1) Cơ bản về Seaborn: Mức độ Figure vs Mức độ Axes

  • Mức độ Axes → ví dụ: sns.scatterplot (vẽ trên Axes của Matplotlib, trả về Axes)
  • Mức độ Figure → ví dụ: sns.catplot, sns.pairplot (quản lý figure/layout của riêng nó)
  • Tham số phổ biến: data=, x=, y=, hue=, style=, size=

2) Phân phối đơn biến

Sử dụng những điều này để hiểu hình dạng, trung bình, độ phân tán và ngoại lệ:

  • histplot — biểu đồ histogram (+ tùy chọn KDE)
  • kdeplot — ước lượng mật độ hạt nhân
  • ecdfplot — ECDF thực nghiệm (tuyệt vời cho giá trị trung bình & phân vị)
  • countplot — tần số cho các biến phân loại
python Copy
# Biểu đồ Histogram & KDE
sns.histplot(tips, x="total_bill", bins=20, kde=True)
plt.title("Phân phối Tổng Bill")
plt.show()

# ECDF
sns.ecdfplot(tips, x="tip")
plt.title("ECDF của Tip")
plt.show()

# Count
sns.countplot(data=tips, x="day")
plt.title("Số lượng theo Ngày")
plt.show()

Khi nào sử dụng: kiểm tra độ tin cậy, tính bất đối xứng, chọn biến đổi, phát hiện ngoại lệ.

3) So sánh Danh mục ↔ Số liệu

So sánh phân phối giữa các nhóm:

  • boxplot — trung vị, IQR, râu, ngoại lệ
  • violinplot — phân phối đầy đủ thông qua KDE
  • boxenplot — dành cho mẫu lớn
  • stripplot / swarmplot — điểm dữ liệu thô
  • barplot / pointplot — trung bình/CI được tổng hợp
python Copy
# Box vs Violin
fig, ax = plt.subplots(1,2, figsize=(10,4))
sns.boxplot(data=tips, x="day", y="total_bill", ax=ax[0])
sns.violinplot(data=tips, x="day", y="tip", ax=ax[1])
ax[0].set_title("Tổng Bill theo Ngày")
ax[1].set_title("Tip theo Ngày")
plt.tight_layout(); plt.show()

4) Mối quan hệ Số liệu ↔ Số liệu

Bắt đầu với biểu đồ phân tán, có thể thêm hồi quy.

python Copy
# Biểu đồ phân tán cơ bản
sns.scatterplot(data=tips, x="total_bill", y="tip")
plt.title("Tổng Bill vs Tip")
plt.show()

5) Quét Nhanh Theo Cặp

python Copy
sns.pairplot(tips, hue="sex", diag_kind="hist")
plt.suptitle("Mối quan hệ Theo Cặp (tips)", y=1.02)
plt.show()

Điểm kiểm tra (Ngày 1 xong): Bạn có thể đọc phân phối, so sánh nhóm và xem các xu hướng theo cặp. Viết 3 hiểu biết từ bộ dữ liệu.


📅 Ngày 2 — Đa biến, Facets, Tương quan & Tạo kiểu

Mục tiêu: Thêm faceting, tương quan, bảng màu và tạo hình ảnh sẵn sàng cho bài thuyết trình.

6) Faceting & Nhiều Đồ Thị Nhỏ

Chia dữ liệu thành các subplot theo danh mục.

python Copy
# Facet theo smoker
sns.catplot(data=tips, x="day", y="tip", hue="sex", col="smoker", kind="bar")
plt.suptitle("Tips theo Ngày (phân theo Smoker)", y=1.02)
plt.show()

7) Tương quan & Bảng Nhiệt

python Copy
corr = tips[["total_bill","tip","size"]].corr()
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm", square=True)
plt.title("Tương quan (tips)")
plt.show()

8) Xu hướng Thời gian/Thứ tự

python Copy
avg = tips.groupby("size", as_index=False)["tip"].mean()
sns.lineplot(data=avg, x="size", y="tip")
plt.title("Tip Trung Bình theo Kích Thước Nhóm")
plt.show()

9) Tạo kiểu, Bảng màu & Bố cục

python Copy
sns.set_theme(style="whitegrid", context="talk", palette="deep")

ax = sns.scatterplot(data=tips, x="total_bill", y="tip", hue="sex")
ax.set_title("Tips vs Tổng Bill")
ax.set_xlabel("Tổng Bill ($)")
ax.set_ylabel("Tip ($)")
sns.despine()
plt.tight_layout(); plt.show()

10) Chú giải, Chú thích & Lưu trữ

python Copy
ax = sns.regplot(data=tips, x="total_bill", y="tip")
ax.annotate("Tips cao hơn với hóa đơn cao hơn",
            xy=(40,7), xytext=(25,8.5),
            arrowprops=dict(arrowstyle="->", color="white"))
ax.legend_.remove() if ax.legend_ else None
plt.tight_layout()
plt.savefig("tips_scatter.png", dpi=300, bbox_inches="tight", transparent=True)
plt.show()

11) Cheat-Sheet: Mức độ Axes vs Mức độ Figure

  • Mức độ Axes: scatterplot, lineplot, histplot, kdeplot, boxplot, violinplot, heatmap, regplot
  • Mức độ Figure: relplot, catplot, jointplot, pairplot, lmplot

12) Cạm bẫy Thường gặp

  • Quá tải dữ liệu → sử dụng alpha, hexbin, hoặc kdeplot
  • Đừng dựa vào mặc định → luôn đặt tiêu đề/nhãn
  • Đối với các nhóm → ưu tiên violin/box + strip hơn là trung bình thanh
  • Giữ ngữ nghĩa màu sắc đồng nhất

Điểm kiểm tra (Ngày 2 xong): Bạn có thể phân đoạn, so sánh xu hướng đa biến, tạo kiểu cho rõ ràng và xuất bản.


Dự án Nhỏ (Sản phẩm)

Câu hỏi: Những yếu tố nào thúc đẩy tips cao hơn?

Bước:

  1. Đơn biến: phân phối của total_bill, tip
  2. Nhóm: tip theo day, sex, smoker, time
  3. Mối quan hệ: total_billtip (thêm hue & hồi quy)
  4. Bảng nhiệt tương quan cho các biến số
  5. Phân đoạn theo smoker/time
  6. Báo cáo: 5 hiểu biết + 2 biểu đồ cho LinkedIn/portfolio
python Copy
import numpy as np
tips = sns.load_dataset("tips").assign(tip_pct=lambda d: d["tip"] / d["total_bill"] * 100)

# 1) Phân phối
sns.histplot(tips, x="tip_pct", bins=20, kde=True)
plt.title("Phân Phối % Tip"); plt.show()

Danh sách Kiểm tra Thực hành

  • Vẽ biểu đồ hist+KDE cho total_bill; mô tả tính bất đối xứng
  • So sánh tip theo day sử dụng box+strip
  • Biểu đồ phân tán total_bill vs tip với hue=sex, style=smoker
  • Tạo pairplot với hue=time
  • Xây dựng bảng nhiệt tương quan; viết 2 diễn giải
  • Phân đoạn biểu đồ thanh theo smokertime
  • Xuất một hình ảnh với 300 DPI có nền trong suốt

Tham khảo Nhanh

API thường dùng nhất:

  • scatterplot, lineplot, histplot, kdeplot, ecdfplot
  • boxplot, violinplot, stripplot, barplot, pointplot
  • pairplot, jointplot, relplot, catplot
  • heatmap, clustermap, regplot

Tạo kiểu:

  • sns.set_theme(style, palette, context)
  • sns.despine(), plt.tight_layout()
  • Bảng màu: deep, muted, pastel, bright, dark, colorblind

Viết cho: Nivesh Bansal — Hành trình Phân tích Dữ liệu, Ngày 10. Bạn có thể sao chép bất kỳ khối mã nào và thực hành trực tiếp.

Chúc bạn vẽ đồ thị vui vẻ!

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