You are on page 1of 30

Bài 5

Trực quan hóa dữ liệu với


Seaborn
Khóa học: Phân tích dữ liệu với Python
Nội dung
1. Giới thiệu
2. Biểu đồ xu hướng
3. Biểu đồ phân bố
4. Biểu đồ tần số
5. Biểu đồ heatmap
6. Biểu đồ boxplot
7. Biểu đồ cặp
 
Giới thiệu
• Matplotlib còn có rất nhiều thiếu sót.
• API của Matplotlib là low-level
• đòi hỏi rất nhiều tham số, xử lý
• không được thiết kế để sử dụng với Pandas DataFrames

Seaborn ra đời giải quyết vấn đề trên

• Seaborn nên được coi là một tool bổ sung cho matplotlib


chứ không phải là một sự thay thế cho nó.
• Cài đặt:
pip install seaborn
Giới thiệu
• Tính năng của Seaborn:
• Một số các themes được dựng sẵn để tạo styles.
• Công cụ để chọn bảng màu tạo ra các đồ thị đẹp
• Các hàm để hiển thị các phân bố đơn và hai biến hoặc để so sánh
chúng giữa các tập con của dữ liệu
• Các công cụ phù hợp và biểu diễn các model hồi quy tuyến tính
• Các hàm biểu diễn các ma trận dữ liệu và sử dụng các thuật toán
phân cụm
• Cho phép ta dễ dàng xây dựng các hình ảnh phức tạp qua
High-level abstractions cho cấu trúc grid của các plots.
Giới thiệu
• Bộ dữ liệu sẽ được sử dụng trong bài này làm ví dụ là “tips”.
Đây là bộ dữ liệu thu thập thông tin tiền tips cho người phục
vụ đồ ăn trong nhà hàng theo các thông tin như giới tính,
tổng bill, có hút thuốc hay không,…
# khai báo thư viện và set style
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.set(style="whitegrid" , palette="hsv")
# load bộ dữ liệu tips có sẵn trong seaborn:
tips = sns.load_dataset( "tips")
Biểu đồ xu hướng
Biểu đồ xu hướng là một loại biểu đồ phân tích dữ liệu Hồi quy
tuyến tính.

# vẽ biểu đồ xu hướng giữa tổng bill và tiền tip


sns.lmplot(x="total_bill", y="tip", data=tips)

Đường thẳng xuyên qua biểu đồ là đường thẳng phù hợp nhất với xu hướng tiền tip mà khách
hàng thường đưa ra đối với tổng hóa đơn được tạo.
Các điểm dữ liệu mà chúng ta nhìn thấy ở phía trên cùng bên phải nằm cách xa dòng này được
gọi là các điểm ngoại lai trong tập dữ liệu.
Biểu đồ xu hướng
Người hút thuốc tip nhiều hay ít?

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips)

Người hút thuốc có thể nhìn thấy hiển thị với màu xanh dương hào phóng hơn một
chút nhưng không nhất quán vì các điểm dữ liệu được dàn trải khá mơ hồ.
Biểu đồ xu hướng
Thay đổi kiểu đánh dấu dữ liệu

sns.lmplot(x="total_bill",
y="tip", hue="smoker",
data=tips, markers=["o", "x"],
palette="Set1", legend=False)
Biểu đồ xu hướng
Tách người hút thuốc và không hút thuốc ra 2 biểu đồ

sns.lmplot(x="total_bill",
y="tip",
col="smoker",
data=tips)
Biểu đồ phân bố
Mô tả sự phân bố dữ liệu số cho một hoặc nhiều nhóm bằng
cách sử dụng đường cong mật độ.
Chiều rộng của mỗi đường cong tương ứng với tần số gần
đúng của các điểm dữ liệu trong mỗi vùng.
Ví dụ:
biểu đồ phân bố cho thuộc tính
total_bill:
sns.violinplot(y = tips["total_bill"],
palette="coolwarm")
Biểu đồ phân bố
Violin plot được nhóm theo biến 1 biến phân loại là ngày

sns.violinplot(x="day",
y="total_bill",
data=tips)
Biểu đồ phân bố
Violin plot được nhóm theo biến 2 biến phân loại

sns.violinplot(x="day",
y="total_bill",
hue="smoker",
data=tips,
palette="muted")
Biểu đồ phân bố
Violin plot được chia 2 phần để so sánh giữa các biến

