TIL 01 | Data Manip 01 | Mở đầu
Gần đây do khá là chán nên tôi quyết định quay trở lại việc học MOOC mà tôi bắt đầu và bỏ dở từ rất nhiều năm trước. Mục tiêu lần này của tôi là một khóa liên quan tới data manipulation trên Udemy.
Mở đầu
Theo như kinh nghiệm bỏ ngang rất nhiều Course Online thì khóa học sẽ khá là hào hứng tại 1, 2 section đầu, sau đó đi ngang và tôi sẽ bấm Archive
mà không hoàn thành sau khoảng nửa buổi xem chán chê video. Lý do lớn nhất là learning curve quá dốc và tôi không đủ kiên nhẫn để xem những thứ cơ bản có ứng dụng thực tế vào công việc đang làm (không có phần thưởng cho công sức đã bỏ ra và rủi ro phải gánh chịu).
Thế nên lần này quay trở lại tôi sẽ không đi từ việc xem Catalog xem có khóa nào “hay ho” để đăng ký, mà tôi sẽ đi từ một cái nhu cầu hiện tại trong công việc của tôi, đó là việc ghép hơn 20 cái file Excel vào làm 1 (tổng khoảng 10 triệu dòng) và chứng minh rằng Dữ liệu sau khi ghép là đầy đủ, có thể thực hiện lọc và tìm kiếm trên đó. Tôi chọn khóa này vì hiện tại phần lớn các khóa MOOC liên quan không ít thì nhiều tới AI rồi Machine Learning, tôi thấy cao siêu quá, mà mặc dù chán nhưng tôi vẫn chẳng có thời gian mà tìm hiểu.
Nói qua một chút, để thực hiện được điều trên tôi đã từng thử qua (theo thứ tự) các giải pháp như sau:
- Data Model trong Excel: sử dụng tính năng Import Folder trong Office 365. Mọi việc khá là suôn sẻ cho tới khi load xong thì nó thường xuyên báo có dòng bị lỗi (do null data), và tôi đang sử dụng Excel 32bit trên một con laptop chỉ có 8GB RAM nên thời gian load rất lâu, đủ để ăn xong bữa tối nó vẫn chưa load xong.
- Power BI: nghe cái tên là thấy sức mạnh rồi. Tôi thấy các doanh nghiệp Việt Nam ngày càng dùng nhiều cái này, nhất là trong kinh doanh, tài chính. Mon men dùng thử và nhận thấy về cơ bản cho tác vụ của tôi thì nó giống y hệt Data Model của Excel như trên. Vẫn những hạn chế đó, tôi đành gác lại việc tìm hiểu Power BI cho tương lai.
- ACL (hiện đã đổi tên thành Galvanize): đáp ứng khá tốt, nhưng phiên bản tôi được cấp phép sử dụng (của Công ty) lại là bản non-unicode, lỗi font hết.
- TADViewer (https://www.tadviewer.com): open-source, hỗ trợ unicode, khá nhanh nhưng không ổn định, cũng gặp tình trạng lỗi khi import và crash khi dữ liệu quá lớn, ngoài ra tính năng Pivot khó sử dụng trực quan.
- Tibco Spotfire: giải pháp hiện tại đang sử dụng. Việc ghép các bảng, lọc dữ liệu cũng như tạo các Pivot/Cross Table là rất đơn giản và trực quan. Một khả năng thần thánh (tôi cũng không hiểu tại sao??) là nén 10 triệu dòng (khoảng 3GB Excel) chỉ trong 150MB, thích hợp cho việc chia sẻ dữ liệu giữa các thành viên nhóm. Đổi lại mỗi lần mở lên mất khoảng 20ph để đọc và hiển thị được. Giải pháp này mang tính tình thế khá ổn, tuy nhiên có các tồn tại sau:
- tài liệu ít, tôi tìm cách tự động ghép các file vào nhưng vẫn chưa làm được
- mở lên vẫn quá tốn thời gian, chiếm dụng tài nguyên máy
- phần mềm bản quyền tính phí rất cao: (i) có nguy cơ Công ty ngừng cung cấp bất cứ lúc nào và (ii) tôi sẽ không thể mang kinh nghiệm sang các dự án cá nhân hay công việc sau này
- Theo suy nghĩ cá nhân của tôi, chắc chắn trên thế giới họ đã giải quyết vấn đề này từ rất lâu rồi, với tần suất xuất hiện dày đặc của những cụm từ như kiểu “Dữ liệu lớn”, “Học rất sâu”, … cùng các bộ dữ liệu khủng long tới chục tỷ, trăm tỷ dòng. Do đó tôi loay hoay tìm cách để áp dụng cho vấn đề của mình.
Như một bài trên trang này - Thuyết phức tạp Kolmogorov đã đề cập tới:
Hình mẫu tìm được chưa chắc đã thú vị, nhưng cuộc tìm kiếm cho những hình mẫu tốt hơn thì luôn thú vị.
“The search for better patterns will always be interesting."
Hi vọng rằng sau khi hoàn thành section thứ 4 là tôi có thể áp dụng để làm trên đống file Excel mệt mỏi kia.
Thực hiện
Khóa học tập trung vào việc xử lý một cách đơn giản dữ liệu với Python. Môi trường khuyến khích cài đặt trên Windows sử dụng Anaconda
và Jupyter Notebook
để thực hành. Việc cài cắm khá là nặng nề và mất thời gian, laptop của tôi cũng yếu và cần cho các công việc khác nữa. Ngoài ra tôi suy nghĩ rằng với cùng một sức mạnh phần cứng như vậy thì các ông lớn (như các giải pháp tôi kể ở trên) chắc chắn phải tối ưu hơn các lệnh xử lý thủ công bằng Python của tôi.
Do đó tôi chuyển hướng sang sử dụng một giải pháp hiệu quả và tiết kiệm thời gian hơn rất nhiều: Google Colaboratory . Một số ưu điểm có thể kể tới như:
- Gọn nhẹ, không yêu cầu cài đặt, chạy ngay trên trình duyệt
- Sức mạnh tính toán lớn (13GB RAM khi dùng CPU, tôi chưa thử tốc độ trên GPU/TPU), nếu cần tôi có thể chia ra nhiều batch và chạy trên nhiều tài khoản khác nhau.
- Các thư viện đã được cài sẵn, băng thông mạng cao, sử dụng chính Google Drive làm nơi lưu trữ.
Series này tôi sẽ viết cho quá trình học khóa học trên (và có thể cả việc áp dụng trên vấn đề cá nhân của tôi). Hiện tại thì vẫn còn một vướng mắc là xuất file .ipynb
ra dạng html và đưa vào trang web này trông cho đẹp đẽ. Nếu có góp ý gì bạn có thể sử dụng tính năng comment ở dưới, biết đâu tôi lại có một cách hiệu quả hơn để xử lý vấn đề mà không cần phải học khóa học này :D