TROISINH
Ứng dụng cơ bảnỨng dụng đời thường

Dọn dữ liệu CSV bằng Claude Code: Từ file lộn xộn đến báo cáo sạch

Biến file CSV lộn xộn thành dữ liệu sạch chỉ bằng ngôn ngữ tự nhiên. Hướng dẫn thực chiến chuẩn hoá encoding, loại bỏ trùng lặp fuzzy, và phân tích chất lượng data.

Định nghĩa

CSV cleaning là quá trình biến file Excel hay CSV "bẩn" — kiểu như bản export từ hệ thống kế toán cũ hay máy chấm công công ty — thành dữ liệu sạch, có định dạng chuẩn. Công việc này bao gồm sửa lỗi font tiếng Việt, xử lý ngày tháng định dạng lung tung, gộp các dòng trùng lặp (từ khớp chính xác đến khớp mờ), và kiểm tra dữ liệu thiếu hay bất thường. Khác với việc xóa file rác, đây là bài toán tái cấu trúc ngữ nghĩa: biến đống text thô thành dữ liệu có kiểu (typed data) mà máy có thể tính toán và phân tích được.

Giải thích chi tiết

Encoding và BOM: Cứu file CSV tiếng Việt bị lỗi font

File CSV từ Excel bản Việt Nam hay phần mềm kế toán cũ thường mang "bệnh" encoding: Windows-1252, Latin-1, hoặc UTF-8 có BOM (Byte Order Mark). Khi mở bằng pandas.read_csv() mặc định, bạn sẽ thấy "Nguyễn" biến thành "Nguyá»…n" — kiểu mojibake quen thuộc.

Claude Code tự động phát hiện encoding qua chardet hoặc file -i, sau đó chuẩn hoá về UTF-8 thuần (không BOM) trước khi xử lý. Điểm mấu chốt là thứ tự xử lý đúng: phải sửa encoding trước khi gộp trùng lặp, nếu không "Nguyễn Văn A" (UTF-8) và "Nguyen Van A" (ASCII) sẽ bị coi là hai người khác nhau.

Structural Parsing: Khi dấu phẩy và xuống dòng gây rối

CSV không đơn thuần là "phân cách bằng phẩy". Theo chuẩn RFC 4180, nếu một ô chứa dấu phẩy hoặc xuống dòng, nó phải được bọc trong dấu ngoặc kép. Nhưng file export từ Excel thường vi phạm: ghi chú của khách hàng chứa xuống dòng ngẫu nhiên, địa chỉ có dấu phẩy không được escape.

Claude Code xử lý bằng cách thử nghiệm delimiter (,, ;, tab), phát hiện xuống dòng trong chuỗi được quote, và dùng csv.Sniffer hoặc polars.read_csv(try_parse_dates=True) để xây dựng lại cấu trúc đúng. Đây là bước chuyển đổi không mất mát — phải giữ nguyên dữ liệu gốc trong khi sửa cấu trúc.

Semantic Type Inference: AI "đọc" hiểu ngữ cảnh

Đây là lợi thế của Claude Code so với script thuần. Khi gặp cột "01/02/2023", script thông thường không biết đây là 1 tháng 2 (kiểu Mỹ) hay 2 tháng 1 (kiểu Việt Nam). Claude dùng suy luận theo ngữ cảnh: nếu cột tên là "Ngày giao hàng" và các giá trị khác là "15/03/2023", nó hiểu đây là DD/MM/YYYY; nếu cột là "Expiry Date" trong ngữ cảnh thẻ tín dụng, nó nhận ra MM/DD/YYYY.

Tương tự với tiền tệ: "$1,200", "1200.00", "1.2k", "N/A" là bốn cách viết của cùng một loại dữ liệu (tiền tệ). Claude chuẩn hoá về dạng số trước khi tính toán.

Deduplication: Từ khớp chính xác đến logic mờ

Exact deduplication dùng SHA-256 hash cho toàn bộ dòng — phù hợp với file log bị ghi đè trùng.

Fuzzy deduplication là "chiêu" hay cho danh sách khách hàng. "Nguyễn Văn A" và "Nguyên Văn A" (sai chính tả) hoặc "Hồ Chí Minh" và "TP.HCM" thực chất là cùng một đối tượng. Cách ngây thơ so sánh từng cặp một (O(n²)) sẽ bị treo máy với 1 triệu dòng (10¹² phép so sánh).

Claude Code áp dụng blocking + MinHash LSH:

  1. Blocking: Chia nhỏ dataset thành các nhóm dựa trên heuristic đơn giản (ví dụ: 3 ký tự đầu tên + mã vùng điện thoại). Chỉ so sánh các bản ghi trong cùng nhóm.
  2. MinHash LSH: Tính signature 10-bit cho mỗi bản ghi, các bản ghi giống nhau sẽ có xác suất cao rơi vào cùng bucket. Giảm độ phức tạp từ O(n²) xuống O(n) với độ chính xác 99.5%.

Profiling và Validation: Bác sĩ cho bộ dữ liệu

Trước khi phân tích, cần biết dataset "khoẻ" hay "ốm":

  • Missing values: Phát hiện bằng IQR (Interquartile Range) cho số, hoặc phân tích tần suất cho dữ liệu phân loại.
  • Cardinality: Cột "Giới tính" có 50 giá trị khác nhau → có lỗi nhập liệu (có lẽ gõ nhầm "Nam", "nam", "NAM", "male").
  • Outliers: Z-score hoặc IQR method để phát hiện điểm bất thường (ví dụ: đơn hàng 50 tỷ trong file bán hàng trung bình 500k).

Claude Code tạo báo cáo chất lượng dữ liệu tự động: % null, phân bố, ma trận tương quan, và gợi ý cách sửa cụ thể.

