Hướng dẫn dùng r/replace python
Chương này trình bày các bước phổ biến được sử dụng trong quá trình “làm sạch” bộ dữ liệu và cũng giải thích việc sử dụng các hàm quản lý dữ liệu thiết yếu trong R. Show
Để giải thích rõ hơn quá trình làm sạch dữ liệu, chương này bắt đầu từ cách nhập bộ dữ liệu thô có tên linelist và tiến hành từng bước trong quá trình làm sạch. Trong code R, quy trình này được biểu thị dưới dạng một chuỗi “pipe”, tham chiếu đến toán tử “pipe” 8 để chuyển tiếp từ thao tác này sang thao tác tiếp theo trong cùng một bộ dữ liệu.Các hàm quan trọngCuốn sách này nhấn mạnh việc sử dụng các hàm từ hệ sinh thái của package tidyverse. Các hàm thiết yếu trong R trình bày trong chương này được liệt kê dưới đây. Nhiều hàm thuộc về package dplyr, mà cung cấp các hàm dạng “verb” để giải quyết các thách thức trong thao tác xử lý dữ liệu (tên package được viết đầy đủ là "data frame-. dplyr là một phần trong hệ sinh thái của package tidyverse (mà bao gồm các package khác như ggplot2, tidyr, stringr, tibble, purrr, magrittr, và forcats). 8“pipe” (chuyển tiếp) dữ liệu từ một hàm sang hàm tiếp theomagrittr 00tạo, chuyển dạng, và định nghĩa lại cộtdplyr 01giữ lại, xóa, chọn, hoặc đổi tên cộtdplyr 02đổi tên cộtdplyr 03chuẩn hóa cú pháp tên cộtjanitor 04, 05, 06, etc.chuyển đổi định dạng cộtbase R 07biến đổi đồng thời nhiều cộtdplyrcác hàm tidyselectsử dụng logic để chọn cộttidyselect 08giữ lại các dòng theo điều kiệndplyr 09lọc quan sát trùngdplyr 10xử lý theo/trong mỗi dòngdplyr 11thêm dòng thủ côngtibble 12săp xếp dòngdplyr 13recode lại giá trị trong cộtdplyr 14recode lại giá trị trong cột kèm các điều kiện phức tạpdplyr 15, 16, 17các hàm đặc biệt để recodetidyr 18 and 19tạo biến phân nhóm từ biến định lượngepikit và base R 20recode/làm sạch giá trị sử dụng từ điển dữ liệulinelist 21áp dụng các điều kiện logic; trả về các chỉ sốbase RNếu bạn muốn xem các hàm này so sánh với các câu lệnh trong Stata hoặc SAS, hãy xem chương . Bạn cũng có thể gặp một framework quản lý dữ liệu khác từ package data.table trong R với các toán tử như 22 và thường xuyên sử dụng dấu ngoặc 23. Cách tiếp cận và cú pháp này được giải thích ngắn gọn trong chương .Thuật ngữTrong cuốn sách này, chúng tôi quy ước chung “cột” và “hàng” thay cho “biến” và “quan sát”. Như đã giải thích trong phần dẫn trên “dữ liệu gọn gàng - tidy data”, hầu hết các bộ dữ liệu dịch tễ-thống kê đều có cấu trúc gồm các hàng, cột và giá trị. Variables (biến) chứa các giá trị đo lường cùng một thuộc tính cơ bản (như nhóm tuổi, kết quả hoặc ngày bắt đầu). Observations (quan sát) chứa tất cả các giá trị được đo trên cùng một đơn vị (ví dụ: một người, địa điểm hoặc mẫu phòng thí nghiệm). Vì vậy, những khía cạnh này có thể khó xác định một cách hữu hình hơn. Trong bộ dữ liệu “tidy”, mỗi cột là một biến, mỗi hàng là một quan sát và mỗi ô là một giá trị duy nhất. Tuy nhiên, một số bộ dữ liệu bạn gặp phải sẽ không giống với mô tả này - bộ dữ liệu định dạng “wide (ngang)” có thể có một biến số được chia thành nhiều cột (xem ví dụ trong chương ). Tương tự như vậy, các quan sát có thể được chia thành nhiều hàng. Cuốn sách này tập trung về quản lý và biến đổi dữ liệu, do đó, việc đề cập đến cấu trúc dữ liệu cụ thể của các hàng và cột sẽ thích hợp hơn là các quan sát và biến vốn khá trừu tượng. Các trường hợp ngoại lệ chủ yếu xảy ra trong các chương về phân tích dữ liệu, nơi bạn sẽ thấy nhiều tham chiếu hơn đến các biến và quan sát. Chương này tiến hành các bước làm sạch điển hình, bằng cách thêm chúng tuần tự vào một chuỗi pipe. Trong phân tích dịch tễ học và xử lý dữ liệu, các bước làm sạch thường được thực hiện tuần tự, liên kết với nhau. Trong R, việc này thường được thực hiện dưới dạng một “pipeline - đường ống” làm sạch, trong đó bộ dữ liệu thô được chuyển tiếp hoặc “dẫn” từ bước làm sạch này sang bước làm sạch khác. Các chuỗi như vậy sử dụng các hàm dạng “verb” trong package dplyr và toán tử pipe 8 trong package magrittr. Chuỗi pipe bắt đầu từ dữ liệu “thô” (“linelist_raw.xlsx”) và kết thúc bằng bộ dữ liệu “sạch” trên R ( 25) có thể được sử dụng, lưu, xuất, v.v.Trong quy trình làm sạch dữ liệu, thứ tự của các bước là quan trọng. Các bước làm sạch có thể bao gồm:
Đoạn code này trình bày cách gọi các package cần thiết cho phân tích. Trong cuốn sách này, chúng tôi nhấn mạnh đến hàm 26 từ package pacman, cài đặt package nếu cần và gọi package ra để sử dụng. Bạn cũng có thể gọi các package đã cài đặt với hàm 27 sẵn có trong base R. Xem chương để biết thêm thông tin về các package trong R.
NhậpỞ đây, chúng ta sẽ nhập tệp tin Excel “thô” bằng cách sử dụng hàm 28 từ package rio. Package rio có thể xử lý linh hoạt nhiều loại tệp tin (ví dụ: .xlsx, .csv, .tsv, .rds. Xem chương về để biết thêm thông tin và mẹo về các tình huống bất thường (ví dụ: loại bỏ hàng, thiết lập giá trị trống, nạp trang tính Google, v.v.).Nếu bạn muốn hiểu rõ hơn, hãy tải xuống tệp dữ liệu linelist “thô” (với file dạng .xlsx). Nếu bộ dữ liệu của bạn quá lớn và mất nhiều thời gian để nhập, sẽ hữu ích khi bạn đặt lệnh nhập dữ liệu riêng biệt với chuỗi pipe và dữ liệu “thô” sẽ được lưu thành một tệp riêng biệt. Điều này cũng cho phép dễ dàng so sánh giữa phiên bản gốc và phiên bản đã làm sạch. Dưới đây, chúng ta nạp một tệp Excel thô và lưu nó dưới dạng dataframe 29. Chúng tôi giả định rằng tệp này nằm trong thư mục làm việc của bạn hoặc thư mục gốc của dự án R và vì vậy không có thư mục con nào được chỉ định trong đường dẫn tệp.
Bạn có thể xem 50 hàng đầu tiên của bộ dữ liệu bên dưới. Lưu ý: hàm 30 trong base R cho phép bạn chỉ xem 31 hàng đầu tiên trong R console.Đánh giáBạn có thể sử dụng hàm 32 từ package skimr để có cái nhìn tổng quan về toàn bộ bộ dữ liệu (xem chương để biết thêm thông tin). Các cột được tóm tắt theo phân lớp/định dạng như ký tự và số. Lưu ý: “POSIXct” là một loại phân lớp ngày thô (xem chương .
Table 8.1: Data summaryNamelinelist_rawNumber of rows6611Number of columns28_______________________Column type frequency:character17numeric8POSIXct3________________________Group variablesNone Variable type: character skim_variablen_missingcomplete_rateminmaxemptyn_uniquewhitespacecase_id1370.9866058880date onset2930.96101005800outcome15000.7757020gender3240.9511020hospital15120.775360130infector23230.6566026970source23230.6557020age1070.98120750age_unit71.0056020fever2580.9623020chills2580.9623020cough2580.9623020aches2580.9623020vomit2580.9623020time_admission8440.8755010910merged_header01.0011010…2801.0011010 Variable type: numeric skim_variablen_missingcomplete_ratemeansdp0p25p50p75p100generation71.0016.605.710.0013.0016.0020.0037.00lon71.00-13.230.02-13.27-13.25-13.23-13.22-13.21lat71.008.470.018.458.468.478.488.49row_num01.003240.911857.831.001647.503241.004836.506481.00wt_kg71.0052.6918.59-11.0041.0054.0066.00111.00ht_cm71.00125.2549.574.0091.00130.00159.00295.00ct_blood71.0021.261.6716.0020.0022.0022.0026.00temp1580.9838.600.9535.2038.3038.8039.2040.80 Variable type: POSIXct skim_variablen_missingcomplete_rateminmaxmediann_uniqueinfection date23220.652012-04-092015-04-272014-10-04538hosp date71.002012-04-202015-04-302014-10-15570date_of_outcome10680.842012-05-142015-06-042014-10-26575 Trong R, tên cột là “tiêu đề” hoặc giá trị “trên đỉnh” của một cột. Chúng được sử dụng để tham chiếu đến các cột trong đoạn code và đóng vai trò như một nhãn mặc định trong các bảng biểu. Các phần mềm thống kê khác như SAS và STATA sử dụng “nhãn” là tên cột phiên bản dài hơn khi in, cùng tồn tại song song với tên cột. Mặc dù R cung cấp tính năng thêm nhãn của cột vào dữ liệu, nhưng điều này hầu hết không được nhấn mạnh trong thực tế. Để đặt tên cột “dễ nhìn” cho các bảng biểu, người ta thường điều chỉnh hiển thị của chúng trong các lệnh vẽ biểu đồ để tạo ra kết quả (ví dụ: tiêu đề trục hoặc chú giải của một biểu đồ hoặc tiêu đề cột trong bảng - xem thêm và chương ). Nếu bạn muốn gán nhãn cột trong dữ liệu, hãy đọc thêm tài liệu trực tuyến tại đây và tại đây. Vì tên cột trong R được sử dụng rất thường xuyên, vì vậy chúng phải có cú pháp “sạch”. Chúng tôi đề xuất những tiêu chí sau:
Tên các cột trong 29 được in bên dưới bằng cách sử dụng hàm 34 từ base R. Ban đầu chúng ta có thể thấy rằng:
CHÚ Ý: Để tham chiếu tên một cột có chứa khoảng trắng, hãy bao quanh tên cột bằng dấu huyền, ví dụ: linelist$ 38. Lưu ý là trên bàn phím, dấu huyền (`) được phân biệt với dấu ngoặc đơn (’).Làm sạch tự độngHàm 03 từ package janitor chuẩn hóa tên cột và biến chúng thành duy nhất bằng cách thực hiện như sau:
Sau đây, quy trình làm sạch bắt đầu bằng cách sử dụng hàm 03 trên bộ dữ liệu linelist thô.
LƯU Ý: Tên cột cuối cùng “… 28” đã được đổi thành “x28”. Làm sạch tên cột thủ côngViệc đặt tên lại các cột theo cách thủ công thường là cần thiết, ngay cả sau bước chuẩn hóa ở trên. Dưới đây, việc đổi tên được thực hiện bằng cách sử dụng hàm 02 từ package dplyr, như một phần của quy trình. 02 sử dụng cú pháp 46 - tên cột mới được đặt trước tên cột cũ.Dưới đây, một lệnh đổi tên được thêm vào quy trình làm sạch. Các khoảng trắng đã được thêm vào một cách chọn lọc để căn chỉnh code dễ đọc hơn.
Bây giờ bạn có thể thấy rằng tên các cột đã được thay đổi:
Thay đối tên cột theo vị tríBạn cũng có thể đổi tên theo vị trí cột, thay vì tên cột, ví dụ:
Đổi tên bằng hàm linelist_raw <- import("linelist_raw.xlsx") linelist_raw <- import("linelist_raw.xlsx") |