Trong thời đại hiện nay, phân tích dữ liệu đóng vai trò vô cùng quan trọng và mang lại nhiều lợi ích trong nhiều lĩnh vực khác nhau. Các công việc như là xử lý dữ liệu cũng như phân tích văn bản ngày càng phổ biến và đòi hỏi sự tỉ mỉ hơn. Trong lĩnh vực xử lý và phân tích dữ liệu, người dùng thường đối mặt với nhiều thách thức và khó khăn trong việc làm việc với dữ liệu lớn . Các công việc như nhập dữ liệu, xử lý dữ liệu thường đòi hỏi nhiều công đoạn phức tạp và mất thời gian. Hiện nay, hầu hết các lĩnh vực từ công ty đến các doanh nghiệp lớn nhỏ đều sử dụng phân tích dữ liệu. Đối với các công ty và doanh nghiệp hoạt động trong lĩnh vực kinh doanh, phân tích dữ liệu giúp họ hiểu hơn về khách hàng của mình. Thông thường, hướng phân tích dữ liệu thuận tiện và nhanh gọn mà mọi người tới là các ứng dụng phân tích dữ liệu trong thực tiễn như Excel, BI Tools, FineReport, R và Python,…Đặc biệt là trong các ngành liên quan tới tài chính, ngành mà tập hợp hầu hết những kiểu dữ liệu có thể phân tích thông qua ngôn ngữ lập trình R hiện nay. Để giải quyết những thách thức này, thì có rất nhiều công cụ hoàn toàn giúp ta có thể giải quyết được một cách nhanh gọn và tiết kiệm thời gian hiệu quả. Trong bài viết này, chúng em sẽ giới thiệu về “Purrr”, một công cụ giúp chúng ta có thể dễ dàng phân tích và xử lý dữ liệu.
Gói Purrr được phát triển bởi Hadley Wickham, một nhà phân tích dữ liệu và nhà phát triển phần mềm nổi tiếng trong cộng đồng R. Hadley Wickham cũng là tác giả của nhiều gói R khác như “dplyr”, “ggplot2” và “tidyr”, được sử dụng rộng rãi trong ngành phân tích dữ liệu.
Việc tạo ra gói Purrr nhằm mục đích đơn giản hóa và tăng cường khả năng xử lý dữ liệu trong R, đặc biệt là khi làm việc với các phép toán lặp lại trên các cấu trúc dữ liệu.
Package Purrr trong ngôn ngữ lập trình R là một gói mở rộng mạnh mẽ của ngôn ngữ, được sử dụng để làm việc với các cấu trúc dữ liệu dạng vector, danh sách và các loại dữ liệu khác trong R. Gói này giúp cải thiện tính linh hoạt và hiệu suất khi thực hiện các phép toán lặp lại trên các phần tử của các cấu trúc dữ liệu đó.
Package purrr là 1 package rất mạnh, thiết kế rất thông minh, làm cho việc viết code trở lên đơn giản, dễ hiểu. Package Purrr này cung cấp một loạt các hàm như map(), map2(), pmap(), walk(), reduce(),… để thực hiện các phép toán lặp lại trên các phần tử của các vector, danh sách hoặc bất kỳ cấu trúc dữ liệu nào khác. Một hàm được sử dụng phổ biến trong package Purrr này là hàm map(), sự ra đời của nó đã thay đổi hoàn toàn cách thức viết vòng lặp trong R. Vốn trước kia viết vòng lặp dựa trên 2 nhóm công cụ chính là các vòng lặp cổ điển (for, while, …) hoặc những hàm apply (sapply, lapply…), nhưng bây giờ hàm map() cho phép bạn thay thế nhiều vòng lặp for bằng mã ngắn gọn hơn và dễ đọc hơn.
1.Hàm map()
map(.x, ~function(.x,…))
Mỗi bước trên lộ trình của vòng lặp tương ứng với một điều kiện (.x), được dùng như 1 tham số/dữ liệu trong hàm f . Tùy bản chất của dữ liệu đầu vào (thường là 1 list), (.x) có thể là vector, matrix, dataframe, hay 1 con số … , và đóng vai trò dữ liệu đầu vào, tùy chỉnh, tham số để cá biệt hóa nội dung hàm f.
Có nhiều hàm map trong package Purrr, mỗi hàm có công dụng khác nhau và xuất kết quả khác nhau. Ví dụ : hàm map() mặc định xuất kết quả là 1 danh sách, hàm map_df() trả về một khung dữ liệu bằng cách liên kết hàng các phần tử riêng lẻ, hàm map_dbl() hay map_int() xuất kết quả là 1 vector số thực hay số nguyên …
Các họ hàm map_*().
Các hàm họ map_*() sử dụng cho vòng lặp (loop). Được thiết kế rất tiện và loại bỏ những thao tác thừa đối với việc sử dụng vòng lặp for, và đầu ra xác định rõ ràng hơn so với vòng lặp while. Cụ thể như sau:
Đối với vòng lặp for ta phải xác định trước số phần tử của object (nếu không muốn giảm hiệu năng của hàm). Còn đối với hàm map thì không cần làm công việc như vậy mà không bị ảnh hướng tới hiệu năng.
Thiết kế phù hợp để thực hiện theo chu trình (pipe %>%)
Các hàm họ map_*():
• map(): tạo thành một danh sách.
• map_lgl(): tạo ra một vectơ logic.
• map_int(): tạo thành một vectơ số nguyên.
• map_dbl(): tạo thành một vectơ kép
• map_chr(): tạo thành một vectơ ký tự.
2.Hàm pmap(): là một hàm trong gói “purrr” của ngôn ngữ lập trình R. Hàm này được sử dụng để áp dụng một hàm lên các phần tử từ nhiều danh sách hoặc vector cùng một lúc. Nó giúp thực hiện các phép toán song song trên các cấu trúc dữ liệu đó.
pmap(.l, .f, …)
• .l là một danh sách (list) chứa các vector hoặc danh sách chứa các phần tử đầu vào. • .f là một hàm mà bạn muốn áp dụng lên các phần tử tương ứng từ các danh sách trong • “…” là các tham số bổ sung mà bạn có thể truyền vào hàm .f.
Hàm pmap() rất hữu ích khi bạn muốn áp dụng một hàm lên các phần tử từ nhiều danh sách hoặc vector cùng một lúc và thu thập kết quả thành một danh sách.
3.Hàm walk(): là một hàm trong gói “purrr” của ngôn ngữ lập trình R. Hàm walk() rất hữu ích khi bạn muốn thực hiện một hành động trên các phần tử của một cấu trúc dữ liệu mà không cần thu thập kết quả trả về từ mỗi phần tử đó. Thay vào đó, nó cho phép bạn thực hiện một hành động “đi qua” các phần tử một cách tuần tự.
walk(.x, .f, …)
• .x là danh sách hoặc vector cần áp dụng hành động hoặc gọi hàm lên. • .f là một hàm mà bạn muốn áp dụng lên từng phần tử của .x. • … là các đối số tùy chọn được truyền vào hàm .f
4.Hàm reduce(): là một hàm trong gói “purrr” của ngôn ngữ lập trình R. Hàm này được sử dụng để áp dụng một phép tổ hợp lên các phần tử của một vector hoặc danh sách để thu được một kết quả duy nhất.
reduce(.x, .f, …)
5.Hàm flatten(): trong gói “purrr” của R được sử dụng để trích xuất các phần tử từ một danh sách lồng nhau và biến đổi chúng thành một danh sách đơn giản hơn, không còn cấu trúc lồng nhau.
flatten(.x, .simplify = TRUE)
• .x là danh sách hoặc vector chứa các phần tử cần trích xuất. • .simplify là một đối số tùy chọn để xác định liệu danh sách trả về sau khi trích xuất có được đơn giản hóa hay không. Khi .simplify = TRUE, danh sách sẽ được đơn giản hóa thành vector nếu có thể. Khi .simplify = FALSE, danh sách sẽ được trả về mà không đơn giản hóa.
6.Hàm pluck(): trong gói “purrr” của R được sử dụng để trích xuất giá trị từ một danh sách dựa trên các chỉ số hoặc tên.
pluck(.x, …, .default = NULL)
• .x là danh sách cần trích xuất giá trị từ. • … là các đối số chứa chỉ số hoặc tên của các phần tử cần trích xuất. Bạn có thể truyền nhiều chỉ số hoặc tên trong dấu … để trích xuất nhiều phần tử cùng một lúc. • .default là một giá trị mặc định tùy chọn, được trả về nếu phần tử cần trích xuất không tồn tại trong danh sách. Nếu không có giá trị .default được chỉ định, nếu phần tử không tồn tại, hàm pluck() sẽ trả về NULL.
7.Hàm transpose(): trong gói “purrr” của R được sử dụng để chuyển đổi dữ liệu dạng danh sách lồng nhau thành một danh sách mới với các phần tử được chuyển đổi thành cột và các danh sách con thành các hàng.
transpose(.x, …)
Mục tiêu chính của package Purrr trong R là cung cấp một cách tiếp cận mạnh mẽ và linh hoạt để làm việc với dữ liệu dạng danh sách và vector trong ngôn ngữ lập trình R. Các lợi ích của gói Purrr bao gồm:
Lập trình dạng hàm: gói Purrr cung cấp một loạt các hàm như map(), map2(), pmap(),… giúp bạn áp dụng một hàm lên các phần tử trong danh sách hoặc vector một cách dễ dàng. Điều này cho phép bạn viết code ngắn gọn, sáng tạo và dễ đọc hơn.
Tự động hóa các thao tác lặp lại: Thay vì viết các vòng lặp thủ công để thực hiện các thao tác trên từng phần tử, gói Purrr cho phép bạn áp dụng các hàm một cách tự động trên toàn bộ danh sách hoặc vector một cách hiệu quả. Điều này giúp giảm đáng kể lượng mã lặp lại và tăng hiệu suất của code.
Xử lý dữ liệu dạng danh sách: Khi làm việc với dữ liệu phức tạp, thường có nhiều danh sách lồng nhau hoặc dữ liệu có cấu trúc không đồng nhất. Gói Purrr cung cấp các hàm như flatten(), pluck(), transpose() để trích xuất, biến đổi và tổ chức lại dữ liệu dạng danh sách một cách dễ dàng.
Điều khiển quá trình tính toán: gói Purrr cung cấp các hàm như walk(), invoke_map() cho phép bạn điều khiển quá trình tính toán và thực thi các tác vụ phức tạp như tính toán song song.
Tích hợp với các gói dữ liệu phổ biến: “purrr” tương thích tốt với nhiều gói dữ liệu phổ biến như “dplyr”, “tidyr” và “ggplot2”. Bạn có thể kết hợp các hàm từ các gói này để xử lý dữ liệu một cách linh hoạt và hiệu quả.
Khi tiếp xúc với ngôn ngữ R, chúng em thấy có rất nhiều gói bổ ích hỗ trợ trong quá trình phân tích dữ liệu. Tuy nhiên chúng em chọn gói Purrr trong R vì nó là một công cụ mạnh mẽ và linh hoạt để làm việc với dữ liệu dạng danh sách và vector, giúp chúng em viết code ngắn gọn, giảm sự lặp lại mã, tăng tính linh hoạt và dễ đọc. Nó cũng tích hợp tốt với các gói dữ liệu phổ biến và cung cấp các hàm hữu ích cho xử lý dữ liệu phức tạp và quá trình tính toán phức tạp, điều này giúp chúng em tìm hiểu thêm được nhiều gói tương thích với gói Purrr có thể kết hợp các hàm từ các gói này để xử lý dữ liệu một cách linh hoạt và hiệu quả..