Trực quan hóa dữ liệu là một bước quan trọng trong quá trình phân tích và trình bày dữ liệu. Trước khi thực hiện trực quan hóa, chúng ta cần đọc dữ liệu và tạo DataFrame bằng Pandas, một thư viện mã nguồn mở rất phổ biến cho việc phân tích dữ liệu. Pandas hỗ trợ nhiều định dạng tệp như CSV, Excel, SQL, HTML và nhiều định dạng khác.
Sau khi tạo DataFrame, Pandas cung cấp nhiều tính năng trực quan hóa dữ liệu với các chức năng tích hợp và tích hợp với Matplotlib và Seaborn. Bài viết này sẽ hướng dẫn cách tạo và trực quan hóa dữ liệu với các loại biểu đồ như biểu đồ cột, biểu đồ dòng, biểu đồ tròn, biểu đồ phân tán và biểu đồ hộp.
Đọc dữ liệu và tạo DataFrame
Trước khi trực quan hóa dữ liệu, chúng ta cần phải đọc dữ liệu và tạo DataFrame. Pandas hỗ trợ nhiều định dạng tệp như CSV, Excel, SQL, HTML và nhiều định dạng khác.
Để đọc tệp CSV, chúng ta sử dụng hàm read_csv(). Ví dụ, ta có tệp data.csv với nội dung như sau:
name,age,gender
John,25,Male
Alice,30,Female
Bob,20,Male
Chúng ta có thể đọc nội dung tệp CSV và tạo DataFrame như sau:
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
Đầu ra sẽ là:

Trực quan hóa dữ liệu
Pandas cung cấp nhiều tính năng trực quan hóa dữ liệu với các chức năng tích hợp và tích hợp với Matplotlib và Seaborn. Để cài đặt các thư viện này dùng lệnh sau:
pip install matplotlib
pip install seaborn
Biểu đồ cột
Để tích hợp Matplotlib Chúng ta có thể sử dụng hàm `plot()` để tạo biểu đồ cột. Ví dụ, chúng ta có DataFrame như sau:
import pandas as pd
import matplotlib.pyplot as plt
data = {'name': ['John', 'Alice', 'Bob'],
'age': [25, 30, 20],
'gender': ['Male', 'Female', 'Male']}
df = pd.DataFrame(data)
df.plot(kind='bar', x='name', y='age', rot=0)
plt.show()
Đầu ra sẽ là biểu đồ cột hiển thị tuổi của các người trong bảng:

Để sử dụng thư viện Seaborn để vẽ biểu đồ cột tương tự như đoạn code trên:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = {'name': ['John', 'Alice', 'Bob'],
'age': [25, 30, 20],
'gender': ['Male', 'Female', 'Male']}
df = pd.DataFrame(data)
sns.barplot(x='name', y='age', data=df)
sns.set_style("whitegrid")
plt.show()
Kết quả đầu ra sẽ là:

Ở đây, chúng ta sử dụng hàm sns.barplot() để vẽ biểu đồ cột dựa trên dữ liệu trong df. Hàm sns.set_style() được sử dụng để đặt kiểu phông chữ cho biểu đồ.
Tuy nhiên, hàm plt.show() được sử dụng để hiển thị các biểu đồ do Matplotlib tạo ra, bao gồm cả biểu đồ do Seaborn tạo ra. Vì vậy, để sử dụng hàm plt.show(), chúng ta vẫn cần phải import Matplotlib và khai báo biến plt.
Biểu đồ dòng
Chúng ta có thể sử dụng hàm plot() với tham số kind='line' hoặc lineplot() với tham số err_style='band'để tạo biểu đồ dòng Ví dụ:
...
df = pd.DataFrame(data)
# sử dụng thư viện Matplotlib
df.plot(kind='line', x='name', y='age', rot=0)
# sử dụng thư viện seaborn
sns.lineplot(x='name', y='age', data=df, err_style='band')
plt.show()
Đầu ra sẽ là biểu đồ dòng hiển thị tuổi của các người trong bảng:


