Nổi bật

Mời các bạn ghé trang blog kỹ thuật trên medium

Xin chào quý bạn đọc giả, lại một tuần nữa trôi qua, không biết các bạn đã giành thời gian cho bản thân, gia đình và bạn bè như thế nào rồi. Đến hẹn lại lên, tôi sẽ tiếp tục bài chia sẻ của mình trên blog cá nhân của mình. Tuy nhiên, lần này sẽ khác với mọi khi, tôi quyết định sẽ chuyển nhà sang medium vì một vài lý do sau.

Thứ nhất, các bài chia sẻ sắp tới chủ yếu liên quan đến kỹ thuật nên cần một platform đáp ứng được format code theo chuẩn Markdown để trình bày những đoạn code được rõ ràng hơn và medium đáp ứng được nhu cầu này.

Thứ hai, wordpress hiện đã loại bỏ tính năng này và đòi hỏi phải nâng cấp lên business plan – 31$/monthly tức 372$/yearly xấp xỉ 8.7tr VND/năm, mới cho phép cài đặt plugin code highlight vào hệ thống như vậy rất tốn chi phí.

Sau cùng, các thuật ngữ tiếng Anh ngày càng nhiều và chuyên sâu, việc dịch ra tiếng Việt tuy sẽ tốt cho các bạn đọc giả khi mới bắt đầu nhưng về lâu dài sẽ khiến bài viết luộm thuộm song ngữ xen kẽ nên tốt nhất tôi quyết định dùng tiếng Anh trong các bài viết kỹ thuật của mình.

Các bài viết chia sẻ về cảm nhận và trải nghiệm tôi vẫn sẽ tiếp tục chia sẻ ở đây. Rất mong các bạn thông cảm.

DataOps 02: Spawn up Apache Spark infrastructure by using Docker.

DataOps 01: Stream data ingestion với Redpanda

Stream data ingestion

Trong bài viết What’s Next for Data Engineering in 2023? 7 Predictions, một trong những dự báo tôi đồng tình đó là Prediction #6: Data warehouses and data lakes use cases start to blur nghĩa là ta sẽ dần hợp nhất structured data và unstructured data về cùng một chỗ.

Ắt hẳn khi xây dựng Data Platform, các bạn đã từng nghe đến mô hình Kappa ArchitectureLambda Architecture. Trong kiến trúc Lambda, ta sẽ chia batch data và stream data làm hai nhánh để lưu trữ, xử lý và truy vấn dữ liệu giúp cho việc quản lý được tách bạch nhưng workload của Data Engineer sẽ bị đội lên do phải quản lý hai hệ thống cùng lúc. Ngược lại, kiến trúc Kappa hướng đến việc hợp nhất hai nhánh batch và stream lại với nhau, sau đó dùng cơ chế federated query để có thể cùng lúc lưu trữ, xử lý cũng như truy vấn dữ liệu.

Chúng ta vẫn thường thiết kế và xây dựng theo Lambda nhiều hơn Kappa dù tư tưởng của Kappa mang lại giá trị hơn về tốc độ cũng như khả năng tích hợp các microservice in real-time. Lý do khiến mọi người e ngại khi áp dụng Kappa đó là ta cần một đội ngũ rất skillfull đứng đằng sau cơ sở hạ tầng Event Driven Hub phức tạp nhằm quản trị và đảm bảo hệ thống vận hành 24/7.

Kafka là đàn anh trong distributed event streaming platform từ trước tới nay. Kafka đã đặt ra tiêu chuẩn cho các hệ thống event streaming tương tự sau này. Đã có nhiều doanh nghiệp áp dụng thành công Kafka vào trong vận hành, từ phân tích báo cáo real-time, data migration cho tới những ứng dụng AI có khả năng tương tác tốc độ cao. Tuy nhiên, khi xây dựng Kafka từ đầu, ta cần một đội DevOps có kỹ năng chuyên môn rất vững để có thể vận hành trơn tru. Vậy có đàn em nào khác cũng có sức mạnh tương tự nhưng lại dễ tiếp cận hơn không?

