Làm thống kê với R

R — đầy đủ là GNU R — là một ngôn ngữ lập trình dành cho phân tích / biểu diễn dữ liệu.

Khi tên một phần mềm có chữ GNU đứng đầu, ám chỉ nó là một sản phẩm của tổ chức GNU — tức là miễn phí hoàn toàn.

Vào năm 2017, R là nền tảng hấp dẫn thứ 2 (nó đứng thứ 1 năm 2016) cho việc phân tích dữ liệu. Python soán ngôi thứ nhất — khi vừa cung cấp nhiều tính năng giống R, lại vừa là một ngôn ngữ lập trình đa mục đích.

Tại sao lại không dùng Python?

Tư duy loại bỏ tồn tại ở rất nhiều người, khi dùng cái A thì sẽ không dùng cái B. Trên thực tế, người ta dùng cả R lẫn Python, chỗ nào tiện cái gì thì dùng cái đó. Nếu bạn biết Python, biết thêm R càng tốt.

Ngoài ra, nếu là người mới bắt đầu, cuốn sách học thống kê (MIỄN PHÍ) tuyệt vời An Introduction to Statistical Learning, có các ví dụ viết bằng R.

Một cuốn sách cũng MIỄN PHÍ khác: Probability and Statistics for Programmers dùng Python.

Cài đặt

Trên Ubuntu 16.04 (phiên bản Ubuntu tốt nhất hiện tại — Không dùng Windows, lập trình trên Windows là nguồn gốc của mọi đau thương).

sudo apt-get update && sudo apt-get install -y r-base

Lệnh sudo chờ người dùng gõ mật khẩu máy vào, lúc gõ nó sẽ không hiện gì cả, bao giờ gõ xong, enter là được. Ngồi chờ một lúc, nếu không có thông tin lỗi xảy ra tức là đã cài thành công R. Nếu đen đủi, thử cài bằng cách khác xem ở đây.

Từ terminal (nếu không biết nó là cái gì, đọc thêm ở đây ), gõ lệnh để xem phiên bản của R:

$ R --version
R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

Đây là bản 3.2, nên nhớ phiên bản để phân biệt các câu lệnh cho các phiên bản khác nhau có thể có trong tài liệu.

Chạy R

Gõ vào terminal chữ R hoa:

$ R
R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
  Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
[Previously saved workspace restored]
>

Dấu mũi tên chờ ta gõ lệnh.

q() rồi enter để thoát, chọn lưu thông tin đang làm việc hay không tùy ý.

> q()
Save workspace image? [y/n/c]: n

Cài package từ CRAN

Sự thành công — phổ biến của R hay Python, chính là nhờ sức mạnh của cộng đồng. Các nhà khoa học trên thế giới chia sẻ code R của mình lên mạng thông qua: CRAN — Comprehensive R Archive Network. Với Python đó là PyPi.

Để cài package từ CRAN, bật R lên và gõ

> install.packages(TEN_PACKAGE)

Ví dụ: cài package ggplot2 để vẽ (plot) hình theo phong cách "The Grammar of Graphics"

> install.packages('ggplot2')
Installing package into ‘/home/hvn/R/x86_64-pc-linux-gnu-library/3.2’
(as ‘lib’ is unspecified)
--- Please select a CRAN mirror for use in this session ---

chọn mirror mà mình sẽ tải package về từ đó, ở Việt Nam có mirror của Vinahost https://mirror.vinahost.vn/CRAN/ — giúp tải package về nhanh hơn, không lo đứt cable — cám ơn Vinahost.vn.

PS: nên chọn https để tải, tránh dùng http (không s) để khỏi bị hacker tấn công.

Quá trình cài đặt package, nếu không thành công sẽ được R thông báo lỗi và kèm theo cách giải quyết, thường là cài thêm packge của hệ thống. Ví dụ lỗi khi thiếu thư viện libcurl4 thì sửa bằng cách chạy lệnh trên terminal:

sudo apt-get install libcurl4-openssl-dev

Tính toán vector, matrix với R

Hay “véc tơ” và “ma trận”:

