Tìm hiểu về các kiểu dữ liệu và tầm quan trọng của chúng trong một ngôn ngữ lập trình. Cụ thể hơn, học cách sử dụng các kiểu dữ liệu như vector, ma trận, list và dataframe trong ngôn ngữ R.
Trước khi bắt đầu phần giới thiệu và tìm hiểu về các kiểu dữ liệu khác nhau trong R, hãy nhanh chóng thiết lập môi trường R trên Terminal và Jupyter Notebook.
Để xác minh cài đặt đã thành công, chỉ cần gõ R (chữ hoa) trong terminal, bạn sẽ vào phiên làm việc R như minh họa bên dưới.
Để cài đặt trên các hệ điều hành khác, bạn có thể xem hướng dẫn này.
Giờ hãy thêm ngôn ngữ lập trình R làm kernel trên jupyter notebook. Hãy chắc chắn bạn đã cài đặt jupyter notebook trên hệ thống.
Mở terminal, vào phiên R và nhập hai lệnh dưới đây, chúng sẽ thêm kernel R vào jupyter notebook của bạn.
install.packages('IRkernel')IRkernel::installspec()Được hỗ trợ bởi
Sau khi hai lệnh trên chạy thành công, hãy khởi chạy jupyter từ terminal và mở một notebook với kernel R như hình dưới:
Bây giờ bạn đã sẵn sàng viết những dòng mã R đầu tiên trên jupyter notebook.
Giới thiệu
Để khai thác R một cách tối đa, điều rất quan trọng là bạn phải biết và hiểu các kiểu dữ liệu và cấu trúc dữ liệu khác nhau trong R cùng cách chúng hoạt động. Chúng đóng vai trò chủ chốt trong hầu hết các bài toán, đặc biệt khi bạn làm việc với các bài toán học máy vốn rất tập trung vào dữ liệu.
Trong một ngôn ngữ lập trình, chúng ta thường cần biến để lưu trữ thông tin, có thể là số nguyên, ký tự, số thực dấu phẩy động, boolean, v.v. type (kiểu) của biến hoàn toàn dựa trên loại thông tin mà nó chứa. Nếu biến được gán một số nguyên, thì kiểu dữ liệu của biến là int. Biến đơn giản chỉ là các vị trí bộ nhớ được dành riêng để lưu trữ giá trị. Ngay khi bạn tạo một biến, một vùng nhớ sẽ được cấp phát cho nó.
Dựa trên kiểu dữ liệu của biến, hệ điều hành sẽ cấp phát một lượng bộ nhớ nhất định. Ví dụ, trong R, một biến chứa số nguyên sẽ dùng 4 byte bộ nhớ và 1 byte cho một ký tự.
Trong các ngôn ngữ như C, C++, và Java, biến được khai báo theo kiểu dữ liệu; tuy nhiên, trong Python và R, biến là một đối tượng. Đối tượng về bản chất là một cấu trúc dữ liệu có một vài thuộc tính và phương thức áp dụng lên các thuộc tính đó.
Có nhiều loại đối tượng R hay cấu trúc dữ liệu khác nhau sẽ được thảo luận trong hướng dẫn này như:
Integer: Các số không chứa phần thập phân có kiểu dữ liệu integer. Tuy nhiên, để tạo kiểu integer, bạn cần dùng tường minh as.integer() và truyền biến làm đối số.
Character: Đúng như tên gọi, một chữ cái hoặc tổ hợp chữ cái được đặt trong dấu ngoặc kép được R xem là kiểu dữ liệu character. Có thể là chữ cái hoặc chữ số.
Factor: Đây là kiểu dữ liệu dùng để biểu diễn mối quan hệ định tính như màu sắc, tốt & xấu, điểm xếp hạng khóa học hay phim, v.v. Chúng hữu ích trong mô hình thống kê.
Để làm điều này, bạn sẽ dùng hàm c(), hàm này trả về một vector (một chiều) bằng cách kết hợp tất cả phần tử.
fac <- factor(c("good","bad","ugly","good","bad","ugly"))Được hỗ trợ bởi
Trước khi tiếp tục, hãy điểm qua vài mẹo quan trọng có thể rất hữu ích!
Hãy luôn nhớ rằng ngôn ngữ R phân biệt chữ hoa chữ thường. Tất cả các đối tượng đã định nghĩa ở trên phải được dùng đúng như vậy, viết hoa hay viết thường, như ví dụ dưới đây.
Không giống vector, một list có thể chứa các phần tử thuộc nhiều kiểu dữ liệu khác nhau và thường được gọi là một tập hợp giá trị có thứ tự. Nó có thể chứa vector, hàm, ma trận, thậm chí là một list khác bên trong (list lồng nhau).
Các list trong R đánh chỉ mục bắt đầu từ 1, tức là chỉ mục bắt đầu bằng một.
Hãy hiểu khái niệm list bằng một ví dụ nhanh có ba kiểu dữ liệu khác nhau được lưu trong một list.
Hãy truy cập từng vector trong list riêng biệt. Để làm vậy, bạn sẽ dùng ngoặc vuông kép vì ba vector nằm cùng một cấp trong list. python
combined_list[[1]]
Cuối cùng, thử làm phẳng list. Một điều quan trọng cần nhớ là vì combined_list là sự kết hợp của kiểu character và numeric, kiểu character sẽ được ưu tiên, và kiểu dữ liệu của toàn bộ list sẽ trở thành character.
Vector là một đối tượng dùng để lưu trữ nhiều thông tin hay giá trị cùng kiểu dữ liệu. Một vector không thể đồng thời chứa số nguyên và ký tự. Ví dụ, nếu bạn muốn lưu tổng điểm của 100 sinh viên, thay vì tạo 100 biến khác nhau cho từng sinh viên, bạn sẽ tạo một vector độ dài 100 để lưu toàn bộ điểm trong đó.
Có thể tạo một vector bằng hàm c(), hàm này sẽ kết hợp tất cả phần tử và trả về một mảng một chiều.
Hãy tạo một vector marks với dữ liệu của năm sinh viên thuộc lớp numeric.
Không giống ma trận, Data frame là dạng tổng quát hơn của ma trận. Nó chứa dữ liệu theo dạng bảng. Dữ liệu trong data frame có thể trải dài qua nhiều cột với các kiểu dữ liệu khác nhau. Cột thứ nhất có thể là character, cột thứ hai có thể là integer, và cột thứ ba có thể là logical.
Các biến hoặc đặc trưng nằm theo cột, còn gọi là header, trong khi các quan sát nằm theo hàng với phần tử đầu là tên của hàng theo sau là dữ liệu thực, còn gọi là data rows.
DataFrame có thể được tạo bằng hàm data.frame().
DataFrame được sử dụng rộng rãi để đọc tệp phân tách bằng dấu phẩy (CSV), tệp văn bản. Việc sử dụng không chỉ giới hạn ở đọc dữ liệu; bạn còn có thể dùng chúng cho bài toán học máy, đặc biệt khi xử lý dữ liệu số. DataFrame hữu ích cho việc hiểu dữ liệu, tiền xử lý dữ liệu, vẽ và trực quan hóa.
Hãy tạo một tập dữ liệu giả và tìm hiểu một số hàm chuyên biệt cho data frame.
dataset <- data.frame(
Person = c("Aditya","Ayush","Akshay"),
Age = c(26,26,27),
Weight = c(81,85,90),
Height = c(6,5.8,6.2),
Salary = c(50000,80000,100000))Được hỗ trợ bởi
str(dataset)#hàm này trả về thông tin lớp hoặc kiểu dữ liệu riêng cho từng cột.Được hỗ trợ bởi
'data.frame':3 obs.of5variables:
$ Person: Factor w/3 levels "Aditya","Akshay",..:132
$ Age : num 262627
$ Weight: num 818590
$ Height: num 65.86.2
$ Salary: num 5e+048e+041e+05Được hỗ trợ bởi
Giờ hãy xem hàm summary(), rất hữu ích khi bạn muốn hiểu thống kê của tập dữ liệu. Như bên dưới, nó chia dữ liệu thành ba tứ phân vị, dựa vào đó bạn có thể có trực giác về phân phối dữ liệu. Nó cũng cho biết liệu có giá trị thiếu trong tập dữ liệu không.
Hướng dẫn này là một điểm khởi đầu tốt cho người mới bắt đầu muốn học ngôn ngữ lập trình R. Như một bài luyện tập hay, bạn có thể tìm hiểu thêm các hàm trợ giúp liên quan đến từng kiểu dữ liệu.
Còn rất nhiều nội dung về R chưa được khám phá như Cấu trúc điều kiện và Luồng điều khiển trong R, Tiện ích trong R, và phần hấp dẫn nhất là Học máy bằng R, sẽ được đề cập trong các hướng dẫn tương lai, hãy đón xem!
Vui lòng đặt câu hỏi liên quan đến hướng dẫn này trong phần bình luận bên dưới.
Trước khi bắt đầu phần giới thiệu và tìm hiểu về các kiểu dữ liệu khác nhau trong R, hãy nhanh chóng thiết lập môi trường R trên Terminal và Jupyter Notebook.
Lệnh sau dành cho hệ điều hành Mac, sẽ cài đặt R trên terminal của bạn.
Để xác minh cài đặt đã thành công, chỉ cần gõ R (chữ hoa) trong terminal, bạn sẽ vào phiên làm việc R như minh họa bên dưới.
Để cài đặt trên các hệ điều hành khác, bạn có thể xem hướng dẫn này.
Giờ hãy thêm ngôn ngữ lập trình R làm kernel trên jupyter notebook. Hãy chắc chắn bạn đã cài đặt jupyter notebook trên hệ thống.
Mở terminal, vào phiên R và nhập hai lệnh dưới đây, chúng sẽ thêm kernel R vào jupyter notebook của bạn.
Sau khi hai lệnh trên chạy thành công, hãy khởi chạy jupyter từ terminal và mở một notebook với kernel R như hình dưới:
Bây giờ bạn đã sẵn sàng viết những dòng mã R đầu tiên trên jupyter notebook.
Giới thiệu
Để khai thác R một cách tối đa, điều rất quan trọng là bạn phải biết và hiểu các kiểu dữ liệu và cấu trúc dữ liệu khác nhau trong R cùng cách chúng hoạt động. Chúng đóng vai trò chủ chốt trong hầu hết các bài toán, đặc biệt khi bạn làm việc với các bài toán học máy vốn rất tập trung vào dữ liệu.
Trong một ngôn ngữ lập trình, chúng ta thường cần biến để lưu trữ thông tin, có thể là số nguyên, ký tự, số thực dấu phẩy động, boolean, v.v.
type(kiểu) của biến hoàn toàn dựa trên loại thông tin mà nó chứa. Nếu biến được gán một số nguyên, thì kiểu dữ liệu của biến làint. Biến đơn giản chỉ là các vị trí bộ nhớ được dành riêng để lưu trữ giá trị. Ngay khi bạn tạo một biến, một vùng nhớ sẽ được cấp phát cho nó.Dựa trên kiểu dữ liệu của biến, hệ điều hành sẽ cấp phát một lượng bộ nhớ nhất định. Ví dụ, trong R, một biến chứa số nguyên sẽ dùng 4 byte bộ nhớ và 1 byte cho một ký tự.
Trong các ngôn ngữ như C, C++, và Java, biến được khai báo theo kiểu dữ liệu; tuy nhiên, trong Python và R, biến là một đối tượng. Đối tượng về bản chất là một cấu trúc dữ liệu có một vài thuộc tính và phương thức áp dụng lên các thuộc tính đó.
Có nhiều loại đối tượng R hay cấu trúc dữ liệu khác nhau sẽ được thảo luận trong hướng dẫn này như:
Vector
List
Ma trận
Mảng
Yếu tố (Factor)
Data Frame
Trước hết, hãy hiểu một số kiểu dữ liệu cơ bản dùng để xây dựng các đối tượng R như Numeric, Integer, Character, Factor và Logical.
Bạn có thể kiểm tra kiểu dữ liệu của
abằng từ khóaclass().as.integer()và truyền biến làm đối số.Để làm điều này, bạn sẽ dùng hàm
c(), hàm này trả về một vector (một chiều) bằng cách kết hợp tất cả phần tử.Factor
faccó ba mức là good, bad và ugly; bạn có thể kiểm tra bằng từ khóalevels, và kiểu của các mức là character.Trước khi tiếp tục, hãy điểm qua vài mẹo quan trọng có thể rất hữu ích!
ls(), như dưới đây.List
Không giống vector, một list có thể chứa các phần tử thuộc nhiều kiểu dữ liệu khác nhau và thường được gọi là một tập hợp giá trị có thứ tự. Nó có thể chứa vector, hàm, ma trận, thậm chí là một list khác bên trong (list lồng nhau).
Các list trong R đánh chỉ mục bắt đầu từ 1, tức là chỉ mục bắt đầu bằng một.
Hãy hiểu khái niệm list bằng một ví dụ nhanh có ba kiểu dữ liệu khác nhau được lưu trong một list.
Mức:
Mức:
Hãy truy cập từng vector trong list riêng biệt. Để làm vậy, bạn sẽ dùng
ngoặc vuông képvì ba vector nằm cùng một cấp trong list.python combined_list[[1]]python combined_list[[2]]Mức:
Bây giờ, hãy thử truy cập phần tử thứ năm từ vector thứ ba, kết quả là chữ cái
e.Cuối cùng, thử làm phẳng list. Một điều quan trọng cần nhớ là vì
combined_listlà sự kết hợp của kiểucharactervànumeric, kiểucharactersẽ được ưu tiên, và kiểu dữ liệu của toàn bộ list sẽ trở thànhcharacter.Vector
Vector là một đối tượng dùng để lưu trữ nhiều thông tin hay giá trị cùng kiểu dữ liệu. Một vector không thể đồng thời chứa số nguyên và ký tự. Ví dụ, nếu bạn muốn lưu tổng điểm của 100 sinh viên, thay vì tạo 100 biến khác nhau cho từng sinh viên, bạn sẽ tạo một vector độ dài 100 để lưu toàn bộ điểm trong đó.
Có thể tạo một vector bằng hàm
c(), hàm này sẽ kết hợp tất cả phần tử và trả về một mảng một chiều.Hãy tạo một vector
marksvới dữ liệu của năm sinh viên thuộc lớpnumeric.Hãy kiểm tra độ dài của vector, kết quả sẽ là số phần tử chứa trong đó.
Bây giờ, hãy thử truy cập một phần tử cụ thể theo chỉ mục.
<NA>
Slicing: Tương tự Python, bạn cũng có thể áp dụng khái niệm slicing trong R.
Hãy thử truy cập các phần tử từ phần tử thứ hai đến thứ năm bằng slicing.
Giờ hãy tạo một vector
charactertương tự như khi tạo vector numeric.'character'
Nếu chúng ta tạo một vector có cả giá trị numeric và character, các giá trị numeric sẽ được chuyển sang kiểu character.
Hãy tạo một vector với 1024 giá trị numeric bằng cách dùng khái niệm slicing.
Bây giờ, thử truy cập phần tử giữa và phần tử cuối. Để làm vậy, bạn sẽ dùng hàm
length.Để tạo một vector số lẻ, bạn có thể dùng hàm
seq, hàm này nhận ba tham số: bắt đầu, kết thúc và bước nhảy.Ma trận
Tương tự vector, ma trận dùng để lưu trữ thông tin cùng kiểu dữ liệu. Tuy nhiên, khác với vector, ma trận có khả năng lưu trữ thông tin hai chiều.
Cú pháp định nghĩa một ma trận là:
byrow=TRUEbiểu thị ma trận được điền theo hàng.byrow=FALSEbiểu thị ma trận được điền theo cột (mặc định).Hãy nhanh chóng định nghĩa một ma trận
Mcó kích thước $2\times3$.Hãy dùng khái niệm slicing và lấy phần tử theo hàng và cột.
DataFrame
Không giống ma trận, Data frame là dạng tổng quát hơn của ma trận. Nó chứa dữ liệu theo dạng bảng. Dữ liệu trong data frame có thể trải dài qua nhiều cột với các kiểu dữ liệu khác nhau. Cột thứ nhất có thể là character, cột thứ hai có thể là integer, và cột thứ ba có thể là logical.
Các biến hoặc đặc trưng nằm theo cột, còn gọi là
header, trong khi các quan sát nằm theo hàng với phần tử đầu là tên của hàng theo sau là dữ liệu thực, còn gọi làdata rows.DataFrame có thể được tạo bằng hàm
data.frame().DataFrame được sử dụng rộng rãi để đọc tệp phân tách bằng dấu phẩy (CSV), tệp văn bản. Việc sử dụng không chỉ giới hạn ở đọc dữ liệu; bạn còn có thể dùng chúng cho bài toán học máy, đặc biệt khi xử lý dữ liệu số. DataFrame hữu ích cho việc hiểu dữ liệu, tiền xử lý dữ liệu, vẽ và trực quan hóa.
Hãy tạo một tập dữ liệu giả và tìm hiểu một số hàm chuyên biệt cho data frame.
Hãy xem hàm
headrất hữu ích khi bạn có hàng triệu bản ghi và chỉ muốn xem vài hàng đầu của dữ liệu. Tương tự, hàmtailsẽ in ra vài hàng cuối cùng.Giờ hãy xem hàm
summary(), rất hữu ích khi bạn muốn hiểu thống kê của tập dữ liệu. Như bên dưới, nó chia dữ liệu thành ba tứ phân vị, dựa vào đó bạn có thể có trực giác về phân phối dữ liệu. Nó cũng cho biết liệu có giá trị thiếu trong tập dữ liệu không.Kết luận
Chúc mừng bạn đã hoàn thành hướng dẫn.
Hướng dẫn này là một điểm khởi đầu tốt cho người mới bắt đầu muốn học ngôn ngữ lập trình R. Như một bài luyện tập hay, bạn có thể tìm hiểu thêm các hàm trợ giúp liên quan đến từng kiểu dữ liệu.
Còn rất nhiều nội dung về R chưa được khám phá như Cấu trúc điều kiện và Luồng điều khiển trong R, Tiện ích trong R, và phần hấp dẫn nhất là Học máy bằng R, sẽ được đề cập trong các hướng dẫn tương lai, hãy đón xem!
Vui lòng đặt câu hỏi liên quan đến hướng dẫn này trong phần bình luận bên dưới.
Nếu bạn muốn học thêm về R, hãy tham gia khóa Intermediate R của DataCamp và xem hướng dẫn Giới thiệu về Data frame trong R.