Redpanda là một trong những đàn em đó. Không những dễ tiếp cận trong việc quản lý, chi phí xây dựng nền tảng thấp hơn mà nhờ đó công việc của các system admin cũng đỡ vất vả hơn. Hai tính chất chính giúp cho Redpanda cho tốc độ nhanh 10x và chi phí giảm 6x đó là nhờ loại bỏ Zookeeper thay bằng Raft algorithm, code bằng C++ nên không phải đụng đến JVM. Redpanda đã được kiểm chứng bằng thực nghiệm với 200 giờ chạy test. Đặc biệt Redpanda hoàn toàn có thể tương thích với Kafka ecosystem như Kafka connect giúp ta chuyển đổi công nghệ dễ dàng hơn.

Trong bài viết này, tôi sẽ tiến hành cài đặt Redpanda như một broker sử dụng cho việc ingesting data. Các bạn có thể sử dụng link github ở đây để tiến hành cài đặt lại: https://github.com/ongxuanhong/de01-stream-ingestion-redpanda-minio

  • Data source sẽ là MySQL giả lập dữ liệu vận hành của doanh nghiệp, cụ thể là giao dịch đặt hàng của user. Bên cạnh đó sẽ là clickstream events giả lập quá trình tương tác của user trên website ecommerce.
  • Target sink ta có thể dùng S3, GCS hay Azure Blob để làm nơi lưu trữ phân tán. Tuy nhiên, tôi muốn bài viết dễ cài đặt với đa số bạn đọc, không cần tạo tài khoản trên cloud provider nên đã quyết định dùng MinIO để thay thế.
  • Để vận chuyển dữ liệu source/sink tôi sẽ cài đặt debezium cho MySQL và Kafka connect cho MinIO.

Qua năm mới 2023, tôi cũng xin chúc các bạn sẽ gặt hái được nhiều thành công trong sự nghiệp, gia đình luôn bình an và hạnh phúc.

MLOps 01: Data testing, tại sao, cái gì và như thế nào

Tôi không thích viết test và các bạn tôi cũng thế. Tại sao mình phải double công việc lên để viết test, sai thì sửa lại nhanh thôi, đâu cần phải mất thời gian như vậy. Cho đến một ngày tôi được join vào một dự án khủng, rất nhiều module và nhiều thành viên tham gia, lúc này tôi mới hiểu tại sao mọi người cần viết test và viết test từ sớm. Tôi nhận ra đó là khoản đầu tư có giá trị giúp hạn chế được technical debt về sau. Nếu để nợ này càng nhiều, về sau team bạn sẽ mất thời gian để sửa code, dự án sẽ chậm đưa ra được các features mới hơn.

Trong các dự án về Data, viết test lại càng quan trọng, nếu không có quy trình data quality management từ lúc đọc dữ liệu thô, tiền xử lý cho đến lúc train model thì toàn bộ dữ liệu down stream sẽ bị ảnh hưởng. Lúc này, ta phải mất thời gian sửa code và chạy lại toàn bộ data pipeline từ đầu, rất painful.

Bài viết này sẽ trình bày lý do tại sao ta cần viết test, test gì trên dữ liệu, test như thế nào.

Tại sao Data Engineer giúp bạn bắt đầu sự nghiệp trong lĩnh vực Data thuận lợi hơn?

Dice 2020 Tech Jobs Report

Xin chào các bạn đọc giả, đã nhiều năm tôi không viết blog, thế giới của dữ liệu đã có nhiều bước tiến vượt bậc cả về số lượng lẫn chất lượng, đến nỗi ta còn không thể nắm bắt được hết chuyện gì đang diễn ra. Nào là Blockchain, ChatGPT, AI Art generator, Web3, Data Lakehouse, Data Mesh và hàng hà sa số open source giúp cho công việc xử lý dữ liệu ngày càng thuận lợi hơn bao giờ hết. Tôi rất mong muốn sẽ càng nhiều người được phổ cập thông tin như thế qua bài chia sẻ của mình. Nên qua năm 2023, tôi quyết định hàng tuần sẽ ra một bài blog nho nhỏ xoay quanh chuyện nghề và một bài blog hướng dẫn công nghệ mỗi tháng một lần. Hy vọng sẽ mang lại thông tin, kinh nghiệm, cũng như góc nhìn cá nhân cho các bạn đọc đang theo dõi blog tới thời điểm này.

