Làm sạch dữ liệu trong R

Làm sạch dữ liệu trong R
ETL

Ở bài viết này, chúng ta sẽ thao tác trên dữ liệu với dplyr. dplyr là một package mạnh mẽ của R được viết bởi Hadley Wickham và Romain Francois cho phép chúng ta làm việc với dữ liệu dạng bảng (tabular). Một trong những khía cạnh độc đáo của dplyr đó là với cùng một tập các tools, chúng ta có thể thao tác với nhiều nguồn dữ liệu khác, bao gồm data frames, data tables, databases và multidimensional arrays. Trong bài viết này, chúng ta chỉ tập trung thao tác trên data frames. Tuy nhiên, bạn vẫn có thể áp dụng cho các dạng format khác.

Notebooks: working_with_dplyr.

Đăng bởi Hong Ong

As a data scientist, I'm passionate about investigating Big Data by using Data Analyst and state-of-the-art Machine Learning methods for solving challenging tasks related to media products such as Data Mining, Natural Language Processing, and Social Analysis which provide powerful visualization tools and predictive model for leaders and organizations making right decisions at the right time. Xem tất cả bài viết bởi Hong Ong

Đã đăng Tháng Bảy 10, 2015Tháng Tư 17, 2018

Điều hướng bài viết

Chúng ta sẽ học cách thực hiện thao tác dữ liệu trong ngôn ngữ lập trình R cùng với xử lý dữ liệu. Chúng tôi cũng sẽ overview ba nhà khai thác như Subsetting, thao tác cũng như phân loại và sáp nhập trong R . Ngoài ra, chúng ta sẽ tìm hiểu về cấu trúc dữ liệu trong R, cách tạo tập con trong R và cách sử dụng lệnh R sample (), cách tạo nhóm con dữ liệu R hoặc thùng dữ liệu trong R. Chúng ta cũng sẽ tổng quan về các phương pháp khác nhau để tổng hợp dữ liệu trong R, thực hiện sắp xếp, sắp xếp cũng như truyền dữ liệu.

Các bài viết liên quan:

Các chủ đề thao tác dữ liệu R này sẽ cung cấp cho bạn hướng dẫn đầy đủ về các cách thao tác và xử lý dữ liệu trong R.

  • Thao tác dữ liệu trong R là gì?
    • Tạo tập hợp con dữ liệu trong R
  • Lệnh sample () trong R
    • Các ứng dụng của dữ liệu tập hợp con
    • Thêm các trường được tính toán vào dữ liệu
    • Tạo nhóm con hoặc thùng dữ liệu
    • Kết hợp và Hợp nhất các tập dữ liệu trong R
  • merge () Hàm trong R
  • Sắp xếp dữ liệu sử dụng sort () và order () trong R
  • Truyền dữ liệu bằng hàm Apply () trong R
  • Công thức trong R
  • Các biến trong R
  • Bản tóm tắt

Thao tác dữ liệu trong R là gì?

Với sự trợ giúp của cấu trúc dữ liệu, chúng ta có thể biểu diễn dữ liệu dưới dạng phân tích dữ liệu. Thao tác dữ liệu trong R có thể được thực hiện để phân tích và hình dung thêm.

Trước khi chúng ta bắt đầu chơi với dữ liệu trong R, bạn phải học  cách nhập dữ liệu trong R và các cách xuất dữ liệu từ R sang các nguồn bên ngoài khác nhau như SAS, SPSS, tệp văn bản hoặc tệp CSV.

Một trong những khía cạnh quan trọng nhất của tính toán với Thao tác dữ liệu trong R là nó cho phép phân tích và trực quan hóa sau đó. Hãy để chúng tôi xem một vài cấu trúc dữ liệu cơ bản trong R:

  1. Các vectơ trong R

Đây là các vùng chứa có thứ tự của các phần tử nguyên thủy và được sử dụng cho dữ liệu 1 chiều.

Các loại – số nguyên, số, lôgic, ký tự, phức.

  1. Các ma trận trong R

