Chào mọi người,
Dạo gần đây mình có làm việc với một dự án cần tổng hợp dữ liệu từ nhiều file Excel khác nhau để tạo ra các biểu đồ trực quan. Thay vì làm thủ công từng file rồi copy-paste vào file báo cáo chính, mình đã tìm hiểu và áp dụng Python để tự động hóa quá trình này. Thấy khá hiệu quả nên mình muốn chia sẻ lại cho anh em trong diễn đàn tham khảo.
Vấn đề gặp phải:
- Dữ liệu nằm rải rác ở nhiều file Excel (ví dụ: báo cáo bán hàng theo từng chi nhánh).
- Số lượng file nguồn lớn, làm thủ công tốn rất nhiều thời gian và dễ sai sót.
- Cần tạo ra các biểu đồ (cột, đường, tròn...) để dễ dàng theo dõi xu hướng.
Giải pháp với Python:
Mình sử dụng thư viện pandas để đọc dữ liệu từ các file Excel và matplotlib (hoặc seaborn) để vẽ biểu đồ.
Các bước cơ bản:
- Liệt kê các file Excel nguồn: Sử dụng module
osđể lấy danh sách tất cả các file Excel trong một thư mục chỉ định. - Đọc và tổng hợp dữ liệu: Dùng vòng lặp và
pd.read_excel()để đọc từng file, sau đó nối chúng lại thành một DataFrame duy nhất bằngpd.concat(). - Xử lý và chuẩn bị dữ liệu: Làm sạch dữ liệu, chuyển đổi kiểu dữ liệu nếu cần.
- Vẽ biểu đồ: Sử dụng các hàm của
matplotlib.pyplot(ví dụ:plt.bar(),plt.plot(),plt.pie()) để tạo biểu đồ dựa trên DataFrame đã tổng hợp. - Lưu biểu đồ: Dùng
plt.savefig()để lưu biểu đồ dưới dạng file ảnh (PNG, JPG...).
Ví dụ code đơn giản (minh họa):
import pandas as pd
import matplotlib.pyplot as plt
import os
folder_path = 'duong_dan_den_thu_muc_chua_file_excel'
output_file = 'bao_cao_tong_hop.xlsx'
chart_file = 'bieu_do_ban_hang.png'
data_frames = []
for filename in os.listdir(folder_path):
if filename.endswith('.xlsx'):
file_path = os.path.join(folder_path, filename)
df = pd.read_excel(file_path)
data_frames.append(df)
combined_df = pd.concat(data_frames, ignore_index=True)
# Giả sử có cột 'DoanhThu' và 'ChiNhanh'
# Tính tổng doanh thu theo chi nhánh
summary_df = combined_df.groupby('ChiNhanh')['DoanhThu'].sum().reset_index()
# Vẽ biểu đồ cột
plt.figure(figsize=(10, 6))
plt.bar(summary_df['ChiNhanh'], summary_df['DoanhThu'])
plt.xlabel('Chi Nhánh')
plt.ylabel('Tổng Doanh Thu')
plt.title('Biểu đồ doanh thu theo chi nhánh')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig(chart_file)
# Lưu lại file tổng hợp (tùy chọn)
combined_df.to_excel(output_file, index=False)
print(f'Đã tạo báo cáo tổng hợp: {output_file}')
print(f'Đã lưu biểu đồ: {chart_file}')
Cách này giúp tiết kiệm rất nhiều thời gian, đảm bảo tính chính xác và dễ dàng cập nhật khi có thêm dữ liệu mới. Nếu anh em nào cần xử lý các tác vụ tương tự hoặc muốn đi sâu hơn vào các thư viện như openpyxl, xlsxwriter thì có thể trao đổi thêm.
Chúc mọi người áp dụng thành công!