Hiện tại, tôi có giảng dạy tại học viện AIDE thông qua hình thức online, một phần muốn “lôi kéo” nhiều bạn tham gia vào dự án hiện tại của tôi, phần khác là muốn thỏa mãn sở thích hướng dẫn, chia sẻ của mình, nhưng quan trọng vẫn là muốn giúp các bạn trẻ nhập môn và tiến nhanh hơn trong sự nghiệp của bản thân. Do đó, trong blog tuần này, tôi sẽ cung cấp một vài lý do chủ quan tại sao các bạn trẻ nên bắt đầu lĩnh vực Data với vai trò là Data Engineer.

Data Products for Mobile Commerce in Real-time and Real-life

🌀 The strong development trend of Mobile has helped M-Commerce – Mobile Commerce rise to become an inevitable era in the near future. 𝗠𝗼𝗯𝗶𝗹𝗲 𝗖𝗼𝗺𝗺𝗲𝗿𝗰𝗲 not only attracts attention with great utilities for users, but also is a great opportunity to help business owners develop their brands and promote online business in the Vietnamese market.

🌀 Following the development of the times, overcoming the “pain points” of customers when shopping online is one of the problems of concern. Building Data Products is one of the solutions to these problems. So how to do that?

DS-mini: Feature evaluation and model tuning

Feature vs Label
Feature vs Label

Trong thực tế, nếu tài nguyên của máy tính không là vấn đề thì ta nên sử dụng hết tất cả feature set dùng vào quá trình training và prediction. Ngược lại, việc giảm bớt được một lượng lớn feature sao cho performance của mô hình không bị ảnh hưởng nhiều nhờ vậy mà tính toán nhanh hơn sẽ là lựa chọn mà ta luôn nhắm tới.

Tiếp tục mini course, sau khi đã có predictive model cơ bản, ta sẽ tiến hành phân tích sâu hơn về việc lựa chọn feature và model tuning. Làm sao ta có thể biết trước feature mà mình tạo ra có độ tin cậy cao mà không cần phải đưa vào training? Làm sao để giảm gánh cho quá trình tính toán bằng cách loại bỏ những feature “vô dụng”? Làm sao tìm được các thông số phù hợp để mô hình cho ra kết quả dự đoán tối ưu? Tất cả sẽ được đề cập trong mục này.

Tiếp tục đọc “DS-mini: Feature evaluation and model tuning”

DS-mini: Modeling với XGBoost

ds_mini_modeling
ds_mini_modeling

Trong phần này, tôi sẽ thực hiện training trên tập dữ liệu feature đã được combine ở các phần trước. Để tiến hành thực nghiệm, ta cần phân chia tập dữ liệu thành 3 tập (train, validation, test). Ở đây, tôi lấy tương ứng tỉ lệ 70/15/15. Mục đích của việc này giúp cho model tránh bị overfitting. Đồng thời, ta có thể dùng validation set để tuning model.

Sau khi phân chia tập dữ liệu, ta sẽ dùng XGBoost để training model. Model này được đánh giá dựa trên AUC metric. Do đó, AUC càng cao, model của ta càng nắm bắt được nhiều pattern trong tập dữ liệu đồng nghĩa với việc khả năng dự đoán của mô hình cũng chính xác hơn.

Cuối cùng, ta dùng model build được để predict output cho tập test và upload submission file lên Kaggle. Tôi có thử upload 2 lần. Lần 1 chỉ gồm các feature binary trong bảng application. Lần 2 gồm các feature ở lần 1 cộng thêm các feature đã tinh chỉnh khác. Kết quả lần 2 vượt trội hơn hẳn lần 1 (0.74 vs 0.63).

Khi đã hoàn chỉnh toàn bộ các bước này, về sau khi thêm feature mới, ta chỉ việc combine features và bỏ vào model để xem kết quả có cải thiện hơn không cũng như phân tích và tuning lại các tham số cho model.
Tiếp tục đọc “DS-mini: Modeling với XGBoost”

DS-mini: Feature engineering (application)

Feature engineering là gì

