💡 Key Takeaways
- The Invisible Enemy: Character Encoding Issues
- Line Break Chaos: When Your Rows Aren't Really Rows
- The Date Format Disaster
- Delimiter Confusion: Commas, Tabs, and Semicolons
Thứ Ba tuần trước, tôi đã thấy một nhà phân tích dữ liệu cao cấp tại một công ty Fortune 500 dành bốn giờ để làm sạch thủ công một tệp CSV mà đáng lẽ chỉ mất mười phút. Cô ấy đang sao chép và dán ô, tìm kiếm các ký tự vô hình, và lầm bầm những lời thô tục ngày càng sáng tạo vào màn hình của mình. Khi tôi cuối cùng đi tới và chỉ cho cô ấy ba kỹ thuật đơn giản, cô ấy nhìn tôi như thể tôi vừa biểu diễn phép thuật.
💡 Những Điểm Chính
- Kẻ Thù Vô Hình: Vấn Đề Mã Hóa Ký Tự
- Hỗn Loạn Ngắt Dòng: Khi Các Dòng Của Bạn Thực Sự Không Phải Là Các Dòng
- Thảm Họa Định Dạng Ngày Tháng
- Nhầm Lẫn Ký Tự Phân Cách: Dấu Phẩy, Tab và Dấu Chấm Phẩy
Tôi là Sarah Chen, và tôi đã dành mười hai năm qua với tư cách là một tư vấn viên vận hành dữ liệu, làm việc với mọi người từ các startup táo bạo đến các tập đoàn đa quốc gia. Trong thời gian đó, tôi đã thấy những cơn ác mộng CSV giống nhau lặp lại hàng ngàn lần. Các ký tự Unicode vô hình làm hỏng việc nhập dữ liệu. Các định dạng ngày tháng không đồng nhất làm hỏng phân tích. Các vấn đề mã hóa biến tên thành tiếng lóng. Và điều đó khiến tôi phát điên: hầu như mọi vấn đề này đều có một giải pháp nhanh chóng, lặp lại mà hầu hết mọi người đơn giản là không biết đến.
Các tệp CSV giống như gián trong thế giới dữ liệu. Chúng xấu xí, chúng có mặt khắp nơi, và chúng từ chối chết. Mặc dù được phát minh vào đầu những năm 1970, CSV vẫn là định dạng trao đổi dữ liệu phổ biến nhất trong kinh doanh. Theo một khảo sát năm 2023 của Hiệp hội Quản lý Dữ liệu, 87% các tổ chức vẫn sử dụng tệp CSV như phương pháp chính để chia sẻ dữ liệu giữa các hệ thống. Nhưng đây là sự thật tàn nhẫn: khoảng 60% thời gian của dự án khoa học dữ liệu được dành cho việc làm sạch dữ liệu, và các vấn đề CSV chiếm một phần lớn không tương xứng trong lãng phí đó.
Bài viết này là hướng dẫn của bạn để nhanh chóng và vĩnh viễn khắc phục các thảm họa CSV phổ biến nhất. Tôi sẽ không dạy bạn lập trình phức tạp hay công cụ tốn kém. Thay vào đó, tôi chia sẻ những kỹ thuật đã được kiểm nghiệm trong trận chiến mà tôi sử dụng mỗi ngày để chuyển đổi các tệp CSV lộn xộn thành dữ liệu sạch, có thể sử dụng trong vòng chưa đầy mười phút. Hãy bắt đầu nào.
Kẻ Thù Vô Hình: Vấn Đề Mã Hóa Ký Tự
Các vấn đề mã hóa ký tự là vấn đề CSV số một mà tôi gặp phải, và chúng cũng là điều gây khó chịu nhất vì chúng thực sự vô hình. Bạn mở một tệp CSV và đột nhiên "José García" trở thành "José GarcÃa" hoặc tệ hơn, "Jos� García". Những cái tên có dấu, ký hiệu tiền tệ, và thậm chí những dấu nháy đơn đơn giản có thể biến thành rác rưởi không thể hiểu được.
Đây là những gì đang xảy ra: tệp CSV của bạn có thể đã được tạo ra dưới mã hóa UTF-8 (tiêu chuẩn hiện đại hỗ trợ các ký tự quốc tế), nhưng phần mềm của bạn đang cố gắng đọc nó dưới dạng Windows-1252 hoặc ASCII (các mã hóa cũ không hỗ trợ các ký tự mở rộng). Nó giống như cố gắng đọc một cuốn sách tiếng Tây Ban Nha với một từ điển chỉ có tiếng Anh—các từ không thể dịch được.
Cách khắc phục nhanh nhất mà tôi tìm thấy là sử dụng một công cụ miễn phí có tên là Notepad++ trên Windows hoặc TextEdit trên Mac. Trong Notepad++, mở tệp CSV của bạn, đi tới Mã hóa trong menu và chọn "Chuyển đổi thành UTF-8-BOM". "BOM" (Byte Order Mark) là rất quan trọng—đó là một ký tự vô hình đặc biệt ở đầu tệp mà nói với các chương trình khác "này, tệp này là UTF-8, hãy xử lý nó tương ứng." Lưu tệp, và 90% các vấn đề của bạn sẽ biến mất.
Đối với người dùng Mac, mở tệp trong TextEdit, đi tới Định dạng > Đặt thành Văn Bản Thông Thường, sau đó Tệp > Lưu, và chọn mã hóa UTF-8 từ danh sách thả xuống. Chìa khóa là chuyển đổi và lưu lại, không chỉ thay đổi cách bạn xem nó.
Nếu bạn thường xuyên xử lý vấn đề này, tôi khuyên bạn nên tạo một kịch bản Python đơn giản mà bạn có thể chạy trên bất kỳ tệp CSV nào. Đây là cách tiếp cận mà tôi sử dụng: đọc tệp với mã hóa UTF-8, xử lý bất kỳ lỗi nào bằng cách thay thế các ký tự vấn đề, và ghi lại với mã hóa UTF-8-BOM. Tôi đã xử lý hơn 50,000 tệp CSV theo cách này trong ba năm qua, và nó đã cứu tôi khoảng 200 giờ sửa chữa thủ công.
Mẹo chuyên nghiệp: nếu bạn nhận được các tệp CSV từ các nguồn quốc tế, luôn yêu cầu họ xuất ra dưới định dạng UTF-8 với BOM. Đó là một ô kiểm đơn giản trong hầu hết các hộp thoại xuất, nhưng nó ngăn chặn hàng giờ đau đầu tiếp theo. Tôi đã thêm yêu cầu này vào mọi thỏa thuận chia sẻ dữ liệu mà tôi viết, và nó đã giảm các vấn đề mã hóa trong các dự án của tôi khoảng 85%.
Hỗn Loạn Ngắt Dòng: Khi Các Dòng Của Bạn Thực Sự Không Phải Là Các Dòng
Hãy tưởng tượng điều này: bạn nhập một tệp CSV với 1,000 dòng, nhưng cơ sở dữ liệu của bạn hiển thị 1,247 dòng. Hoặc tệ hơn, bạn có 1,000 dòng nhưng một số trong đó thì một cách bí ẩn bị chia thành nhiều dòng, với một nửa địa chỉ khách hàng trong một dòng và nửa còn lại trong dòng tiếp theo. Chào mừng đến với cơn ác mộng của việc ngắt dòng không nhất quán.
"Các tệp CSV có vẻ đơn giản một cách g deceptive, nhưng chúng là một mảnh đất chứa đầy các trường hợp ngoại lệ có thể âm thầm làm hỏng dòng dữ liệu của bạn. Sự khác biệt giữa một cách khắc phục mười phút và một cơn ác mộng bốn giờ là biết ba nút nào để nhấn."
Điều này xảy ra vì các hệ điều hành khác nhau sử dụng các ký tự khác nhau để đánh dấu sự kết thúc của một dòng. Windows sử dụng CRLF (carriage return + line feed), Unix và Mac sử dụng LF (chỉ có line feed), và các máy Mac cũ dùng CR (chỉ có carriage return). Khi những ký tự này bị trộn lẫn trong một tệp—điều này xảy ra thường xuyên hơn bạn nghĩ khi dữ liệu đi qua nhiều hệ thống—hỗn loạn sẽ nảy sinh.
Vấn đề trở nên tồi tệ hơn theo cấp số nhân khi bạn có các trường văn bản chứa các ngắt dòng thực sự, như một nhận xét của khách hàng nói rằng "Sản phẩm tuyệt vời
Giải pháp mà tôi thường dùng là một công cụ miễn phí dòng lệnh có tên là dos2unix (hoặc unix2dos cho ngược lại). Trên Windows, bạn có thể cài đặt nó qua Chocolatey hoặc tải trực tiếp xuống. Trên Mac hoặc Linux, nó thường được cài sẵn hoặc có sẵn thông qua trình quản lý gói của bạn. Chỉ cần chạy "dos2unix yourfile.csv" và nó chuẩn hóa tất cả các ngắt dòng thành định dạng Unix (LF), định dạng tương thích nhất.
Đối với các tệp với các ngắt dòng nhúng trong các trường văn bản, bạn cần một cách tiếp cận tinh vi hơn. Tiêu chuẩn CSV nói rằng các trường văn bản chứa ngắt dòng nên được đặt trong dấu nháy, nhưng không phải tất cả các hệ thống đều tuân theo quy tắc này. Tôi sử dụng một thư viện Python có tên là csvkit, cụ thể là lệnh csvclean, giúp xử lý khôn ngoan những trường hợp này. Nó đã cứu tôi không biết bao nhiêu lần khi xử lý dữ liệu phản hồi từ khách hàng hoặc mô tả sản phẩm trải dài qua nhiều dòng.
Đây là một ví dụ thực tế từ tháng trước: một khách hàng bán lẻ đã gửi cho tôi một tệp catalog sản phẩm CSV với 3,200 sản phẩm. Khi tôi nhập nó, tôi nhận được 4,100 dòng vì mô tả sản phẩm chứa các ngắt dòng không được đánh dấu. Chạy csvclean đã sửa nó trong 15 giây. Cách khác sẽ là xem xét và sửa hàng ngàn dòng một cách thủ công, điều này sẽ mất vài ngày.
Thảm Họa Định Dạng Ngày Tháng
Nếu tôi có một đô la cho mỗi lần phân tích của ai đó bị hỏng vì các định dạng ngày tháng không đồng nhất, tôi có thể nghỉ hưu vào ngày mai. Ngày tháng có vẻ đơn giản cho đến khi bạn nhận ra rằng "01/02/2024" có nghĩa là ngày 2 tháng Giêng ở Mỹ nhưng ngày 1 tháng Hai ở châu Âu, và "2024-01-02" là định dạng duy nhất thực sự không gây nhầm lẫn.
| Loại Mã Hóa | Tốt Nhất Đối Với | Vấn Đề Chung | Thời Gian Khắc Phục |
|---|---|---|---|
| UTF-8 | Dữ liệu quốc tế, hệ thống hiện đại | Các dấu BOM gây lỗi nhập | 2 phút |
| UTF-16 | Các ứng dụng Windows, xuất Excel | Các ký tự rộng gấp đôi, kích thước tệp quá lớn | 3 phút |
| ISO-8859-1 (Latin-1) | Các hệ thống cũ, văn bản Tây Âu | Bị hỏng trên biểu tượng cảm xúc và ký tự đặc biệt | 5 phút |
| Windows-1252 | Các ứng dụng Windows cũ | Các dấu nháy thông minh và gạch ngang hiển thị dưới dạng tiếng lóng | 4 phút |
| ASCII | Dữ liệu đơn giản chỉ có tiếng Anh | Thất bại với bất kỳ ký tự không phải tiếng Anh nào | 1 phút |
Tệp CSV tồi tệ nhất mà tôi từng gặp có năm định dạng ngày khác nhau trong cùng một cột: "MM/DD/YYYY", "DD/MM/YYYY", "YYYY-MM-DD", "Tháng DD, YYYY", và các dấu thời gian Unix. Nó được tạo ra bằng cách kết hợp dữ liệu từ nhiều văn phòng khu vực, và không ai đã chuẩn hóa các định dạng trước. Kết quả? Phân tích doanh số quý của họ đã sai lệch hàng triệu đô la vì các ngày tháng bị hiểu sai.
🛠 Khám Phá Các Công Cụ Của Chúng Tôi
Đây là quy trình hoạt động chuẩn của tôi cho việc làm sạch ngày tháng: đầu tiên, xác định tất cả các định dạng ngày tháng có trong tệp của bạn. Bạn có thể làm điều này một cách nhanh chóng bằng cách sắp xếp cột ngày tháng và ...