sns.violinplot(x="day",
y="total_bill",
hue="smoker",
data=tips,
palette="muted”,
split=True )
Biểu đồ phân bố
Kiểm soát thứ tự các violin plot bằng cách truyền một thứ tự
nhãn cụ thể

sns.violinplot(x="day",
y="total_bill",
hue="smoker",
data=tips,
order=["Dinner",
"Lunch"] )
Biểu đồ tần số
Biểu đồ tần số hiển thị số lượng quan sát trong mỗi nhóm
phân loại bằng cách sử dụng các thanh.
Ví dụ:
Hiển thị tần số của mỗi loại giới tính trong bộ dữ liệu

sns.countplot(x ='sex’,
data = tips)
Biểu đồ tần số
Hiển thị số lượng giá trị cho hai biến phân loại và sử dụng
tham số hue

sns.countplot(x ='sex’,
hue = "smoker",
data = tips)
Biểu đồ tần số
Vẽ các thanh theo chiều ngang

sns.countplot(y ='sex’,
hue = "smoker",
data = tips)
Biểu đồ heatmap
Heat map là một loại biểu đồ một biểu diễn đồ họa hai chiều
của dữ liệu trong đó các giá trị riêng lẻ chứa trong ma trận
được biểu diễn dưới dạng màu sắc.
Để biểu diễn các giá trị phổ biến hơn hoặc các hoạt động cao
hơn, các màu sáng hơn được sử dụng và để biểu thị các giá trị
hoạt động hoặc ít phổ biến hơn, các màu tối hơn được ưu tiên.
Biểu đồ heatmap
Tạo dữ liệu ngẫu nhiên theo phân phối đều để vẽ:
import numpy as np
uniform_data = np.random.rand(10, 12)

Vẽ heat map:

sns.heatmap(uniform_data)
Biểu đồ heatmap

Thay đổi giới hạn các màu sắc:

sns.heatmap(uniform_data,
vmin=0,
vmax=1)
Biểu đồ boxplot
• Box plot biểu diễn trực quan của các nhóm dữ liệu số được
mô tả thông qua các phần tư của chúng.
• Boxplot cũng được sử dụng để phát hiện giá trị ngoại lai
trong tập dữ liệu như đã giới thiệu ở bài 4.
• Nó biểu diễn phân bố của dữ liệu một cách hiệu quả với
một hộp đơn giản và râu và cho phép chúng ta so sánh dễ
dàng giữa các nhóm.
• Boxplot biểu diễn dữ liệu mẫu bằng cách sử dụng phần
trăm thứ 25, 50 và 75. Những phần trăm này còn được gọi
là phần tư dưới, trung vị và phần tư trên.
Biểu đồ boxplot
Mỗi box plot gồm 5 phần:
• Minimum

• Phần tư thứ nhất (25%)

• Trung vị (50%)

• Phần tư thứ ba (75%)

• Maximum
Biểu đồ boxplot
Vẽ biểu đồ box plot cho thuộc tính “total_bills”

sns.boxplot(x=
tips["total_bill"])
Biểu đồ boxplot
Vẽ box plot theo chiều dọc được nhóm theo một biến phân
loại

sns.boxplot(x="day",
y="total_bill",
data=tips )
Biểu đồ boxplot
Vẽ box plot theo chiều dọc được nhóm theo hai biến phân
loại:

sns.boxplot(x="day",
y="total_bill",
hue="smoker",
data=tips,
palette="Set3")
Biểu đồ boxplot
Vẽ box plot theo chiều dọc được nhóm theo hai biến phân
loại khi một số nhóm bị thiếu:

sns.boxplot(x="day",
y="total_bill",
hue="time",
data=tips,
linewidth=2.5)
Biểu đồ cặp
•  
Biểu đồ cặp

sns.pairplot(tips,
hue ='sex')
Biểu đồ cặp

sns.pairplot(tips,
hue ='day')
Tóm tắt
Qua bài học này, chúng ta đã tìm hiểu những kiến thức sau:
• Seaborn là gì, có ưu điểm gì so với matplotlib
• Các loại biểu đồ: biểu đồ xu hướng, biểu đồ phân bố, biểu
đồ tần số, biểu đồ heatmap, biểu đồ boxplot, biểu đồ cặp.

You might also like