“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering.”
—  Andrew Ng, Machine Learning and AI via Brain simulations

“Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.”
— Dr. Jason Brownlee from machinelearningmastery.com

Như vậy, feature engineering là tác vụ cần thiết trong quá trình xây dựng predictive model, rất tốn thời gian và công sức đòi hỏi phải có kiến thức ngành. Lý do, ta không thể đưa dữ liệu thô (raw data) trực tiếp vào bất kỳ mô hình Machine Learning nào. Nên mục tiêu của chúng ta cần làm là rút trích các đặc trưng (features) từ dữ liệu thô ban đầu này.

Vậy thế nào là một feature? Ví dụ, để nhận diện người bạn gặp là người quen hay người lạ, ta sẽ dựa vào các feature như dáng đi, màu tóc, quần áo, mắt, mũi, miệng của người đó. Trong bài toán home credit, feature có thể là các thông tin profile của người đi vay như độ tuổi, giới tính, lương hằng tháng, có bao nhiêu con, có sở hữu bất động sản không, etc.

Không nói nhiều lý thuyết nữa, ta hãy bắt tay vào feature engineering cho bảng application. Ta bắt đầu với bảng này vì nó chứa đầy đủ ID của user cả tập train và tập test, thuận tiện cho quá trình join features cũng như phân chia train/validation/test set.

Tiếp tục đọc “DS-mini: Feature engineering (application)”

DS-mini EDA: Explore Data Analysis

home_credit
home_credit

Mục tiêu của cuộc thi Home credit của Kaggle là xây dựng được mô hình dự đoán (predictive model) có điểm đánh giá (evaluation metric) AUC cao. Một mô hình Machine Learning chỉ có thể xây dựng được khi dữ liệu đầu vào đã được chuẩn bị và xử lý tốt. Kaggle cho trước tập các bảng (table), nhiệm vụ của chúng ta là biến đổi và kết hợp chúng lại thành các đặc trưng (feature) có ý nghĩa để model có thể dự đoán tốt trên tập dữ liệu chưa nhìn thấy (test set, unseen data), kết quả thực tế (label) này được giữ bí mật trên Kaggle và dùng để đánh giá các đội trong cuộc thi.

Để có thể làm feature engineering tốt, bước đầu tiên ta cần quan sát và hiểu được dữ liệu. Ta sẽ sử dụng các kỹ thuật bên thống kê gồm các số liệu thống kê và biểu đồ (visualization). Explore Data Analysis (EDA) sẽ giúp ta đánh giá, lựa chọn và biến đổi dữ liệu thành feature phù hợp cho model.

Khi đã có các phân tích từ EDA, ta sẽ có những hướng giải quyết tốt hơn khi đối mặt với các vấn đề bên dưới:

  • Dữ liệu bị NaN (Not a Number), Null (missing data), nguyên nhân từ đâu?
  • Kiểu dữ liệu không khớp (e.g. 1990.0 là kiểu số thực nhưng load lên lại là kiểu string), nên ép kiểu như thế nào?
  • Dữ liệu bị lặp (duplicate) nên chọn và bỏ bớt cái nào?
  • Dữ liệu không liên quan, có phải do nhập sai?
  • Dữ liệu bất thường (e.g. tuổi bị âm, huyết áp bằng không, ngày tháng không đúng format) nên biến đổi thế nào?
  • Dữ liệu ở dạng categorical thì nên biến đổi bằng one-hot encoding hay mapping number?
  • etc.

Tiếp tục đọc “DS-mini EDA: Explore Data Analysis”

Nổi bật

Data Science mini course

ds_mini_course

Mini course này được thiết kế dành cho những bạn còn “chân ướt chân ráo” bước vào lĩnh vực Data Science (DS). Các chủ đề sẽ xoay quanh tập dữ liệu từ cuộc thi Kaggle Home Credit Default Risk, việc này giúp cho người học tập trung kiến thức của mình vào trong ngữ cảnh là một cuộc thi. Từ đó, ta sẽ có động lực cũng như ghi nhớ tốt hơn các syntax và tình huống xử lý cụ thể trong ngôn ngữ lập trình Python.

