Tuesday, 28 March 2017

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("Din 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("Din 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("Din 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

Powered by Blogger.

Contact Form

Name

Email *

Message *

Pages - Menu

Popular

Total Pageviews

Popular Posts

Recent Posts

Text Widget