Ví dụ thực tế

Dọn file bán hàng Shopee/Lazada export

Bạn nhận file orders.csv 50MB từ Shopee Seller Center: encoding UTF-8 BOM, ngày tháng lộn xộn (có dòng DD/MM/YYYY, có dòng YYYY-MM-DD), sđt khách bị trùng do khách đặt lại nhiều lần.

Workflow với Claude Code:

# Trong Claude Code terminal
claude -p "Clean this CSV: detect encoding, standardize dates to ISO, remove duplicate phone numbers keeping latest order date, output to orders_cleaned.csv"

Claude sẽ:

  1. Chạy chardet → phát hiện UTF-8-SIG → chuyển sang UTF-8 thuần
  2. Parse ngày tháng bằng dateutil.parser với dayfirst=True (ưu tiên định dạng VN)
  3. Gộp trùng theo sđt: groupby phone → sort theo ngày → giữ lại dòng mới nhất
  4. Tạo báo cáo: "Đã xử lý 12.450 dòng, loại 340 trùng lặp, chuẩn hoá 89 ngày tháng lỗi format"

Chuẩn hoá danh sách nhân viên từ file chấm công Excel

File attendance.csv export từ máy chấm công công ty: tên nhân viên bị lỗi font ("Nguyá»…n Văn A"), có dòng trùng do nhân viên quẹt thẻ 2 lần trong 1 phút.

Prompt:

Dọn file attendance.csv:
- Fix encoding từ Windows-1252 sang UTF-8
- Fuzzy match tên: "Nguyễn Văn A" và "Nguyên Van A" là cùng người (dùng Levenshtein distance < 3)
- Loại bỏ duplicate timestamps trong vòng 5 phút (cùng người, cùng ngày)
- Output ra file mới với cột "Standardized Name"

Claude tự sinh script Python dùng fuzzywuzzy hoặc thefuzz để match tên, áp dụng blocking bằng phần họ để giảm số lần so sánh từ O(n²) xuống.

Phân tích chi tiêu cá nhân từ bank statement

File bank_statement.csv từ Vietcombank/TPBank: cột "Mô tả" chứa text tự do ("CHUYEN TIEN MUA CA PHE", "HOAN TIEN LAZADA"), không có phân loại sẵn.

Workflow:

Phân loại giao dịch trong bank_statement.csv:
- Tạo cột Category dựa trên keywords trong Description
- "CA PHE", "HIGHLANDS", "STARBUCKS" → Food & Beverage
- "SHOPEE", "LAZADA", "TIKI" → Shopping
- " Grab ", "BE " → Transport
- Tính tổng chi tiêu theo tháng và category
- Vẽ biểu đồ cột bằng matplotlib lưu ra spending_by_month.png

Claude đọc file → sinh pandas code → chạy trong sandbox → trả về ảnh chart và summary: "Tháng này bạn chi 5.2 triệu cho F&B, vượt 30% so với tháng trước".

Ứng dụng

Data Analyst tại Startup

Dùng Claude Code như "data science REPL" — không cần mở Jupyter, chỉ cần mô tả transformation cần thiết. Claude tự sinh code pandas/polars, xử lý file 100MB+ trong sandbox, và lặp lại dựa trên kết quả. Tiết kiệm 60-80% thời gian so với viết script thủ công.

Kế toán / Sales Ops

Xử lý báo cáo thuế, báo cáo bán hàng từ các nguồn khác nhau (POS, website, sàn TMĐT). Claude chuẩn hoá format, mapping SKU giữa các hệ thống, và phát hiện bất thường (ví dụ: đơn hàng âm giá trị, số lượng null).

Developer làm ETL

Thay vì viết Airflow DAG phức tạp cho bước "cleaning", dùng Claude Code để prototype pipeline nhanh. Sau khi ổn định, dùng /loop để lên lịch chạy định kỳ (ví dụ: mỗi sáng 8h dọn file báo cáo từ hệ thống legacy).

Freelancer nhận job "dọn data"

Nhận file CSV "bẩn" từ khách (thường là doanh nghiệp nhỏ chưa có data team), dùng Claude Code để clean và analyze trong thời gian ngắn, deliver kết quả sạch + báo cáo insight. Chi phí API (khoảng $0.5-2/file) thấp hơn nhiều so với thuê data engineer viết script.

So sánh: Claude Code vs Công cụ truyền thống

Tiêu chíExcel / Google SheetsOpenRefinePython Script thuầnClaude Code
Tốc độ setupNgay lập tứcCài đặt Java, học interfaceViết code, debugMô tả bằng tiếng Việt, chạy ngay
Xử lý 100k+ rowsChậm, crashỔn địnhNhanh (pandas/DuckDB)Nhanh (tự sinh DuckDB/polars)
Fuzzy matchingKhó (cần plugin)Có sẵn (clustering)Code thủ công (thefuzz)Tự động, tối ưu thuật toán
Semantic inferenceKhôngHạn chếKhông (chỉ regex) (nhận diện ngày tháng, địa chỉ)
Lặp lại (iterative)Thủ côngThủ côngPhải sửa codeConversational, context được giữ
Chi phíFree (giới hạn rows)FreeFree (thời gian dev)$0.01-0.1 per 1k rows (API cost)

Kết luận: Excel phù hợp file nhỏ (< 10k rows) và người không biết code. Python script tốt cho production pipeline nhưng tốn thời gian viết. Claude Code nằm ở sweet spot: nhanh như script, dễ như Excel, và thông minh hơn cả hai nhờ khả năng suy luận ngữ nghĩa.

Bài viết liên quan

Cùng cụm (everyday-uses)

Đọc tiếp

On this page