+1

R programming language

Giới thiệu về ngôn ngữ R

R là một ngôn ngữ lập trình và môi trường phần mềm dành cho tính toán và đồ họa thống kê. Đây là một bản hiện thực ngôn ngữ lập trình S (phần mềm phân tích dữ liệu và quản lý dữ liệu) với ngữ nghĩa khối từ vựng lấy cảm hứng từ Scheme. R do Ross Ihaka và Robert Gentleman tạo ra tại Đại học Auckland, New Zealand, đến nay do R Development Core Team chịu trách nhiệm phát triển.

Tại sao lại là R

  • Phần mềm hoàn toàn miễn phí, chứa nhiều package thông dụng
  • Open source
  • Chứa rất nhiều phần mềm phân tích
  • Khả chuyển
  • Hỗ trợ rất tốt về đồ họa: thiết kế các biểu đồ cho các bài báo khoa học Thông thường đối với dân kỹ thuật chung ta thường biết đến matlab mà ko hay để ý rằng các bài báo về khoa học sẽ sử dụng các phương thức của R.

So sánh giữa MATLAB và R

  • 1 điểm mình nghĩ khác biệt lớn nhất đó là với các sinh viên kỹ thuật Matlab là một phần mềm khá là quen thuộc, tuy nhiên với các sinh viên ngành thống kê thì R lại là phần mềm họ được biết đến đầu tiên.
  • MATLAB dành cho việc thiết kế các thuật toán, mô phỏng, và tạo nguyên mẫu (prototyping). MATLAB có những thư viện được phát triển riêng biệt dành cho các hoạt động trên ma trận có tên là LAPACK, và BLAS, khiến cho nó làm việc nhanh hơn rất nhiều. R có thể sử dụng BLAS nhưng đó không phải là chức năng có sẵn. MATLAB cũng có một trong những công cụ gỡ lỗi tốt nhất khiến cho quá trình tạo nguyên mẫu nhanh hơn nhiều. Sự bổ sung các phần như: tính toán song song dễ dàng và các công cụ tối ưu hóa trong MATLAB, phần mở rộng Simulink, và các công cụ của hãng thứ ba như CPLEX, TOMLAB, và CVX, làm cho MATLAB là công cụ lý tưởng dành cho những kỹ sư và những người làm khoa học vật lý
  • R rất tuyệt vời trong việc phân tích dữ liệu và thống kê. Việc định dạng dữ liệu thô để phân tích trong R dễ dàng hơn. Các công cụ như dplyr, tidyr và Reshape cung cấp những khả năng phân tích và chuyển đổi dữ liệu dễ dàng và miễn phí. Các biểu đồ và đồ thị được tạo ra bởi R lúc đầu rất khó tùy chỉnh và về mặt trực quan là không mấy ấn tượng. Nhưng giờ đây, với việc bổ sung thêm gói ggplot2, việc in ra các file PDF chất lượng cao, tùy chỉnh các đồ thị, và tạo ra nhiều kiểu biểu đồ khác nhau đã được thực hiện dễ dàng hơn và các khả năng trực quan của R cũng hữu ích và thân thiện hơn so với sử dụng MATLAB. Kể từ khi R được sử dụng nhiều trong thống kê, các package của nó cho những công việc như phân tích kết quả thực nghiệm, chạy các mô hình dự báo, hồi quy logistic, và phương pháp random forest thường xuyên được gỡ lỗi và cập nhật trên CRAN, điều này khiến R trở thành lựa chọn tốt nhất cho các tác vụ như vậy.

Một số lệnh thông dụng

Lệnh về môi trường vận hành

            getwd()                        Cho biết directory hiện hành
            setwd(c:/works)          chuyển directory vận hành về c:\works
            options(prompt="R")   Đổi prompt thành R>
            options(width=100)     Đổi chiều rộng cửa sổ R thành 100 characters 
            options(scipen=3)       Đổi số thành 3 số thập phân (thay vì kiểu 1.2E-04) 
            options()                      Cho biết các thông số về môi trường của R

Lệnh cơ bản

            ls()                                Liệt kê các đối tượng (objects) trong bộ nhớ 
            rm(object)                    Xóa bỏ đối tượng
            seach()                         Tìm hướng 

Tạo nên số ngẫu nhiên bằng mô phỏng theo các luật phân phối (simulation)

            rnorm(n, mean=0, sd=1)        Phân phối chuẩn (normal distribution) với trung bình = 0 và độ lệch chuẩn = 1.
            rexp(n, rate=1)                       Phân phối mũ (exponential distribution)
            rgamma(n,shape,scale=1)    Phân phối gamma
            rpois(n, lambda)                    Phân phối Poisson
            rweibull(n,shape,scale=1)     Phân phối Weibull
            rcauchy(n,location=0,scale=1)     Phân phối Cauchy
            rbeta(n, shape1, shape2)              Phân phối beta
            rt(n, df)                                          Phân phối t
            rchisq(n, df)                                   Phân phối Khi bình phương
            rbinom(n, size, prob)                     Phân phối nhị phân (binomial)
            rgeom(n, prob)                              Phân phối geometric
            rhyper(nn, m, n, k)                         hypergeometric
            rlnorm(n,meanlog=0,sdlog=1)       Phân phối log normal
            rlogis(n,location=0,scale=1)          Phân phối logistic
            rnbinom(n,size,prob)                      Phân phối negative Binomial
            runif(n,min=0,max=1)                     Phân phối uniform