Đây là các tập hợp phần tử hình chữ nhật và rất hữu ích khi tất cả dữ liệu thuộc một lớp duy nhất là số hoặc ký tự.

  1. Danh sách trong R

Đây là những vùng chứa có thứ tự cho các phần tử tùy ý và được sử dụng cho dữ liệu thứ nguyên cao hơn, chẳng hạn như thông tin dữ liệu khách hàng của một tổ chức. Khi dữ liệu không thể được biểu diễn dưới dạng một mảng hoặc một khung dữ liệu, danh sách là lựa chọn tốt nhất. Điều này là do danh sách có thể chứa tất cả các loại đối tượng khác, bao gồm danh sách hoặc khung dữ liệu khác, và theo nghĩa đó, chúng rất linh hoạt.

  1. Frames dữ liệu

Đây là những vùng chứa hai chiều cho các bản ghi và biến và được sử dụng để biểu diễn dữ liệu từ bảng tính, v.v. Nó tương tự như một bảng đơn trong cơ sở dữ liệu.

Xem thêm Function trong R, các hàm trong R

Tạo tập hợp con dữ liệu trong R

Như chúng ta đã biết, kích thước dữ liệu đang tăng lên theo cấp số nhân và việc phân tích dữ liệu hoàn chỉnh là rất tốn thời gian. Vì vậy, dữ liệu được chia thành các mẫu có kích thước nhỏ và phân tích các mẫu được thực hiện. Quá trình tạo mẫu được gọi là tập hợp con.

Các phương pháp khác nhau của tập con trong R là:

  1. $

