Thursday, 13 July 2017

Trong cuốn sách: Phân tích dữ liệu với R - GS Nguyễn Văn Tuấn (tr 19-26) đã hướng dẫn chi tiết cách nhập dữ liệu ở dạng mà R có thể hiểu được để xử lý, từ cách nhập số liệu trực tiếp bằng hàm c () [concatenate], bằng edit (data.frame()); nhập từ một text file: read.table; nhập từ Excel: read.csv; và nhập từ một SPSS: read.spss... Tài liệu đã hướng dẫn rất chi tiết về cách nhập dữ liệu từ nhiều cách khác nhau, nên mình không dám nhàm bàn thêm, có chăng, trong phạm vi cái note này, mình nói thêm một chút về những vướng mắc trong quá trình nhập dữ liệu trực tiếp, hoặc chuyển từ dạng khác (Excel) vào R để chuẩn bị các bước tiếp theo.

Dù là cách nhập trực tiếp hoặc gián tiếp từ Excel (read.csv), SPSS (read.spss)... để R có thể hiểu và xử lý được, các bạn phải rõ văn phạm ngôn ngữ trong R, mà đôi khi ngồi xử lý dữ liệu sẽ mất thời gian nếu ta không chú ý.

TH1: Tên biến khi nhập dữ liệu, thường thì R phân biệt chữ IN HOA và chữ thường, tương tự, tên biến mà để cách (ví dụ: Loai cay thay vì Loaicay) sau khi chuyển vào, R sẽ tự động chuyển dấu cách (Loai cay) thành dạng (Loai.cay) để R có thể đọc và xử lý được. Thực ra cũng không vấn đề gì nhiều. Tuy nhiên, khi xử lý kết quả và sau này cóp kết quả dán vào phần phụ lục sẽ không đẹp, và khoa học cho lắm. Thôi thì, ngay từ ban đầu ta hiểu và viết đúng dạng theo ý mình mà R cũng hiểu và xử lý được là tuyệt cú mèo nhất.
Khi bạn để dấu cách như vậy, trong R tự chuyển sang dấu chấm thay vì dấu cách (Hình dưới đây).
Để xem lại các biến trong file dữ liệu vừa nhập, bạn dùng lệnh: > fix(Keo)trong đó, Keo là tên biến.
Thực ra, dấu chấm giữa hai từ cũng đẹp (Loai.cay) hơn (Loaicay). Nói chung là tùy sở thích của mỗi bạn. Mình hay viết liền và sử dụng từ viết tắt hơn (Loaicay = Lc, Sinhtruong = St...).

TH2: Khi bạn đã chuyển dữ liệu vào R để xử lý. Tuy nhiên, nếu bạn không kiểm tra ngay từ đầu rất dễ có nhiều sai sót (sai lầm) từ người nhập dữ liệu. Ví dụ: dữ liệu đường kính gốc (Dgoc) của cây Keo là 12cm (12), bạn nhập nhầm là 120cm (120), khi xử lý số liệu sẽ có bất thường, đặc biệt khi vẽ biểu đồ bạn sẽ thấy một điểm bất thường trên biểu đồ.
Bạn để ý giá trị (mean+sd) của giá trị đường kính gốc (D.goc) ở 3 OTC (bôi vàng).
 > describeBy(Keo, group=otc, skew=F, range=F)
  Descriptive statistics by group
group: 1
             vars  n  mean    sd   se
otc             1 64  1.00  0.00 0.00
dd*             2 64  1.00  0.00 0.00
age             3 64  5.00  0.00 0.00
Loai.cay*       4 64  1.00  0.00 0.00
cv              5 64 35.73 11.11 1.39
D.goc           6 64 13.07 14.03 1.75
H.vn            7 64  8.95  2.00 0.25
Sinh.truong*    8 64  1.14  0.39 0.05
clu*            9 64  1.05  0.21 0.03
deld           10 64  2.28  0.71 0.09
delh           11 64  1.79  0.40 0.05
g              12 64  0.01  0.01 0.00
delg           13 64  0.00  0.00 0.00
m              14 64  0.06  0.04 0.01
delm           15 64  0.01  0.01 0.00
vtri*          16 64  1.00  0.00 0.00
dcao           17 64 29.00  0.00 0.00
----------------------------------------------------------------------
group: 2
             vars  n  mean   sd   se
otc             1 21  2.00 0.00 0.00
dd*             2 21  1.00 0.00 0.00
age             3 21  5.00 0.00 0.00
Loai.cay*       4 21  1.00 0.00 0.00
cv              5 21 43.10 9.05 1.97
D.goc           6 21 13.72 2.88 0.63
H.vn            7 21 12.63 1.70 0.37
Sinh.truong*    8 21  1.14 0.48 0.10
clu*            9 21  1.14 0.48 0.10
deld           10 21  2.74 0.57 0.13
delh           11 21  2.53 0.34 0.07
g              12 21  0.02 0.01 0.00
delg           13 21  0.00 0.00 0.00
m              14 21  0.10 0.04 0.01
delm           15 21  0.02 0.01 0.00
vtri*          16 21  1.00 0.00 0.00
dcao           17 21 39.00 0.00 0.00
----------------------------------------------------------------------
group: 3
             vars  n  mean   sd   se