Mỗi chương được trình bày bằng nhiều notebooks. Trong mỗi notebooks, có những đoạn code và phần ghi chú bằng Tiếng Việt cho người mới dễ theo dõi. Bên cạnh là Tiếng Anh được dùng trong những comment đơn giản. Ta có thể học bằng cách nhập lại đoạn code trên máy của mình và quan sát phản hồi. Những cú pháp khó hiểu, ta có thể tra Google để tìm hiểu thêm thông tin. Mỗi tuần, tôi sẽ cố gắng hoàn tất một chương cho đến lúc hoàn thành mini course này.

Kết thúc series, tôi hy vọng mọi người sẽ phát triển được các kỹ năng thực tế vào trong công việc, cải thiện khả năng quan sát và phân tích dữ liệu, hoặc có thể dùng course này làm tài nguyên training cho team DS của mình.

Tiếp tục đọc “Data Science mini course”

Rèn giũa mindset của một Data Scientist

analytics_diary

Trong bài viết này, tôi xin chia sẻ một vài kinh nghiệm của mình trong quá trình làm việc với Data Science (DS). Về cơ bản, tôi nghĩ các bạn cũng đã hiểu khái quát thế nào là DS, những phương pháp và ứng dụng thực tiễn của ngành này. Nên ở đây, tôi sẽ đề cập đến mindset nhiều hơn. Lý do, mindset khi làm DS sẽ khác Software engineer rất nhiều.

Ở đây, tôi sẽ tổng hợp những sai lầm mà những bạn junior hay các bạn chuyển ngành thường mắc phải. Tôi may mắn hơn mọi người là được các anh chị đi trước nhẫn nại hướng dẫn tận tình để chỉ ra những điểm chưa tốt, cho tôi nhiều cơ hội để tôi ngày càng tiến bộ hơn trên con đường mà mình đã chọn. Tôi cũng từng là một junior trong lĩnh vực này, cũng từng mắc sai lầm nên tôi muốn đúc kết lại một vài kinh nghiệm để các bạn đi sau hạn chế mắc phải.

Tiếp tục đọc “Rèn giũa mindset của một Data Scientist”

Vọc thử Orange: phần mềm data mining

orange_overview

Tôi thường nhận được nhiều câu hỏi từ các bạn ở nhóm ngành khác IT, rất quan tâm đến lĩnh vực Data mining và Machine learning, rằng họ không biết nên bắt đầu từ đâu và như thế nào, có cần phải học lập trình không, có cần phải biết xác suất thống kê không. Tôi thường trả lời rằng:

Cũng giống như bạn chơi piano vậy, bạn không cần phải học nhạc lý để có thể chơi được nhạc cụ này nhưng nếu bạn không học những kiến thức căn cơ đó, bạn chỉ chơi được ở level trung bình, chỉ đủ thoả mãn sở thích, không đi xa và lâu dài được.

Lập trình và thống kê toán là một trong các kĩ năng không thể thiếu để tiến hành xây dựng các mô hình phân tích và nghiên cứu phức tạp. Tuy nhiên, những người không biết lập trình vẫn có thể sử dụng các sản phẩm phần mềm để phân tích và xử lý thông tin ở mức cơ bản một cách nhanh chóng mà không cần biết lập trình. Điển hình là các phần mềm spreadsheet quen thuộc như Excel (Windows), Libre office Calc (Linux), Numbers (Mac OS). Ta có thể làm các thống kê trên bảng dữ liệu (sum, count, avg, stddev, quantile, etc.), transform dữ liệu, load dữ liệu từ nhiều nguồn, visualize bằng các biểu đồ trực quan, thậm chí ta có thể làm data mining nếu ta cài thêm các plugin cho chúng.

Xu hướng tương lai mà các bạn sẽ nhận thấy đó là tất cả các tác vụ hiện nay mà Data Engineer/Analyst/Scientist đang làm mỗi ngày dần dần sẽ bị thay thế bởi các công cụ automation mạnh mẽ và trực quan, tiết kiệm chi phí thực nghiệm thay vì hàng tuần, tháng chỉ cần một hai ngày là hoàn tất. Đó cũng là mục đích tiến hoá của ngành công nghiệp, cố gắng tự động hoá các công việc tay chân vất vả, nhàm chán để nhường chỗ cho con người sáng tạo ở các vai trò khác quan trọng hơn. Bản thân tôi cũng thuộc type người lười công việc tay chân, không thích coding nhiều, cái gì automation được thì tôi rất muốn thử và sử dụng ngay.