Toán tử ký hiệu đô la chọn một phần tử dữ liệu. Kết quả của toán tử này luôn là một vectơ khi chúng ta sử dụng nó với khung dữ liệu.

  1. [[

Tương tự như $ trong R, toán tử dấu ngoặc vuông kép trong R cũng trả về một phần tử duy nhất, nhưng nó mang lại sự linh hoạt khi tham chiếu đến các phần tử theo vị trí thay vì theo tên. Nó có thể được sử dụng cho các khung và danh sách dữ liệu.

  1. [

Toán tử dấu ngoặc vuông đơn trong R trả về nhiều phần tử dữ liệu. Chỉ mục trong dấu ngoặc vuông có thể là một vectơ số, một vectơ lôgic hoặc một vectơ ký tự.

Ví dụ: Để truy xuất 5 hàng và tất cả các cột của iris tập dữ liệu đã được tích hợp sẵn, lệnh dưới đây được sử dụng:

Đầu ra:

Làm sạch dữ liệu trong R

Lệnh sample () trong R

Như chúng ta đã thấy, các mẫu được tạo ra từ dữ liệu để phân tích. Để tạo mẫu, lệnh sample () được sử dụng và số lượng mẫu sẽ được vẽ được đề cập.

Ví dụ, để tạo một mẫu gồm 10 mô phỏng của một con súc sắc, lệnh dưới đây được sử dụng:

sample(1:6, 10, replace=TRUE)

Đầu ra:

Làm sạch dữ liệu trong R

sample () nên luôn tạo ra các giá trị ngẫu nhiên nhưng đôi khi nó không xảy ra với mã thử nghiệm. Nếu được thay thế bằng một giá trị gốc, lệnh sample () luôn tạo ra các mẫu ngẫu nhiên.

Xem thêm Parameter trong hàm của R

Giá trị gốc là điểm bắt đầu cho bất kỳ công thức tạo số ngẫu nhiên nào. Giá trị hạt giống xác định cả hai, quá trình khởi tạo trình tạo số ngẫu nhiên cùng với đường dẫn mà công thức sẽ đi theo.

Hãy để chúng tôi xem giá trị hạt giống được sử dụng như thế nào:

 set.seed(100)
 sample(1:5, 10, replace = TRUE) #websitehcm

Các ứng dụng của dữ liệu tập hợp con

Bây giờ chúng ta hãy xem một vài ứng dụng của dữ liệu tập hợp con trong R:

1. Dữ liệu trùng lặp có thể được loại bỏ trong quá trình phân tích bằng cách sử dụng hàm trùng lặp () trong R

Lệnh dưới đây cho bạn biết cách tìm dữ liệu trùng lặp trong các tập hợp con: hàm replicated () tìm các giá trị trùng lặp và trả về một vectơ logic cho bạn biết liệu giá trị được chỉ định có phải là bản sao của giá trị trước đó hay không.

duplicated(c(1,2,1,3,1,4))

Đầu ra:

Làm sạch dữ liệu trong R

Đối với tất cả các giá trị trùng lặp trong mẫu, giá trị true được trả về.

2. Dữ liệu bị thiếu có thể được xác định bằng cách sử dụng hàm complete.case () trong R

Trong quá trình phân tích, bất kỳ hàng nào có dữ liệu bị thiếu có thể được xác định và loại bỏ như bên dưới.

Lệnh complete.case () trong R được sử dụng để tìm các hàng đã hoàn thành. Nó cung cấp vectơ logic với giá trị TRUE cho các hàng đã hoàn thành và FALSE cho các hàng có một số giá trị NA. Trước tiên, chúng tôi sẽ tạo dữ liệu của mình và lưu trữ trong tệp CSV như sau:

data <- read.table(header=TRUE, text='
subject sex size
1 M 7
2 F NA
3 F 9
4 M 11
')
write.csv(data, "/home/dataflair/table.csv", row.names=FALSE)

Hiển thị mã:

Làm sạch dữ liệu trong R
Làm sạch dữ liệu trong R

Các hàng có giá trị NA có thể bị xóa bằng cách sử dụng hàm na.omit () như sau:

> file <- read.csv("/home/dataflair/table.csv")
> na.omit(file)

Đầu ra:

Làm sạch dữ liệu trong R

Thêm các trường được tính toán vào dữ liệu

Sau khi tạo tập hợp con dữ liệu thích hợp, bước tiếp theo trong phân tích của bạn là thực hiện một số phép tính. R giúp dễ dàng thực hiện các phép tính trên các cột của khung dữ liệu vì bản thân mỗi cột là một vectơ.

Hãy để chúng tôi xem thao tác dữ liệu với R với sự trợ giúp của một ví dụ:

Chúng ta sẽ xem cách tính tỷ lệ giữa chiều dài và chiều rộng của các đài hoa.

Lệnh tương tự là:

> data(iris)
> x <- iris$Sepal.Length / iris$Sepal.Width
> head(x)

Đầu ra:

Làm sạch dữ liệu trong R

với hàm () trong R

Để giảm số lượng nhập và làm cho mã dễ đọc hơn, chúng tôi sử dụng với lệnh () như sau:

> y <- with(iris, Sepal.Length / Sepal.Width) 
> head(y)

Điều này cho kết quả tương tự như trên nhưng giảm tác vụ nhập.

Làm sạch dữ liệu trong R

hàm trong () trong R

Bây giờ chúng ta hãy xem việc sử dụng hàm within () cho cùng một tác vụ:

iris<- within(iris, ratio <- Sepal.Length / Sepal.Width)
iris

Đầu ra:

Làm sạch dữ liệu trong R

Hàm with () cho phép bạn tham chiếu đến các cột bên trong khung dữ liệu mà không cần sử dụng rõ ràng ký hiệu đô la hoặc thậm chí tên của chính khung dữ liệu.

Chúng ta có thể sử dụng với () và trong () thay thế cho nhau.

Tạo nhóm con hoặc thùng dữ liệu

Hầu hết các nhà thống kê thường vẽ biểu đồ để điều tra dữ liệu của họ. Vì loại tính toán này phổ biến khi bạn sử dụng thống kê, nên R có một số chức năng cho nó.

hàm cut () trong R

hàm cut () nhóm các giá trị của một biến thành các thùng lớn hơn. Nó tạo ra các thùng có kích thước bằng nhau và phân loại từng phần tử vào thùng thích hợp của nó.

Hãy để chúng tôi xem cách cắt hoạt động trong R với một ví dụ:

> frost <- c(1,2,3)
> cut(frost, 3, include.lowest=TRUE)
> cut(frost, 3, include.lowest=TRUE, labels=c("Low", "Med", "High"))

Đầu ra:

Làm sạch dữ liệu trong R

Điều này cho kết quả là một hệ số với ba cấp độ. Hàm cut () tạo nhãn toán học cho các thùng. Tên nhãn có thể được cung cấp bởi người dùng.

Kết quả hiển thị ba nhãn trong đầu ra.

hàm table () trong R

Để đếm số lượng quan sát trong mỗi mức nhân tố, chúng ta có thể sử dụng lệnh R table () như sau:

> inp <- cut(frost, 3, include.lowest=TRUE, labels=c("Low", "Med", "High"))
> table(inp)

Đầu ra:

Làm sạch dữ liệu trong R

Kết quả hiển thị đầu ra là một bảng chứa số phần tử trong mỗi nhân tố. Bây giờ hãy xem việc kết hợp và hợp nhất các tập dữ liệu để thao tác dữ liệu trong R.

Kết hợp và Hợp nhất các tập dữ liệu trong R

Nếu bạn muốn kết hợp dữ liệu từ các nguồn khác nhau trong R, bạn có thể kết hợp các bộ dữ liệu khác nhau theo ba cách:

Bằng cách thêm các cột bằng cách sử dụng cbind () trong R

Nếu hai tập dữ liệu có tập hợp các hàng bằng nhau và thứ tự của các hàng giống hệt nhau, thì việc thêm cột sẽ có ý nghĩa. Điều này có thể được thực hiện bằng cách sử dụng hàm data.frame hoặc cbind ().

Bằng cách Thêm Hàng bằng cách sử dụng hàm rbind () trong R

Nếu cả hai tập dữ liệu có cùng cột và bạn muốn thêm hàng vào dưới cùng, thì hãy sử dụng rbind ().

Bằng cách kết hợp dữ liệu với các hình dạng khác nhau bằng cách sử dụng hàm merge () trong R

Hàm merge () kết hợp dữ liệu dựa trên các cột cũng như các hàng chung. Trong ngôn ngữ cơ sở dữ liệu, điều này thường được gọi là dữ liệu nối.

Để hợp nhất dữ liệu hiện có, sử dụng hàm merge () rất hữu ích. Bạn chỉ có thể sử dụng merge () để kết hợp dữ liệu khi các điều kiện so khớp nhất định được thỏa mãn.

merge () Hàm trong R

Hãy xem việc sử dụng hàm merge ().

Hàm merge () được sử dụng để kết hợp các khung dữ liệu. Hãy để chúng tôi xem điều này với một ví dụ:

every.states <- as.data.frame(state.x77)
every.states$Name <- rownames(state.x77)
rownames(every.states) <- NULL
str(every.states)
#Creating a subset of freezing states
freezing.states <- every.states[every.states$Frost>150
                                , c("Name", "Frost")]
freezing.states
#Creating a subset of big states
big.states <- every.states[every.states$Area>=100000
                           , c("Name", "Area")]
big.states
#Using the merge function
merge(freezing.states, big.states)

Đầu ra:

Làm sạch dữ liệu trong R

Đây là lệnh để tạo một khung dữ liệu bao gồm các trạng thái lạnh và lớn.

Hãy để chúng tôi xem các kiểu hợp nhất () khác nhau.

Hàm merge () cho phép bốn cách kết hợp dữ liệu:

  1. Natural Join trong R

Để chỉ giữ lại các hàng khớp với các khung dữ liệu, hãy chỉ định đối số all = FALSE.

  1. Full Outer Join trong R

Để giữ tất cả các hàng từ cả hai khung dữ liệu, hãy chỉ định tất cả = TRUE.

  1. Left Outer Join vào R

Để bao gồm tất cả các hàng của khung dữ liệu x và chỉ những hàng từ y phù hợp, hãy chỉ định all.x = TRUE.

  1. Right Outer Join vào R

Để bao gồm tất cả các hàng của khung dữ liệu y và chỉ những hàng từ x phù hợp, hãy chỉ định all.y = TRUE

Hàm merge () nhận một số lượng lớn các đối số, như sau:

  • x: Một data frame.
  • y: Một data frame.
  • by, by.x, by.y: Tên của các cột là chung cho cả x và y. Theo mặc định, nó sử dụng các cột có tên chung giữa hai khung dữ liệu.
  • all, all.x, all.y: Giá trị logic chỉ định kiểu hợp nhất. Giá trị mặc định là tất cả = FALSE.

Bất kỳ nghi ngờ nào trong R Data Manipulation cho đến bây giờ? Hãy bình luận bên dưới.

Hàm match () trong R

Hàm R match () trả về vị trí khớp của hai vectơ hoặc cụ thể hơn là vị trí của các khớp đầu tiên của một vectơ trong vectơ thứ hai.

index <- match(freezing.states$Name, big.states$Name)
index

Đầu ra:

Làm sạch dữ liệu trong R

Sắp xếp dữ liệu sử dụng sort () và order () trong R

Một nhiệm vụ phổ biến trong phân tích dữ liệu và báo cáo là sắp xếp thông tin. Bạn có thể trả lời nhiều câu hỏi hàng ngày với các bảng dữ liệu được sắp xếp cho bạn biết điều tốt nhất hoặc tệ nhất của những điều cụ thể; ví dụ , phụ huynh muốn biết trường nào trong khu vực của họ là tốt nhất, và các doanh nghiệp cần biết các nhà máy sản xuất hiệu quả nhất của các khu vực bán hàng sinh lợi nhất.

Đầu tiên chúng ta hãy tạo khung dữ liệu và sau đó chúng ta sẽ sắp xếp nó. Sau đó, chúng ta sẽ sử dụng lệnh some.states để tạo khung dữ liệu.

some.states <- data.frame( Region = state.region, + state.x77)  
some.states <- some.states[1:10, 1:3]
sort(some.states$Population)   #Command to sort Population in ascending order
sort(some.states$Population, decreasing=TRUE)   #Command to sort Population 
                                                #in descending order
order.pop <- order(some.states$Population)      #Another way of sorting
some.states[order.pop, ]        #In ascending order
order(some.states$Population, decreasing=TRUE)   #Descending Order

Đầu ra:

Làm sạch dữ liệu trong R

Đây là cách chúng ta sử dụng các hàm order () và sort ().

Truyền dữ liệu bằng hàm Apply () trong R

Để duyệt dữ liệu, R sử dụng các hàm áp dụng. Đầu ra của hàm apply () phụ thuộc vào cấu trúc dữ liệu đang được duyệt.

Mảng hoặc Ma trận

Hàm apply () đi qua các hàng hoặc cột của ma trận, áp dụng một hàm cho mỗi vectơ kết quả và trả về một vectơ kết quả tóm tắt

Danh sách

Hàm lapply () có thể duyệt qua một danh sách. Nó áp dụng một chức năng cho mỗi phần tử và trả về một danh sách các kết quả. Đôi khi, có thể đơn giản hóa danh sách kết quả thành ma trận hoặc vectơ. Sử dụng hàm R apply () như sau:

apply(X, MARGIN, FUN, …)

Hàm apply () có bốn đối số như sau:

  • X: Đây là mảng dữ liệu (hoặc ma trận).
  • MARGIN: Đây là một vectơ số chỉ ra thứ nguyên mà theo đó để đi qua-1 có nghĩa là hàng và 2 có nghĩa là cột.
  • FUN: Đây là hàm để áp dụng (ví dụ: tổng hoặc trung bình).
  • … (Dấu chấm): Nếu hàm FUN yêu cầu bất kỳ đối số bổ sung nào, chúng có thể được thêm vào đây.

Về bản chất, hàm áp dụng cho phép chúng ta thực hiện các thay đổi từng mục nhập đối với các khung và ma trận dữ liệu. Nếu MARGIN = 1, hàm chấp nhận mỗi hàng của X làm đối số vectơ và trả về một vectơ kết quả. Tương tự, nếu MARGIN = 2, hàm hoạt động trên các cột của X một cách thích hợp nhất, khi chúng ta áp dụng hàm MARGIN = c (1,2) cho mọi mục nhập của X.

Bây giờ chúng ta hãy thảo luận về các biến thể của hàm apply ():

Hàm lapply () trong R

Chúng tôi đã thấy nó ở trên.

Hàm sapply () trong R

Nó hoạt động trên một danh sách hoặc vectơ và trả về vectơ.

Hàm tapply () trong R

Chúng tôi sử dụng nó để tạo các bản tóm tắt dữ liệu dạng bảng. Hàm này có ba đối số:

  • X: Đề cập đến một vectơ.
  • INDEX: Đề cập đến một yếu tố hoặc danh sách các yếu tố.
  • FUN: Đề cập đến một chức năng.

Một ví dụ minh họa:

#Create the matrix
m<-matrix(c(seq(from=-98,to=100,by=2)),nrow=10,ncol=10)
# Return the product of each of the rows
apply(m,1,prod)
# Return the sum of each of the columns
apply(m,2,sum)

Đầu ra:

Làm sạch dữ liệu trong R

Công thức trong R

Giao diện công thức R cho phép bạn chỉ định chính xác cột nào sẽ sử dụng khi điều chỉnh một mô hình, cũng như hoạt động của mô hình đối với thao tác dữ liệu trong R.

Bạn cần người vận hành khi bắt đầu xây dựng mô hình. Kí hiệu công thức đề cập đến các công thức thống kê, trái ngược với các công thức toán học. Toán tử công thức ‘+’ có nghĩa là bao gồm một cột, không phải để cộng hai cột với nhau về mặt toán học.

Operator Thí dụ Nghĩa
~ y ~ x     Mô hình y như một hàm của x.
+ y ~ a + b     Bao gồm các cột a cũng như b.
y ~ a – b     Bao gồm a nhưng loại trừ b.
: y ~ a: b     Ước lượng tương tác của a và b.
* y ~ a * b     Bao gồm các cột cũng như sự tương tác của chúng (nghĩa là, y ~ a + b + a: b).
| và ~ a | b     Ước lượng y như một hàm của một điều kiện đối với b.

Bảng trên cho thấy ý nghĩa của các toán tử khác nhau trong giao diện công thức.

Các biến trong R

Hai loại biến R là:

Biến định danh trong R

Các biến định danh hoặc ID xác định các quan sát. Chúng hoạt động như những chìa khóa xác định các quan sát.

Các biến đo lường trong R

Chúng đại diện cho các phép đo cần quan sát.

Gói Reshape2 trong R

Cơ sở R có một hàm, reshape () hoạt động tốt để định hình lại dữ liệu theo chiều dọc.

Vấn đề định hình lại dữ liệu là vấn đề chung chung hơn nhiều so với việc chỉ đơn giản xử lý dữ liệu theo chiều dọc. Vì vậy, gói reshape2 có chứa một số chức năng để chuyển đổi dữ liệu giữa định dạng dài và rộng được phát hành.

> install.packages("reshape2") 
> library(reshape2)

Gói R reshape2 dựa trên hai chức năng chính:

  • Melt () trong R lấy dữ liệu định dạng rộng và làm tan nó thành dữ liệu định dạng dài.
  • Cast () trong R lấy dữ liệu định dạng dài và chuyển nó thành dữ liệu định dạng rộng.

Bản tóm tắt

Trong hướng dẫn này về thao tác dữ liệu trong R, chúng tôi đã thảo luận về các phương pháp tạo tập con dữ liệu trong R. Hơn nữa, chúng tôi đã thấy lệnh sample () trong R, các ứng dụng của tập hợp con dữ liệu, tạo nhóm con hoặc thùng dữ liệu, kết hợp và hợp nhất các tập dữ liệu trong R và nhiều hơn nữa.