Mục lục
Ứng dụng của DataFrame
Phân tích dữ liệu
Sắp xếp và Top-N
Nhóm và tổng hợp
Bảng xoay và bảng chéo
Thị giác hóa dữ liệu
Ứng dụng của DataFrame
Phân tích dữ liệu
Sau khi chuẩn bị dữ liệu, bước tiếp theo là phân tích dữ liệu để trích xuất thông tin hữu ích. Một trong những phương pháp phổ biến là sử dụng các thống kê mô tả như trung bình, độ lệch chuẩn, giá trị cực đại, cực tiểu. Ví dụ sau minh họa cách tính toán các chỉ số này:
import numpy as np
import pandas as pd
diem_so = np.random.randint(50, 101, (5, 3))
ten_sinh_vien = ('Quan Vũ', 'Chu Du', 'Triệu Tử Đệ', 'Tào Tháo', 'Lữ Mông')
mon_hoc = ('Văn học', 'Toán học', 'Ngoại ngữ')
df = pd.DataFrame(data=diem_so, columns=mon_hoc, index=ten_sinh_vien)
df
Kết quả:
Văn học Toán học Ngoại ngữ
Quan Vũ 96 72 73
Chu Du 72 70 97
Triệu Tử Đệ 74 51 79
Tào Tháo 100 54 54
Lữ Mông 89 100 88
Sử dụng các phương thức như mean(), max(), min(), std() để tính toán:
Tính điểm trung bình từng môn học:
df.mean()
Kết quả:
Văn học 86.2
Toán học 69.4
Ngoại ngữ 78.2
dtype: float64
Tính điểm trung bình từng sinh viên:
df.mean(axis=1)
Kết quả:
Quan Vũ 80.333333
Chu Du 79.666667
Triệu Tử Đệ 68.000000
Tào Tháo 69.333333
Lữ Mông 92.333333
dtype: float64
Sắp xếp và Top-N
Để sắp xếp dữ liệu, sử dụng phương thức sort_values() với tham số by chỉ định cột cần sắp xếp và ascending xác định thứ tự. Ví dụ sau sắp xếp theo điểm Văn học giảm dần:
df.sort_values(by='Văn học', ascending=False)
Kết quả:
Văn học Toán học Ngoại ngữ
Tào Tháo 100 54 54
Quan Vũ 96 72 73
Lữ Mông 89 100 88
Triệu Tử Đệ 74 51 79
Chu Du 72 70 97
Để lấy Top-N giá trị, sử dụng nlargest() và nsmallest():
Lấy 3 sinh viên có điểm Văn học cao nhất:
df.nlargest(3, 'Văn học')
Kết quả:
Văn học Toán học Ngoại ngữ
Tào Tháo 100 54 54
Quan Vũ 96 72 73
Lữ Mông 89 100 88
Nhóm và tổng hợp
Đọc dữ liệu bán hàng từ file Excel:
df = pd.read_excel('Doanh_so_2020.xlsx')
df.head()
Kết quả:
Ngay_ban Khu_vuc Kenh_ban So_don_hang Thuong_hieu Gia_ban So_luong
0 2020-01-01 TP.HCM TikTok 182894-455 Thỏ Trắng 99 83
1 2020-01-01 TP.HCM Shopee 205635-402 Thỏ Trắng 219 29
2 2020-01-01 TP.HCM Lazada 205654-021 Thỏ Trắng 169 85
3 2020-01-01 TP.HCM Lazada 205654-519 Thỏ Trắng 169 14
4 2020-01-01 TP.HCM Shopee 377781-010 Cá Sấu Xám 249 61
Tính doanh thu theo khu vực:
df['Doanh_thu'] = df['Gia_ban'] * df['So_luong']
df.groupby('Khu_vuc').Doanh_thu.sum()
Kết quả:
Khu_vuc
TP.HCM 11610489
Hà Nội 12477717
Hải Phòng 1767301
Đà Nẵng 895463
HCMC 1617949
Nha Trang 537079
Đồng Nai 687862
Cần Thơ 10178227
Name: Doanh_thu, dtype: int64
Bảng xoay và bảng chéo
Sử dụng pivot_table() để tạo bảng xoay:
pd.pivot_table(df, index='Khu_vuc', values='Doanh_thu', aggfunc='sum')
Kết quả:
Doanh_thu
Khu_vuc
TP.HCM 11610489
Hà Nội 12477717
Hải Phòng 1767301
Đà Nẵng 895463
HCMC 1617949
Nha Trang 537079
Đồng Nai 687862
Cần Thơ 10178227
Tạo bảng chéo:
sales_area, sales_month, sales_amount = df['Khu_vuc'], df['Thang'], df['Doanh_thu']
pd.crosstab(
index=sales_area, columns=sales_month, values=sales_amount, aggfunc='sum'
).fillna(0).applymap(int)
Thị giác hóa dữ liệu
Vẽ biểu đồ cột so sánh doanh thu theo khu vực:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'Arial Unicode MS'
temp = pd.pivot_table(df, index='Khu_vuc', values='Doanh_thu', aggfunc='sum')
temp.plot(figsize=(8, 4), kind='bar')
plt.xticks(rotation=0)
plt.show()
Vẽ biểu đồ tròn:
temp.sort_values(by='Doanh_thu', ascending=False).plot(
figsize=(6, 6), kind='pie', y='Doanh_thu',
autopct='%.2f%%', pctdistance=0.8,
wedgeprops=dict(linewidth=1, width=0.35)
)
plt.legend(loc='center')
plt.show()