Orange là một trong những công cụ Data mining nhắm đến mục tiêu tự động hoá này. Tôi nhận thấy đây là phần mềm dễ sử dụng nhờ giao diện nhỏ gọn, các toolbox được sắp xếp hợp lý mạch lạc, ai cũng có thể bắt đầu. Trong bài viết này, tôi sẽ tiến hành phân tích dữ liệu cũng như cài đặt một số hàm Machine learning quen thuộc để cho các bạn mới bắt đầu có thể hình dung vắn tắt một pipeline làm việc với dữ liệu thì sẽ như thế nào.

Bài viết sẽ bắt đầu bằng lược đồ overview của workflow mà bạn đang quan tâm rồi mới đi vào chi tiết từng thành phần. Trong quá trình hướng dẫn, những bước đã được trình bày, tôi sẽ lướt qua và chỉ đề cập đến các bước mới. Ở mỗi phần, tôi cũng dẫn link đến file Orange workflows (*.ows) để các bạn có thể download về tham khảo.

Tiếp tục đọc “Vọc thử Orange: phần mềm data mining”

XGBoost: thuật toán giành chiến thắng tại nhiều cuộc thi Kaggle

xgboost_illustrate

XGBoost là viết tắt của Extreme Gradient Boosting. Đây là thuật toán state-of-the-art nhằm giải quyết bài toán supervised learning cho độ chính xác khá cao bên cạnh mô hình Deep learning như chúng ta từng tìm hiểu.

Nếu Deep learning chỉ nhận đầu vào là raw data dạng numerical (ta thường phải chuyển đổi sang n-vector trong không gian số thực) thì XGBoost nhận đầu vào là tabular datasets với mọi kích thước và dạng dữ liệu bao gồm cả categorical mà dạng dữ liệu này thường được tìm thấy nhiều hơn trong business model, đây là lý do đầu tiên tại sao các cá nhân tham gia Kaggle thường sử dụng.

Bên cạnh đó, XGboost có tốc độ huấn luyện nhanh, có khả năng scale để tính toán song song trên nhiều server, có thể tăng tốc bằng cách sử dụng GPU, nhờ vậy mà Big Data không phải là vấn đề của mô hình này. Vì thế, XGBoost thường được sử dụng và đã giành được nhiều chiến thắng trong các cuộc thi tại Kaggle.
Tiếp tục đọc “XGBoost: thuật toán giành chiến thắng tại nhiều cuộc thi Kaggle”

FAQ: Big data cho người mới bắt đầu

Cảm ơn TopDev và các bạn trẻ đã tổ chức và hỗ trợ tôi hoàn thành tốt buổi chia sẻ hôm thứ bảy 30/09/2017 vừa qua. Mặc dù trời mưa to, nhưng các bạn khán giả vẫn tham gia khá đầy đủ. Tuy có nhiều phần chưa đáp ứng được mong đợi của mọi người nhưng phần hỏi đáp luôn là phần sôi động nhất đã lắp được phần nào khoảng trống này. Hy vọng, mỗi bạn đều đem về được những kinh nghiệm thiết thực khi đụng đến công nghệ xử lý Big Data, cụ thể là Apache Spark. Bên dưới, tôi xin tổng hợp lại các câu hỏi thường gặp trong buổi chia sẻ này cùng với Slide chứa notebook về Spark bên trên. Nếu bạn nào có thêm câu hỏi, mình sẽ cập nhật vào bài viết này để thêm phần phong phú cho các bạn khác tìm hiểu và tham khảo.

Notebooks:

Các event trước:

Thế nào thì được gọi là Big Data?

Big Data thoả tính chất 5V thì được gọi là Big. Cá nhân mình thấy 3 điểm sau thì đã gọi là Big rồi.

  1. Dữ liệu phức tạp (unstructured data).
  2. Tốc độ phình to nhanh, tính theo giây.
  3. Không thể xử lý với các công nghệ trước đó.

