Trong cái note này, mình đề
cập một chút đến “văn phạm” trong R mà đôi khi ngồi xử lý dữ liệu sẽ mất thời
gian nếu chúng ta không chú ý. “Văn phạm” chung của R là một lệnh (command) hay
function (hàm). Các lệnh phải tuân thủ “nghiêm ngặt” theo “văn phạm” và ngôn ngữ
của R [1]. Đơn cử, R phân biệt lệnh viết chữ hoa hay chữ thường “L” và “l”, hay
thiếu dấu () R sẽ không chạy vào báo dấu (+) thay vì dấu (>)... Trong phạm
vi bài viết, mình đề cập đến dấu chấm (.) và dấu phẩy (,) trong nhập dữ liệu.
Thay lời giải thích, mình
đi thẳng vào dữ liệu để vẽ biểu đồ đường (line) trong ví dụ dưới đây.
Trường hợp, sử dụng dấu phẩy
để phân biệt đơn vị hàng nghìn hay đơn vị 1/1000 khi nhập dữ liệu trong excel.
> fix(KT11)
Giá trị diện tích (S) của
các loại đất, loại rừng được sử dụng dấu phẩy (,) để phân biệt đơn vị hàng
nghìn. Từ dữ liệu này, chúng ta tiến hành vẽ biểu đồ với lệnh như dưới đây:
> kt=ggplot(data=KT11,aes(x=Year, y=S, group=as.factor(Location), color=Location))+ geom_line()+ geom_point()+ xlab("Nam")+ ylab("Diện tích, ha")
Đường biểu diễn diện tích
rừng trồng (RT- màu xanh lá cây) thể hiện giá trị bất thường (đường zic zắc) và thang giá trị của
trục tung (diện tích) cũng sắp xếp không theo quy luật. Nghĩa là, trong dữ liệu
R phân biệt dấu phẩy (,) và không dấu () trong chuỗi giá trị của dữ liệu.
Để khắc phục được vấn đề
này, chúng ta quay lại số liệu gốc bỏ tích dấu phẩy (,) để phân biệt hàng nghìn
và đơn vị 1/1000, nghĩa là, không dùng dấu phẩy (,) trong một số liệu. Kết quả
như sau:
> fix(KT1)
Từ dữ liệu trên, chúng ta
tiến hành các lệnh tương tự như trên (trường hợp trên). Lệnh như sau:
> kt=ggplot(data=KT1,aes(x=Year, y=S, group=as.factor(Location), color=Location))+ geom_line()+ geom_point()+ xlab("Nam")+ ylab("Diện tích, ha")
Kết quả cho thấy, số liệu
diễn biến diện tích các loại đất loại rừng phản ảnh đúng thực tế của dữ liệu. Bạn
có thể đối chiếu đường (line) của rừng trồng (RT) mà xanh lá cây của hình này với
trường hợp trên để thấy sự khác biệt.
Đến đây, chúng ta có thể sử
dụng các layer trong package “ggthemes” để hoàn thiện biểu đồ tương đối đẹp và
khoa học hơn.
> kt1=kt+ theme_bw()+theme_classic()+ geom_rangeframe()+theme_tufte()+scale_x_continuous(breaks = c(2000,2005,2010,2014))+ scale_y_continuous(breaks = extended_range_breaks()(KT1$S))
Hoặc các bạn có thể thay
các ký hiệu các điểm (dot) cho mỗi đối tượng để dễ nhận biết:
> kt=ggplot(data=KT1,aes(x=Year, y=S, group=as.factor(Location), color=Location))+ geom_line()+ xlab("Nam")+ ylab("Diện tích, ha")+ geom_point(aes(shape=Location, color=Location, size=Location))
> kt1=kt+ theme_bw()+theme_classic()+ geom_rangeframe()+theme_tufte()+scale_x_continuous(breaks = c(2000,2005,2010,2014))+ scale_y_continuous(breaks = extended_range_breaks()(KT1$S))
Trên đây mình có đề cập một
chút (chi tiết nhỏ) liên quan đến “văn phạm” trong R, nếu không tuân thủ nghiêm
ngặt các “văn phạm” và ngôn ngữ trong R thì chúng ta sẽ mất nhiều thì giờ để xử
lý. Trong phạm vi bài viết, mình mới đưa ra 01 phương án, tức lại quay lại số
liệu không để khắc phục, mà chưa có cách khác hay hơn (dùng một lệnh kèm trong
quá trình vẽ biểu đồ, đỡ mất thời gian hơn). Tuy nhiên, mình chưa biết cách khắc
phục, bạn nào biết cách khắc phục (không quay lại sửa số liệu gốc) bày giúp nhé, để mọi
người cùng biết. Trân trọng!
=================
[1]
Nguyễn Văn Tuấn (2014). Phân tích dữ liệu với R. Nxb Tổng hợp TP HCM, 518 trang
(tr12).
0 nhận xét:
Post a Comment