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

Viet Hung Nguyen
Sep 12, 2017 · 6 min read

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.

Image for post
Image for post

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:

$ RR 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 localeR 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.

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

Tạo matrix với function , kiểm tra kích thước với :

> 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à , 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 ý. vẽ "scatterplot", như hình vẽ.

Image for post
Image for post

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:

Image for post
Image for post

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).

Image for post
Image for post

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/

PyMivn

Tin tức về thế giới xung quanh Python Việt Nam

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store