Có cần phải học thêm bằng cấp nào không?

Các nhà tuyển dụng hiện tại xem kinh nghiệm quan trọng hơn bằng cấp. Một số công nghệ nên biết: Docker, PostgreSQL, MongoDB, Apache Spark, Bash shell, AWS, Kafka, Jenkins.

Nếu bạn có thêm các Certificate cloud computing sau thì cũng có thể tạo nên lợi thế riêng:

Tiếp tục đọc “FAQ: Big data cho người mới bắt đầu”

Làm việc với Spark DataFrames – Truy vấn nâng cao (Subqueries, Cube, Rollup)

spark_dataframe_cube

Tiếp theo bài Truy vấn cơ bản với Spark Dataframe, bài viết này tập trung sử dụng Spark-SQL để thực hiện các truy vấn SQL nâng cao hơn như truy vấn lồng và tổng hợp dữ liệu với Cube, Rollup. Lý do sử dụng SQL thay vì các hàm dựng sẵn của Dataframe là do tính dễ dùng. Ta đã quá quen thuộc với cú pháp và cách truy vấn sử dụng ngôn ngữ này.

Thông qua notebook, ta sẽ biết cách đặt truy vấn lồng tại các mệnh đề SELECT, FROM, WHERE như thế nào thông qua các ví dụ minh hoạ đơn giản. Sau đó, ta tiếp tục bước tổng hợp dữ liệu cho OLAP ra sao. Dữ liệu được phát sinh từ trang https://www.mockaroo.com/.