otc             1 15  3.00 0.00 0.00
dd*             2 15  1.00 0.00 0.00
age             3 15  5.00 0.00 0.00
Loai.cay*       4 15  1.00 0.00 0.00
cv              5 15 26.67 6.83 1.76
D.goc           6 15  8.49 2.17 0.56
H.vn            7 15 10.13 0.64 0.17
Sinh.truong*    8 15  1.40 0.74 0.19
clu*            9 15  1.40 0.74 0.19
deld           10 15  1.70 0.43 0.11
delh           11 15  2.03 0.13 0.03
g              12 15  0.01 0.00 0.00
delg           13 15  0.00 0.00 0.00
m              14 15  0.03 0.02 0.00
delm           15 15  0.01 0.00 0.00
vtri*          16 15  1.00 0.00 0.00
dcao           17 15 15.00 0.00 0.00
Ở group: 1 giá trị mean (13,07) nhưng sd (14,03), trong khi ở group: 2 và group: 3, sd tương ứng 2,88 : 2,17. Vì vậy, sd ở group 1 (sd = 14,03) là bất thường.

Để tránh những sai lầm như vậy, sau khi nhập dữ liệu xong mình thường kiểm tra lại ngay trên Excel bằng cách chọn hàm max và min để xem giá trị lớn nhất và nhỏ nhất xem có gì bất thường hay không.
Ngoài ra, bạn có thể kiểm tra bằng cách vẽ biểu đồ điểm (giá trị Dgoc, Hvn...), khi đó bạn sẽ có cái nhìn trực quan nhất về dữ liệu thô (Hình dưới đây).
Để khắc phục vấn đề đó, ban đầu mình phải quay lại sửa số liệu ban đầu từ file Excel, rồi lại chuyển ngược lại vào R. Tuy nhiên, bạn có thể dùng lệnh: > fix(Keo)
như trên, cửa sổ Data Editor hiện ra và bạn tìm đến giá trị bất thường đó và sửa trực tiếp trong đó mà không cần phải quay lại sửa từ file Excel.
Đôi khi, có quá nhiều dữ liệu và bạn lỡ bỏ trống một ô nào đó, khi chuyển vào R, những ô đó R báo là dữ liệu trống không (NA), và đó cũng dấu hiệu để ta phát hiện ra những bất thường để chỉnh sửa trước khi bước bắt tay vào những bước tiếp theo.

Trong phạm vi cái note này mình đề cập đến một vài vấn đề mà mình đã gặp phải, muốn ai đó quan tâm, biết để tránh cho mình đỡ mất thời gian vào những vấn đề đó.
Ngoài ra, các bạn có thể học cách nhập dữ liệu bằng cách dán (paste) thẳng vào R bằng hàm scan () của BS Trần Quý Phi trên group: Thống kê ứng dụng và R đã chia sẻ. Dưới đây, mình xin được copy và paste cách của BS Trần Quý Phi, vừa là để lựa lại học hỏi, vừa là để ai đó quan tâm biết thêm về cách nhập dữ liệu: copy và dán giá trị từ Excel bằng hàm scan ().

"Bạn hãy thử dùng scan() bình thường như sau:
1. Gõ age=scan() trên R
2. Enter.
3. R sẽ cho ra từng dòng, có sẵn số thứ tự, bạn nhập xong một giá trị thì Enter.
4. Đến giá trị cuối cùng, đừng nhập chi cả, chỉ Enter thôi.
Bây giờ giả sử đã có dãy giá trị trong Excel rồi.
1. Trong Excel hãy chọn chúng và copy (Ctrl+C).
2. Ở trong R gõ age=scan() như trên rồi Enter.
3. Khi R nhắc cho giá trị thứ nhất, hãy bấm Ctrl+V (dán).
4. Loạt giá trị sẽ được điền vào cùng một lúc.
5. Enter để kết thúc." - BS. Trần Quý Phi

Ở cái note sau mình sẽ đề cập một chút đến tách dữ liệu bằng hàm subset () và chiết dữ liệu bằng hàm chol(), mình nghĩ sẽ là rất hữu ích cho việc bước tiếp theo khi xử lý cũng như vẽ biểu đồ, đặc biệt là về những vấn đề mà mình gặp phải trong khi chuẩn bị dữ liệu. Hẹn gặp lại. Trân trọng!.

0 nhận xét:

Post a Comment

Powered by Blogger.

Contact Form

Name

Email *

Message *

Pages - Menu

Popular

Total Pageviews

Popular Posts

Recent Posts

Text Widget