Phân tích thống kê

            plot(y~x)                      Vẽ đồ thị y và x (scatter plot)
            hist(x)                          Vẽ đồ thị y và x (scatter plot)
            plot(y ~ x | z)               Vẽ hai biểu đồ x và y theo từng nhóm của z
            pie(x)                           Vẽ đồ thị tròn
            boxplot(x)                    Vẽ đồ thị theo dạng hình hộp
            qqnorm(x)                   Vẽ phân phối quantile của biến số x
            qqplot(x, y)                  Vẽ phân phối quantile của biến số y theo x
            barplot(x)                    Vẽ biểu đồ hình khối cho biến số x
            hist(x)                          Vẽ histogram cho biến số x
            stars(x)                        Vẽ biểu đồ sao cho biến số x
            abline(a, b)                  Vẽ đường thẳng với intercept=a và slope=b
            abline(h=y)                  Vẽ đường thẳng ngang
            abline(v=x)                  Vẽ đường thẳng đứng
            abline(lm.object)        Vẽ đồ thị theo mô hình tuyến tính

Một số package thông dụng

Đọc dữ liệu

readr

Đọc dữ liệu từ các tập tin csv:

  • read.csv
  • read.table
  • read.fwf
readxl

Page đọc tập tin từ excel và chuyển thành data.frame. Pagekage này sử dụng thư viện phát triển bằng C++, có thể đọc đưuọc .xls và .xlsx

library(readxl)

## read_excel reads both xls and xlsx files
read_excel("my-old-spreadsheet.xls")
read_excel("my-new-spreadsheet.xlsx")

## Specify sheet with a number or name
read_excel("my-spreadsheet.xls", sheet = "data")
read_excel("my-spreadsheet.xls", sheet = 2)

## If NAs are represented by something other than blank cells,
## set the na argument
read_excel("my-spreadsheet.xls", na = "NA")
haven

package cho phép đọc tập tin định dạng SPSS, Stata, SAS, hỗ trợ chuyển thành data.frame

library(readxl)

## Read file from SAS
read_sas("path/to/file")

## Read file from SPSS
read_por("path/to/file")
read_sav("path/to/file")

## Read file from Stata
read_dta("path/to/file")
ggplot2

package nổi tiếng nhất của R trình diễn dữ liệu tĩnh (static), cho phép người dùng có thể tạo các đồ thị nhanh chóng với không nhiều các dòng lệnh. Package được xây dựng trên cơ sở lý thuyết “Ngữ pháp đồ hoạ” - Grammar of graphic của Leland Wilkinson và các đồng sự (2005). Rất nhiều thư viện đồ hoạ sau này phát triển cùng triết lý này với ggplot2

library(ggplot2)

dat <- data.frame(time = factor(c("Lunch","Dinner"), levels = c("Lunch","Dinner")),
        total_bill = c(14.89, 17.23))

## Very basic bar graph
ggplot(data = dat, aes(x = time, y = total_bill)) +
  geom_bar(stat = "identity")

## Map the time of day to different fill colors
ggplot(data = dat, aes(x = time, y = total_bill, fill = time)) +
  geom_bar(stat = "identity")

## Add a black outline
ggplot(data = dat, aes(x = time, y = total_bill, fill = time)) +
  geom_bar(colour = "black", stat = "identity")

## No legend, since the information is redundant
ggplot(data = dat, aes(x = time, y = total_bill, fill = time)) +
  geom_bar(colour = "black", stat = "identity") +
  guides(fill = FALSE)

ggthemes

Package nên dùng đi kèm với ggplot2, cho phép người dùng có thể tuỳ biến layout dễ dàng với nhiều template dựng sẵn

dplyr

Package giúp việc thao tác với data frame dễ dàng và thậm chí có thể tương tác với cơ sở dữ liệu quan hệ. Kết hợp với toán tử %>%, nhiều người cho rằng dplyr đã tạo ra 1 concept mới cho R là ngữ pháp của thao tác dữ liệu, hàm ý so sánh với ngữ pháp của đồ thị.

data.table

Khi kích thước của data frame, thao tác xử lý có thể tốn rất nhiều thời gian. data.table được phát triển trên nền của C++ và sử dụng nhiều khái niệm của C++ giúp tối ưu hiệu năng khi thực thi. Tuy nhiên cú pháp của dplyr không trong sáng và dễ đọc như dplyr

reshape2

Khi bạn chuyển đổi data frame từ wide format sang long format thì đây là package rất hữu ích

Tổng kết

Trên đây là một số khái quát về R, chi tiết cài đặt bạn có thể tham khảo tại http://cran.R-project.org hi vọng bài viết phần nào giúp các bạn nắm bắt được thêm thông tin về 1 ngôn ngữ mới 😄


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.