Biểu đồ tròn
Chúng ta có thể sử dụng hàm plot() với tham số kind='pie' trong thưu viện Matplotlib hoặc pie() của thư viện Matplotlib nhưng sử dụng các tham số của Seaborn để tùy chỉnh biểu đồ để tạo biểu đồ tròn. Ví dụ:
...
df = pd.DataFrame(data)
# sử dụng thư viện Matplotlib
df.plot(kind='pie', y='age', labels=df['name'], autopct='%1.1f%%', startangle=90)
# sử dụng thư viện seaborn
plt.pie(df['age'], labels=df['name'], autopct='%1.1f%%', startangle=90)
plt.show()
Đầu ra sẽ là biểu đồ tròn hiển thị tỉ lệ tuổi của các người trong bảng:


Biểu đồ phân tán
Chúng ta có thể sử dụng hàm plot() với tham số kind='scatter' trong thư viện Matplotlib hoặc hàm scatterplot() để tạo biểu đồ phân tán, data là dữ liệu được truyền vào, x và y là tên các trục. Ví dụ:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = {'x': [1, 2, 3, 4, 5],
'y': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
# sử dụng thư viện Matplotlib
df.plot(kind='scatter', x='x', y='y')
# sử dụng thư viện Seaborn
sns.scatterplot(data=df, x='x', y='y')
plt.show()
Đầu ra sẽ là biểu đồ phân tán hiển thị sự phân bố của các điểm `(x, y)`:

Biểu đồ hộp
Chúng ta có thể sử dụng hàm `plot()` với tham số `kind=’box’` để tạo biểu đồ hộp trong Matplotlib hoặc phương thức boxplot() của Seaborn để vẽ biểu đồ boxplot thay vì sử dụng plot() của Matplotlib. Ví dụ:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
df = pd.DataFrame(data).T
# sử dụng thư viện Matplotlib
df.plot(kind='box')
# sử dụng thư viện Seaborn
sns.boxplot(data=df)
plt.show()
Đầu ra sẽ là biểu đồ hộp hiển thị phân bố của các giá trị trong các mảng:


Biểu đồ thập phân
Chúng ta có thể sử dụng hàm plot() với tham số kind='hexbin' để tạo biểu đồ thập phân hoặc hàm jointplot() của Seaborn để vẽ biểu đồ thập phân thay vì sử dụng plot() của Matplotlib. Ví dụ:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
data = np.random.randn(1000, 2)
df = pd.DataFrame(data, columns=['x', 'y'])
# sử dụng thư viện Matplotlib
df.plot(kind='hexbin', x='x', y='y', gridsize=25)
# sử dụng thư viện Seaborn
sns.jointplot(data=df, x='x', y='y', kind='hex', gridsize=25)
plt.show()
Đầu ra sẽ là biểu đồ thập phân hiển thị các khu vực có mật độ dữ liệu cao:


Kết luận
Trong bài viết này, chúng ta đã học cách sử dụng pandas để đọc và trực quan hóa dữ liệu. Chúng ta đã học cách tạo các loại biểu đồ khác nhau, bao gồm biểu đồ cột, biểu đồ dòng, biểu đồ tròn, biểu đồ phân tán, biểu đồ hộp và biểu đồ thập phân. Chúng ta đã cũng đã học cách tích hợp pandas với Matplotlib và Seaborn để tạo biểu đồ phù hợp với định dạng yêu cầu của mình.
Hy vọng bạn đã tìm được nội dung hữu ích từ bài viết này. Cảm ơn bạn đã đọc đến đây!
Học bài tiếp theo: Chinh phục Pandas: Tối ưu hiệu suất
Bài trước: Nắm bắt kỹ thuật phân tích dữ liệu chuỗi thời gian với Python Pandas
Quay về trang chủ của khoá học: Python Pandas – Thao tác và phân tích dữ liệu