> x = c(1,2,3,5)
> x
[1] 1 2 3 5
> y = c(5,3, 2, 1)
> y
[1] 5 3 2 1
> x + y
[1] 6 5 5 6
> z = x + y
> z
[1] 6 5 5 6
> ?length
> length(z)
[1] 4
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10

Tạo vector bằng function c - Combine Values into a Vector or List. ?function hiển thị thông tin về cách dùng function, ví dụ trên là ?length (bấm q để thoát cửa sổ đó). 1:10 sinh vector chứa các số nguyên từ 1->10.

Tạo matrix với function matrix(vector_phần_tử, số_hàng, số_cột), kiểm tra kích thước với dim:

> A = matrix(1:20, 2, 10)
> dim(A)
[1] 2 10
> A
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 3 5 7 9 11 13 15 17 19
[2,] 2 4 6 8 10 12 14 16 18 20
> B = matrix(10:19, 10, 1)
> B
[,1]
[1,] 10
[2,] 11
[3,] 12
[4,] 13
[5,] 14
[6,] 15
[7,] 16
[8,] 17
[9,] 18
[10,] 19
> A %*% B
[,1]
[1,] 1615
[2,] 1760

Tính tích của 2 ma trận (matrix product), ta dùng phép tính %*%. Các phép tính cộng trừ nhân chia + - * / sẽ được tính trên các phần tử tương ứng (element by element) của 2 ma trận cùng kích thước.

Xác suất và thống kê

Các khái niệm về thống kê xem tại bài viết này.

Sinh vector ngẫu nhiên tuân theo phân phối chuẩn (normal), có giá trị trung bình (mean) = 0 và độ lệch chuẩn (standard deviation) = 1:

> x = rnorm(100)
> mean(x)
[1] 0.08933046
> sd(x)
[1] 1.029229

Có thể tùy chỉnh mean và standard deviation:

> y = rnorm(100, mean=50, sd=.1)
> y
[1] 49.96206 49.86335 50.35193 49.87869 50.01944 50.00944 49.91215 50.02604
...
> mean(y)
[1] 50.00244
> sd(y)
[1] 0.1061952

Vẽ đồ thị — plotting

Function cơ bản để vẽ hình với R là plot, nhận vào các giá trị trục x, trục y, tên trục nếu có, tên đồ thị. Sau khi gõ enter, nó sẽ mở ra cửa sổ mới với hình vẽ của dữ liệu:

> k = rnorm(10)
> h = rnorm(10)
> plot(k, h, xlab="xxx", ylab="yyy", main="Plotttt")

R có rất nhiều hàm để vẽ các loại đồ thị khác nhau, với tùy chỉnh tùy ý. plot vẽ "scatterplot", như hình vẽ.

Chạy R trên Jupyter

Jupyter là nền tảng để thực hiện tính toán, hỗ trợ hơn 40 ngôn ngữ lập trình, với khả năng chạy code và vẽ đồ thị ngay trên trình duyệt Web — là phần mềm tiêu chuẩn để làm data. Xem hướng dẫn cài đặt ở http://pymi.vn/blog/jupyter-notebook/

Jupyter là một sản phẩm của cộng đồng Python. Cài thêm R kernel theo hướng dẫn ở: https://github.com/IRkernel/IRkernel

Sau đó bật Jupyter lên:

Gõ code như thường, vẽ đồ thị sẽ hiện ngay trên Jupyter. Dưới đây gõ theo ví dụ ở trang chủ của IRKernel, thu được hình vẽ đẹp như mộng (hình vẽ đẹp là do dùng thư viện ggplot2).

Xem thêm ở link bài gốc — do ở đây hiển thị không chính xác kết quả như Jupyter .

Các kết quả tìm kiếm khi thực hiện bài viết

Tài liệu

https://cran.r-project.org/doc/manuals/r-release/R-intro.html

Bài gốc xem tại https://github.com/pymivn/vinastats/blob/master/notebooks/introR/introR.ipynb

Học lập trình #Python 3 từ con số 0 thành lập trình viên chuyên nghiệp — viết crawler, làm web API, phân tích dữ liệu, tự động hệ thống tại https://pymi.vn #PyMI #PyFML #PyMiVN
Lớp HN khai giảng 21/9/2017. 
Bạn muốn tự học?!!! http://pymi.vn/tutorial/

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.