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:

Advertisement

Truy vấn văn bản – Document Retrieval

wikipedia

Giả sử bạn đang đọc một bài viết nào đó, hệ thống truy vấn văn bản sẽ giúp bạn tìm kiếm những bài viết tương tự như bài viết của bạn đang đọc. Vậy làm sao ta có thể tính được độ tương tự giữa các văn bản để tìm kiếm trong vô số các tài liệu có sẵn, tỷ lệ giống nhau về nội dung của các văn bản là bao nhiêu?

Trong bài viết này, ta sẽ sử dụng tập văn bản liên quan đến những người nổi tiếng download từ wikipedia (file csv đã xử lý có thể download ở đây) để xây dựng hệ thống truy vấn văn bản dựa trên nội dung đang đọc.

Notebooks: document_retrieval.ipynb

Hệ thống recommend bài nhạc

iTunes

Một trong những công nghệ giúp cho đời sống con người ngày càng dễ dàng hơn đó là recommender system. Recommender system giúp kết nối người dùng với sản phẩm mà họ tìm kiếm được thuận tiện và nhanh chóng hơn từ đó mang lại lợi thế cạnh tranh của sản phẩm so với các đối thủ khác. Bạn có thể bắt gặp hệ thống này ở các trang xem phim, nghe nhạc, mua bán, mạng xã hội, … Về cơ bản, bạn có thể áp dụng ngay kỹ thuật này vào hệ thống của bạn thông qua các hướng tiếp cận như: Popularity – liệt kê top các sản phẩm được nhiều người quan tâm nhất, Classification – dựa vào các chủ đề mà bạn cung cấp để lọc ra danh sách sản phẩm tương ứng. Tuy nhiên, các hướng tiếp cận này đều mang tính đại chúng, không nhắm vào một cá nhân cụ thể nào. Hơn nữa, không ai dễ dàng cung cấp thông tin cá nhân cho ứng dụng của bạn để có thể lọc thông tin phù hợp.

Do đó, trong bài viết này, tôi sẽ đi theo hướng tiếp cận Collaborative Filtering với hai phương pháp gồm Memory-Based Collaborative Filtering và Model-Based Collaborative filtering giúp trả lời hai câu hỏi “user nghe bài nhạc này thì sẽ có xu hướng nghe các bài như…” và “user có gu âm nhạc như bạn thì sẽ có xu hướng nghe các bài nhạc như…”. Trong đó, Model-Based sẽ sử dụng singular value decomposition (SVD) và Memory-Based sử dụng khoảng cách cosine để mô hình hóa hệ thống. Bạn có thể download dữ liệu từ đây Million Song Dataset Challenge.

Notebooks: song_recommender.ipynb
Source code:
Github.

Sentiment Analysis cơ bản

Amazon customer reviews
Sentiment analysis – hay phân tích tâm lý của đối tượng – là một chủ đề thách thức trong Machine Learning. Mọi người thể hiện cảm nhận của mình thông qua ngôn ngữ tự nhiên có bản chất nhập nhằng, mơ hồ đã gây không ít khó khăn cho việc xử lý cho máy tính hiểu. Chưa kể, họ sử dụng các cách chơi chữ, ẩn ý hay các kí hiệu như

:), :(, =)))

để giải bày cảm xúc của họ.

Trong bài viết này, tôi sẽ sử dụng tập dữ liệu Web data: Amazon Fine Foods reviews cho việc áp dụng kĩ thuật Sentiment analysis. Đây là tutorial cơ bản dành cho các bạn mới bắt đầu nghiên cứu vấn đề này. Ở đây, ta sẽ sử dụng hướng tiếp cận Bag of Words để chuyển đổi dữ liệu văn bản thành ma trận vector từ đó có thể đưa vào các mô hình phân lớp để học.

Notebooks: sentiment_analysis_basics.ipynb
Source code:
classification_algorithms.py

Python snippet: Thu thập dữ liệu

souping_oreilly

Trước khi có thể làm việc với dữ liệu, việc đầu tiên bạn cần làm là thu thập chúng. Có rất nhiều nguồn dữ liệu khác nhau như web, APIs, databases, những định dạng file plain text (.csv, .tsv). Sau khi thu thập, ta có thể thực hiện vài động tác chuẩn hoá dữ liệu sao cho phù hợp với nhu cầu làm việc của mình nhất.

Tiếp tục series Python snippet (Python snippet: Visualizing), tuần này tôi sẽ đưa vào một vài snippet thường gặp trong quá trình thu thập dữ liệu.
Source code: data-science-works
Thư viện: csv, json, re, collections, requests, bs4, twython
Tiếp tục đọc “Python snippet: Thu thập dữ liệu”

Python snippet: Visualizing

my-favorite-colors

Python snippet là series các bài viết tổng hợp lại những đoạn code hữu ích trong quá trình làm việc và nghiên cứu của tôi. Mục đích chủ yếu làm nơi tham khảo nhanh để tiết kiệm thời gian cài đặt và triển khai. Tôi sẽ bắt đầu với visualizing gồm các chart (biểu đồ) cơ bản thường hay dùng để phân tích dữ liệu.

Source code: data-science-works
Thư viện: matplotlib, numpy

Tiếp tục đọc “Python snippet: Visualizing”

Giới thiệu các công cụ Xử lý ngôn ngữ tự nhiên

NLP tools
NLP tools

Nếu bạn đang làm việc và nghiên cứu trên ngôn ngữ tiếng Anh thì ta có thể sử dụng các thư viện/module NLP của Python được liệt kê bên dưới. Mục đích của bài viết này được dùng để liệt kê những thư viện/module và những chức năng hữu ích trong NLP. Các bạn có thể tham khảo danh sách các thuật ngữ liên quan đến các chức năng ở bài viết này.

Tiếp tục đọc “Giới thiệu các công cụ Xử lý ngôn ngữ tự nhiên”

Apriori và FP-Growth với tập dữ liệu plants

Trong bài viết này, ta sẽ khai thác các tập phổ biến (frequent itemset) trên tập dữ liệu Plants (sự phân bố của một số loài thực vật ở khu vực Mỹ và Canada). Các công đoạn tiền xử lý được thực hiện bởi Python. Để dễ tiếp cận, các bước khai thác dữ liệu được thực hiện với Weka.

Plant
Plant

Tập dữ liệu: plants
Địa chỉ: http://archive.ics.uci.edu/ml/machine-learning-databases/plants/plants.data
Mô tả: http://archive.ics.uci.edu/ml/machine-learning-databases/plants/stateabbr.txt
Github: https://github.com/ongxuanhong/Apriori-and-FP-growth-with-plant-dataset

Tiếp tục đọc “Apriori và FP-Growth với tập dữ liệu plants”