Snippet thường dùng

  • để xem tổng thời gian thực thi lệnh.
    %% time:
  • Truyền tham số trường hợp muốn tạo module và import vào notebook khác.
    sqlContext
  • Xử lý giá trị bị thiếu tại thuộc tính cụ thể.
    fillna({"attr": "val"})
  • Bỏ chọn thuộc tính liên tiếp.
    drop("attr_a", "attr_b)
  • Testing trong quá trình viết hàm.
    assert(val1 == val2)

Download:

Thống kê ứng dụng 3: Các vấn đề trong thống kê

ANOVA

Trong phần 1, ta đã biết về các khái niệm: means, median, standard deviations. Phần 2, ta cũng đã biết cách tính confidence interval và thực hiện hypothesis testing như thế nào. Trong phần cuối series học thống kê thông qua lập trình Jupyter notebook, ta giải quyết các vấn đề trong thống kê gồm:

  • Tính khoảng tin cậy như thế nào nếu mẫu dữ liệu thu thập nhỏ hơn 30?
  • So sánh hai quần thể xem chúng có khác biệt nhau hay không (thường ứng dụng trong A/B testing)?
  • Làm sao để kiểm tra 2 bản báo cáo lượt view giữa Facebook và Google bằng Chi-square?
  • ANOVA trong việc phân tích mức độ yêu thích của người dùng giữa các bộ phim?

Download: Jupyter notebook

Thống kê ứng dụng 2: Suy luận thống kê

Statistics for Hackers

Ở phần trước, ta đã tìm hiểu các khái niệm cơ bản của thống kê như means, median, standard deviations, probability, normal distribution, central limit theorem. Những độ đo này giúp ta hiểu biết tổng quan về dữ liệu đang phân tích. Trong phần tiếp theo, ta sẽ tìm hiểu về suy luận thống kê từ các độ đo này. Ta sẽ biết thế nào là độ lỗi chuẩn (standard error), làm sao để tính khoảng tin cậy (confidence interval) cho một mẫu bất kỳ vừa thu thập được, và thực hiện kiểm định giải thuyết như thế nào cho những câu hỏi được đặt ra.

Tất cả những thao tác này được gọi là suy luận thống kê (inferential statistics). Ví dụ, một lớp học gồm 50 học sinh. Trong đó, các bạn nữ cho rằng mỗi lần khảo bài thì họ bị gọi lên nhiều hơn các bạn nam. Họ cho rằng như vậy giáo viên đã thiên vị. Còn giáo viên thì cho rằng họ thực hiện điều này một cách ngẫu nhiên. Vậy ai đúng trong trường hợp này. Thông qua suy luận thống kê, ta sẽ tiến hành lấy mẫu thực nghiệm, đặt giả thuyết thống kê, xác định ngưỡng bác bỏ \alpha, tính toán z-score và p-value, cuối cùng là so sánh \alpha và p-value để xem kết luận cuối cùng là gì.

Download: Jupyter notebook

Xem thêm:

Thống kê ứng dụng 1: Quan sát dữ liệu

rating_histogram

Học thống kê thông qua lập trình sẽ giúp ta không chỉ kiểm chứng lại lý thuyết đã học mà còn hỗ trợ nắm bắt các khái niệm phức tạp một cách dễ dàng hơn. Thêm vào đó, ta sẽ biết cách ứng dụng những kiến thức này vào trong công việc khi cần thiết.

Ta sử dụng Jupyter notebook để điểm qua các khái niệm, thao tác cơ bản giúp quan sát và mô tả dữ liệu. Ta sẽ phân biệt được các loại dữ liệu (nomial, numbers, odinal, ratio) trong dataset như thế nào, tìm trọng tâm của tập dữ liệu, quan sát sự biến đổi của dữ liệu thông qua các chỉ số cơ bản (range, variance, standard deviation, z-score, percentile), cùng với một vài nguyên lý tính xác suất Bayes và cách mô phỏng central limit theorem.

z_score_distribution

central_limit_on_rating

AI, Machine Learning, Deep Learning phân biệt như thế nào cho đúng

AI là một thuật ngữ cao siêu mà có lẽ ai cũng từng nghe qua. Lấy cảm hứng từ bộ phim hoạt hình Baymax (Big hero 6), một chú robot thông minh phục vụ và chăm sóc sức khoẻ con người, cũng như có bạn đọc yêu cầu giải đáp thuật ngữ này nên tôi quyết định dành ra một góc để nói về AI.

Bài viết nhằm mục đích làm sáng tỏ cho những bạn chưa phân biệt được các khái niệm AI, Machine Learning – ML và Deep Learning – DL. Dĩ nhiên, người trong ngành phân biệt điều này khá dễ nhưng để có thêm thông tin bổ ích tôi sẽ tổ chức lại kiến thức liên quan để bạn đọc quan tâm tìm hiểu và tiện tra cứu tài liệu hơn.

Tiếp tục đọc “AI, Machine Learning, Deep Learning phân biệt như thế nào cho đúng”

Information extraction – Bài toán rút trích thông tin trong văn bản

brat_annotation_tools

Trong bài viết này, ta sẽ khảo sát bài toán Rút trích thông tin (Information extraction – IE), một nhánh nghiên cứu nâng cao thiên về rút trích thông tin ngữ nghĩa trong văn bản. Từ đây, ta sẽ có nhiều ứng dụng cho nhiều domain như Web mining (rút trích tên người nổi tiếng, sản phẩm đang hot, so sánh giá sản phẩm, nghiên cứu đối thủ cạnh tranh, phân tích tâm lý khách hàng), Biomedical, Business intelligent, Financial professional (đánh giá thị trường từ các nguồn khác nhau: giá xăng dầu tăng giảm, thông tin chiến tranh, chính trị giữa các nước, điều luật mới trong thị trường kinh doanh), Terrism event (sử dụng vũ khí gì, đối tượng tấn công là ai).

Sau các bước tiền xử lý thiên về từ vựng và cú pháp như tách câu, tách từ, phân tích cú pháp, gán nhãn từ loại. Từ IE ta sẽ đơn giản hóa thành các bài toán con gồm: Rút trích tên thực thể (Named entity recognition – NER: people, organization, location), phân giải đồng tham chiếu (Coreference resolution) và Rút trích quan hệ giữa hai thực thể (Relation extraction – RE: founderOf, headQuarteredIn). Các mô hình khi thực nghiệm sẽ được đánh giá thông qua các chỉ số Precision, Recall, F1-score. Dưới đây là một ví dụ về rút trích quan hệ trong câu.

Tiếp tục đọc “Information extraction – Bài toán rút trích thông tin trong văn bản”