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:

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
Continue reading “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

Continue reading “Python snippet: Visualizing”

Làm việc với Spark DataFrames – Truy vấn cơ bản

Spark DataFrames
Spark DataFrames

DataFrame là một kiểu dữ liệu collection phân tán, được tổ chức thành các cột được đặt tên. Về mặt khái niệm, nó tương đương với các bảng quan hệ (relational tables) đi kèm với các kỹ thuật tối ưu tính toán.

DataFrame có thể được xây dựng từ nhiều nguồn dữ liệu khác nhau như Hive table, các file dữ liệu có cấu trúc hay bán cấu trúc (csv, json), các hệ cơ sở dữ liệu phổ biến (MySQL, MongoDB, Cassandra), hoặc RDDs hiện hành. API này được thiết kế cho các ứng dụng Big Data và Data Science hiện đại. Kiểu dữ liệu này được lấy cảm hứng từ DataFrame trong Lập trình R và Pandas trong Python hứa hẹn mang lại hiệu suất tính toán cao hơn.

Spark DataFrames Performance
Spark DataFrames Performance

Trong bài viết này, tôi sẽ tiến hành thực nghiệm một vài truy vấn cơ bản để làm quen với kiểu dữ liệu DataFrames. Ở các bài viết sau, ta sẽ đi sâu hơn vào các truy vấn nâng cao và phức tạp hơn.

Continue reading “Làm việc với Spark DataFrames – Truy vấn cơ bản”

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.

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

Exploratory Data Analysis: Các nguyên tắc trình bày biểu đồ

7 Kinds of Data Stories
7 Kinds of Data Stories

Mục tiêu của trình bày biểu đồ là để giao tiếp thông tin rõ ràng, toàn vẹn, và hiệu quả hơn. Một biểu đồ được trình bày tốt sẽ khuyến khích sự tham gia của nhiều thành viên trong nhóm, cũng như giúp mọi người tập trung vào bài báo cáo hơn. Với tập dữ liệu đồ sộ, ta cần một cách hiệu quả để có thể hiểu được tính chất của tập dữ liệu đó. Hệ thống thị giác của con người là kênh đón nhận thông tin nhanh chóng và hiệu quả nhất nên việc nắm bắt các nguyên tắc khi trình bày là một kiến thức hữu ích.

Continue reading “Exploratory Data Analysis: Các nguyên tắc trình bày biểu đồ”

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

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

Statistical Inference: P Values

P Values

Trong bài viết này ta sẽ nói về p-values, không phải là một phương thức để kiểm định mà là một độ đo về tầm quan trọng của thống kê (nghĩa là xác suất của dữ kiện D xảy ra nếu (nhấn mạnh: “nếu”) giả thuyết đảo H_a là sự thật.). Tuy nhiên, bởi vì chúng phổ biến và chúng được sử dụng rất nhiều, và thường bị hiểu lầm hay diễn giải sai. Trong phần này, ta sẽ tập trung vào làm thế nào để phát sinh và diễn giải giá trị này một cách đúng đắn.

Notebooks: p_value.

Statistical Inference: Kiểm định giả thuyết thống kê (Hypothesis Testing)

Power

Việc xác định qui luật xác suất của các biến (variable) có mặt trong tổng thể (population) là một điều cần thiết trong xử lí số liệu. Bài toán ước lượng tham số (parameter estimation) mới chỉ giải quyết việc ước lượng tham số có mặt trong phân phối xác suất của tổng thể (probability distribution of population). Trong baì viết này, ta sẽ xây dựng các qui tắc đánh giá giả thuyết (evaluate hypothesis) về các tham số. Qua các qui tắc kiểm định, ta có thể biết được cách xây dựng các giả thuyết (NULL hypothesis) và đối thuyết (alternative hypothesis) trong từng trường hợp cụ thể. Bài toán kiểm định giả thuyết thống kê (hypothesis testing) là một bài toán lớn và quan trọng của thống kê toán học.

Notebooks: hypothesis_testing.

Statistical Inference: Tiệm cận (Asymptotics)

Coin plot 10000

Trong bài viết này ta sẽ thảo luận về tiệm cận (asymptotics), làm thế nào để miêu tả dáng điệu của thống kê khi kích thước mẫu ngày càng tiến đến vô cùng. Giả định kích thước mẫu và kích thước quần thể là vô cùng, điều này hữu ích cho việc suy diễn thống kê và xấp xĩ.

Notebooks: LoLN and CTL.

Continue reading “Statistical Inference: Tiệm cận (Asymptotics)”

Statistical Inference: Xác suất (Probability)

distribution
distribution

Trong bài viết này, ta sẽ khảo sát các khái niệm về xác suất (probability), là một số thực diễn tả khả năng xảy ra của một biến cố (event, outcome). Continue reading “Statistical Inference: Xác suất (Probability)”

Exploratory Data Analysis: Các hệ thống Plotting

xyplot plotting 2x2
Trong bài viết này, ta sẽ khảo sát tổng quan ba hệ thống plotting trong R. Mỗi hệ thống có điểm mạnh và điểm yếu riêng. Chúng ta sẽ tìm hiểu sơ về ý tưởng tổng quát của các hệ thống này. Ở các bài viết sau, ta sẽ đi vào chi tiết hơn.

Notebooks: explore_plot_sys.

Exploratory Data Analysis: K Means Clustering

 

K Means Clustering
K Means Clustering

Trong bài viết này, ta sẽ khảo sát về k-means clustering, một cách đơn giản khác để quan sát tập dữ liệu đa chiều (multi-dimensional data). Tương tự như hierarchical clustering, kĩ thuật này hữu ích khi bước đầu phân tích dữ liệu (quan sát mối quan hệ giữa các điểm dữ liệu, thuộc tính).

Notebooks: explore_kmeans_clustering.

Exploratory Data Analysis: Hierarchical Clustering

 

Hierarchical Clustering
Hierarchical Clustering

Hôm nay, chúng ta sẽ tìm hiểu về hierarchical clustering. Đây là kĩ thuật hữu ích trong giai đoạn đầu phân tích dữ liệu, nó giúp chúng ta hiểu rõ hơn về tập dữ liệu đang khảo sát (nhận dạng mẫu, mối quan hệ giữa các thuộc tính). Hierarchical clustering có nghĩa là tạo ra cây phân cấp các nhóm dữ liệu.

Notebooks: explore_hierarchical_clustering.

Exploratory Data Analysis: Các biểu đồ cơ bản

boxplot
boxplot

Trong bài viết này, ta sẽ thảo luận về exploratory graphs (các biểu đồ cơ bản). Đây là một công cụ quan trọng và đóng một vai trò đặc biệt trong qúa trình phân tích dữ liệu.

Notebooks: explore_basic_chart.

Lấy và làm sạch dữ liệu với R: Gom nhóm và kĩ thuật Chaining với dplyr

Ở bài viết trước, chúng ta đã học về năm thao tác chính trong dplyr: select(), filter(), arrange(), mutate(), và summarize(). Hàm summarize() rất mạnh mẽ trong việc áp dụng dữ liệu đã gom nhóm. Chúng ta tiếp tục làm việc với tập dữ liệu 225,000 packages của R. Ở đây, ta dùng file log July 8, 2014 (http://cran-logs.rstudio.com/).

Notebooks: r_group_by.