July 31, 2016

H
ậu quả mà cơn bão số 1/2016 (từ đêm 27/7 đến sáng 28/7) đổ bộ vào các tỉnh đồng bằng Bắc bộ, trong đó nặng nề nhất là các tỉnh Nam Định, Thái Bình, Ninh Bình, Hà Nam... khó mà có thể cân đo đong đếm được những thiệt hại do bão gây ra, đặc biệt những gì mà người dân địa phương phải vật lộn, chống chịu trước sự tàn phá ghê gớm mới thấu hiểu hết được. Bão nhiệt đới. Quy luật của tự nhiên. Chẳng có gì bàn cãi cả. Có chăng, chỉ là vấn đề dự báo sai, chưa sát với thực tế (1):
-       Trung tâm Dự báo khí tượng thủy văn Trung ương đã dự đoán sai cường độ của cơn bão khi dự báo cấp 8 nhưng thực tế bão đã mạnh cấp 9, gió giật cấp 10 - 13, ven biển giật cấp 13 - 15, đặc biệt bão di chuyển chậm, thậm chí nhiều lúc không di chuyển khiến sức tàn phá lớn.
-       Theo ông Nguyễn Văn Tuệ - Cục trưởng Cục Khí tượng Thủy văn và BĐKH (Bộ TN & MT) xác nhận, dự báo cường độ cơn bão số 1 chưa sát với thực tế. Thủ tướng cũng đã họp và yêu cầu đơn vị rút kinh nghiệm sâu sắc.
-       Chủ quan. Việc bão số 1 gây thiệt hại lớn lỗi không hoàn toàn do Trung tâm Dự báo khí tượng thủy văn dự báo sai mà còn có một phần chủ quan của các địa phương trong công tác ứng phó bão.


Do đó công tác chuẩn bị ứng phó với bão có phần bất cẩn, lơ là, chủ quan và hậu quả nặng nề mà người dân gánh chịu thì khó mà khắc phục hết được. Báo cáo Ủy ban quốc gia tìm kiếm cứu nạn cho biết, bão số 1 đã làm chết 2 người, 1 người mất tích, 9 người bị thương ở các tỉnh Nam Định, Thái Bình, Hà Nội. Bão làm sập 38 căn nhà, 2.355 nhà bị hỏng, tốc mái, nhấn chìm 59 tàu thuyền, hư hỏng 13 ô tô, hư hại 190.202 ha lúa và hoa màu, đổ 38.375 cây xanh... mạng lưới điện hạ thế hư hỏng nặng, gây sự cố mất điện trên diện rộng cho nhiều địa phương trong nhiều ngày (2).

Trên đây là một số nét chính, mà một số bài báo trên 24h đã nhận định, tổng kết. Tuy nhiên, điều đáng nói, cơ quan dự báo sai, chưa sát với thực tế, chính quyền địa phương chủ quan, lơ là trong công tác ứng phó bão... và người dân gánh chịu hậu quả cho những lỗ hổng về “năng lực và khả năng công nghệ dự báo của nước ta còn hạn chế” (1). Rồi “Thủ tướng yêu cầu rút kinh nghiệm dự báo bão sai” (3)... Không một đơn vị, cơ quan công quyền hay cá nhân nào chịu trách nhiệm. Đơn giản. Do bão. Do thiên nhiên gây ra. Thủ tướng yêu cầu các đơn vị, địa phương rút kinh nghiệm sâu sắc và là bài học kinh nghiệm nhãn tiền... Chao ôi. Bài học kinh nghiệm, rút kinh nghiệm đến khi nào? Bài học kinh nghiệm nhãn tiền trên cơ sở thiệt hại về người, của và sinh kế của người dân ư? Các vị ở nhà cao cửa rộng, bão có to hơn nữa cũng chẳng hề hấn chi, ngủ vẫn ngon, chẳng nghe và cảm nhận được những cơn cuồng phong thổi, giật như thế nào. Trong khi, người dân địa phương thấp thỏm, ứng phó với bão trong mưa, gió. Nhà sập. Nhà tốc mái. Tính mạng con người bị uy hiếp, nỗi đau về tinh thần đó chẳng gì làm nguôi ngoai được, khi họ cũng chỉ nghĩ do “mẹ thiên nhiên” gây ra. Khắc phục những hậu quả sau bão là cần kíp, bởi ổn định cuộc sống, sản xuất cho người dân. Tuy nhiên, đó chỉ là “thứ yếu”. Quan trọng hơn cả, công tác dự báo, chuẩn bị trước những cơn giận dữ của mẹ thiên nhiên để hạn chế đến mức thấp nhất những thiệt hại về người, của và tinh thần người dân, đặc biệt những người nghèo khó.

Có trong chăn mới biết chăn có rận”. Có ở trong cảnh huống chống chọi với bão mới biết cơn bão mạnh, sức tàn phá ghê gớm thế nào? Mới biết người dân phải vật lộn trước hoàn cảnh đó như thế nào? “Cụ tưởng thổi bay cả nóc nhà khi thấy tấm tôn bay qua, chạm vào nóc”. Rồi “Bác tí nữa bị thổi bay cả người khi cố lên trần nhà tháo nước không nước chảy hết vào nhà” (trường hợp tại Hà Nam)... Đó là một trong vô vàn cảnh huống mà người dân trong thời khắc đó phải trải qua.


Sau cơn bão, cây cối đổ gãy tan tác. Tưởng rằng, năm nay ông trời đi vắng, được mùa nhãn. Nhưng thôi. Sau một đêm trút sạch. Sáng ra, nhãn, sấu lẫn lộn rụng nhan nhản, trải khắp mặt vườn. Cây nào còn ít quả cũng khó tận thu được, còn quả nào trên cây do va đập nên nhãn hỏng đằng nhãn (bị thối), sấu hỏng đằng sấu (vỏ sấu bị cọ sát, va đập bị thâm đen), chuối đổ la liệt... Khó có thể dùng văn ngữ nào để diễn tả hết, diễn tả đúng, sát với thực tế về những gì hiện hữu sau cơn bão Mirinae. Trong khi đó, trên kia (chỉ các vị dự báo, chính quyền địa phương) các vị chỉ rút kinh nghiệm, làm bài học nhãn tiền. Hàng năm, có cả chục cơn bão lớn có, bé có đổ bộ vào nước ta. Ấy vậy, các vị lấy đó làm bài học nhãn tiền, rút kinh nghiệm sâu sắc cho những cơn bão sau. Không thể lấy tính mạng, của cải vật chất, đời sống tinh thần của người dân làm bài học nhãn tiền cho các vị như vậy được. Không thể xem nhẹ tính mạng và lấy tính mạng của người dân như trò đùa.


=====================================================================

July 30, 2016

T
rong phạm vi bài này, mình mới biết thêm và tập tành việc kết hợp package gggplot2 với package rvg and package ggiraph để tạo nên những biểu đồ đẹp, bắt mắt và quan trọng hơn cả là logic, khoa học hơn có thể. Như vậy, cho thấy ggplot2 có thể kết hợp với nhiều packages khác giúp làm đẹp hơn cho các biểu đồ mà mình mong muốn. Hãy thử tập tành chút với 04 packages (ggplot2, ggthemes, rvg and ggiraph) dưới đây. Tuy nhiên, để cảm nhận được sự khác biệt khi kết hợp ggplot2 với các gói khác thì việc dùng những cụm từ khó mà có thể diễn tả hết được. Vì vậy, nếu ai đó quan tâm nên thử để cảm nhận sự khác biệt đó.

Ví dụ dưới đây mình sẽ nói cụ thể từng layer ở mỗi packages khác nhau để kết hợp với gói ggplot 2 để vẽ biểu đồ. Như các bài trước mình đã kết hợp các layer giữa ggplot2 với gridExtra, giữa ggplot2 với ggthemes, hoặc giữa ggplot2 với ggthemes và gridExtra... ở bài này là sự hòa quyện giữa 04 packages để tạo nên một biểu đồ tương đối hoàn chỉnh. Xin được dùng từ tương đối thôi, bởi ggplot2 có thể kết hợp nhiều hơn nữa các gói khác để tạo nên những biểu đồ đẹp hơn, lung linh hơn và quan trọng hơn cả là KHOA HỌC.

Dưới dây là các layer ở mỗi gói khác nhau để kết hợp với ggplot2 là chủ đạo, cụ thể:
#data=rt2
#library (ggplot2)
#library (ggthemes)
#library (rvg)
#library (ggiraph)

#package (ggthemes)
# geom_rangeframe()+ theme_tufte()+scale_x_continuous(breaks=extended_range_breaks()(data$x))+scale_y_continuous(breaks=extended_range_breaks()(data$y))

#package (rvg)
#geom_point_interactive(aes(tooltip=..., data_id=...), size=...)

#package (ggiraph)
ggiraph(code=print(datanew), width=...)

Riêng việc kết hợp với ggiraph sẽ tạo ra link biểu đồ ngay trong ổ C của máy tính cá nhân. Từ đó biểu đồ đó, ta di chuột đến bất cứ điểm nào (dot) trên biểu đồ sẽ cho thông tin về điểm đó (trong ví dụ là chỉ số đường kính, chiều cao, tiết diện ngang, trữ lượng, độ cao...). Thực ra việc giải thích như vậy sẽ khó hình dung. Việc thử nghiệm, tập tành và cảm nhận những dữ liệu, biểu đồ tạo ra mới là phương án tốt nhất. Hãy cùng thử nghiệm và cảm nhận các biểu đồ qua sự kết hợp 04 packages nói trên.
  
> g1=ggplot(data=rt2, aes(x=diameter,y=tree_height, color=age))+ theme_minimal()+ xlab("stump diameter, cm")+ ylab("tree height, m")+geom_rangeframe()+ theme_tufte()+scale_x_continuous(breaks=extended_range_breaks()(rt2$diameter))+scale_y_continuous(breaks=extended_range_breaks()(rt2$tree_height)) +ggtitle(“Figure 1”)
> gg=g1+geom_point_interactive(aes(tooltip=age, data_id=age), size=2)
> ggiraph(code=print(gg), width=0.7)

#result Figure 1 


> g2=ggplot(data=rt2, aes(x=del_diameter,y=del_tree_height,colour=age))+ theme_minimal()+ xlab("growth stump diameter, cm/year")+ ylab("growth tree height, m/year")+geom_rangeframe()+ theme_tufte()+scale_x_continuous(breaks=extended_range_breaks()(rt2$del_diameter))+scale_y_continuous(breaks=extended_range_breaks()(rt2$del_tree_height))+ggtitle("Figure 2")
> gg2=g2+geom_point_interactive(aes(tooltip=age, data_id=age), size=2.5)+ scale_colour_gradient(low="#999999", high="#FF3333")
> ggiraph(code=print(gg2), hover_css="fill-opacity:.3:cursor:pointer:")
#result Figure 2 


> g3=ggplot(data=rt2, aes(x=g,y=m, color=do_cao))+ theme_minimal()+ xlab("G, cm2")+ ylab("M, m3")+geom_rangeframe()+ theme_tufte()+scale_x_continuous(breaks=extended_range_breaks()(rt2$g))+scale_y_continuous(breaks=extended_range_breaks()(rt2$m))+ggtitle("Figure 3")
> gg=g3+geom_point_interactive(aes(tooltip=do_cao, data_id=do_cao), size=2)
> ggiraph(code=print(gg), hover_css="fill-opacity:.3:cursor:pointer:")
#result Figure 3 


==============================================================================
Tham khảo: http://docs.ggplot2.org

July 28, 2016

N
ở bài trước mình có thực hành vẽ biểu đồ hợp với package ggplot 2. Hôm nay, mình kết hợp giữa package ggplot2 và ggthemes để vẽ biểu đồ hộp cho thêm phần sinh động, đặc biệt khoa học hơn. Ở bài vẽ biểu đồ hộp với ggplot 2 mình có nói qua về những thông tin mà biểu đồ hộp cung cấp như: trung vị, bách phân vị thứ 75, bách phân vị thứ 25... Ở bài này mình không đi sâu về các thông tin mà biểu đồ hộp cung cấp, mà chỉ đề cập đến việc kết hợp package ggthemes để vẽ biểu đồ cho ĐẸP, SINH ĐỘNG, LOGIC và KHOA HỌC hơn. Để minh chứng cho những gì mình nói, hãy tập tành vẽ biểu đồ hợp với sự kết hợp giữa package ggplot 2 và package ggthemes dưới đây:

Trường hợp, chỉ dùng package ggplot 2 để vẽ biểu đồ hộp
# data = rt2
> library (ggplot2)
> attach (rt2)
> head (rt2)
> h=ggplot(data=rt2, aes(x=age, y=diameter,fill=age))+ geom_boxplot(aes(group=age))+theme_bw()+ggtitle(“Figure 1”)
#result Figure 1



Hoặc


Nếu sử dụng layer: geom_violin() thay cho layer: geom_boxplot() như ở figure 1 bên trên, kết quả như sau:
> h1=ggplot(data=rt2, aes(x=age, y=diameter,fill=age))+ geom_violin(aes(group=age))+theme_bw()+theme_classic()+ggtitle("Figure 2")
 #result Figure 2


 Tuy nhiên, một điều có thể nhận thấy, ở hình 1 hay hình 2, thang giá trị về các chỉ tiêu sinh trưởng (trục tung trên hình: stump diameter, tree height...), độ tuổi (trục hoành: age)... thể hiện các giá trị chưa đều và chưa thực sự đẹp mắt, khoa học. Như trên trục tung giá trị thể hiện từ 0 - trên 20 cm (khoảng 24 gì đó), nhưng không cụ thể. Tương tự, ở trục hoành độ tuổi thể hiện có 3 độ tuổi là 3 tuổi : 5 tuổi : 7 tuổi (hình 1) và 2 tuổi : 4 tuổi : 6 tuổi : 8 tuổi (hình 2). Để khắc phục khuyết điểm này và trang trí cho biểu đồ ĐẸP hơn, LOGIC và KHOA HỌC hơn thì package ggthemes sẽ giúp bạn làm điều đó. Thực ra, trong bài kết hợp 3 packages (ggplot2, ggthemesvà gridExtra) để vẽ biểu đồ mình cũng có đề cập đến vấn đề này rồi. Nhưng trong phạm vi bài này mình chỉ kết hợp ggplot 2 và ggthemes để vẽ biểu đồ hộp thôi. Các bạn để ý giữa trục tung, trục hoành (mình có đánh dấu) giữa hình 1, 2 và 3, 4, 5 để thấy sự khác biệt này nhé.

Vẽ biểu đồ hộp với ggplot2 & ggthemes

> h=ggplot(data=rt2, aes(x=age, y=diameter,fill=age))+ geom_boxplot(aes(group=age))+theme_bw()+theme_classic()+ xlab("Age")+ ylab("stump diameter, cm")+ ggtitle("Figure 3")
> H=h+geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(rt2$age))+ scale_y_continuous(breaks=extended_range_breaks()(rt2$diameter))
# result Figure 3



                  
>  h1=ggplot(data=rt2, aes(x=age, y=tree_height,fill=age))+ geom_violin(aes(group=age))+theme_bw()+theme_classic()+ xlab("Age")+ ylab("tree height, m")+ ggtitle("Figure 4")
> H1=h1+geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(rt2$age))+ scale_y_continuous(breaks=extended_range_breaks()(rt2$tree_height))
# result Figure 4



        
 > h2=ggplot(data=rt2, aes(x=age, y=m,fill=age))+ theme_bw()+theme_classic()+geom_jitter(aes(color=age))+ xlab("Age")+ ylab("M, m3")+ ggtitle("Figure 6")
> H3=h2+geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(rt2$age))+ scale_y_continuous(breaks=extended_range_breaks()(rt2$m))
# result Figure 6





July 27, 2016

Đ
ây là bài tiếp theo trong list bài về “lão hạc thế kỷ 21” mà mình đang cố gắng xây dựng dựa trên câu chuyện hoàn toàn có thật. Tuy nhiên, cũng có đôi chút hư cấu, đặc biệt khó tránh khỏi cái “tôi” cá nhân. Như ở bài trước có đề cập, bài này mình sẽ gửi tới quý bạn đọc câu chuyện với tựa đề “con giời”.

Con giời!

Một dạo, Toàn (T) em của Thắng mời mình đến uống cốc bia với lý do rất đơn giản nhưng cũng đầy cảm tình. Lâu em mới về, gọi anh đến uống cốc bia cho vui. Được cái mình cũng sống thoải mái với cậu em. Chuyện mình mời T đến uống bia, ăn cơm hay đến phòng trọ chơi, ăn, ngủ, nghỉ... bình thường như cân đường hộp sữa. Hôm đó, có bố T, T và mình. Bữa cơm thân mật thôi. Đang ngồi uống được khoảng 15 phút. Không khí đang vui vẻ khi hỏi, kể mọi chuyện lâu ngày T mới về. Rồi những lời căn dặn thật lòng của người cha. Ngay cả mình cũng giãi bày thêm những nỗi khổ, nhọc nhằn mà gia đình, đặc biệt người cha ở nhà đang trải qua để T hiểu.
-       Con đi làm bớt chơi, dành dụm mua con bò để bố chăn dắt sớm hôm, chứ giờ tuổi bố đã cao, sức đã yếu, không thể đi làm thuê như trước được... Bố tâm sự.
-       Em đã ra trường đời, kiếm tiền cả chục năm nay rồi. Còn thứ gì em chưa trải qua đâu. Ngay như anh, tuổi hơn em 5 - 6 tuổi. Nhưng nhiều thứ chưa trải qua cũng không nhiều kinh nghiệm bằng em được. Tuy nhiên, qua những lần “chơi bời” như vậy, em phải đúc rút được gì cho bản thân chứ. Mai mốt còn phải lo cho gia đình bé nhỏ của mình. Chứ sống một mình mãi đâu. Em thấy đấy, tuổi như bố em nhiều Bác có cháu bồng cháu bế, sớm hôm sum vầy cùng con cháu. Trong khi đó, giờ bố em ở nhà một mình, mẹ em cũng phải đi làm thuê (osin), chị gái em còn con cái, gia đình bên đằng chồng, Thắng nhà em đi biền biệt mấy năm trời không về nhà... Như bố em giãi bày, em tiết kiệm mua cho bố con bò. Hàng tháng em làm đủ công chỉ tháng rưỡi là có con bò để bố chăn dắt. May mắn 3 năm 2 lứa bê, mỗi năm cũng có cả chục triệu. Ở quê làm gì ra chục triệu, mà chẳng mấy vất vả, mất sức như đi làm thuê... Tôi tâm sự.

Đó là những tâm sự mà bố T và tôi giãi bày trong lúc ăn cơm. Thực ra, tôi còn tâm sự với em nhiều hơn thế nữa, thậm chí nhiều lần cho em mượn tiền, nhưng chưa thấy em trả bao giờ, mà chắc tôi cũng chẳng hy vọng em trả. Được cái, từ khi có gia đình, không thấy em mượn tiền tôi như trước kia. Chắc em cũng hiểu cuộc sống khi có gia đình nhỏ. Tuy nhiên, tôi chẳng ngại vấn đề cho em mượn tiền mà em chưa thấy trả. Quan trọng cho em mượn tiền giải quyết việc gì, chứ để trả nợ cho những chơi bời không đâu thì chắc sẽ không có thêm lần nữa. Về vấn đề cho T mượn tiền tôi sẽ kể vào dịp khác.

Quay lại câu chuyện, đang ngồi ăn cơm, nói chuyện vui vẻ. Có tiếng người vào nhà từ ngoài cổng. T chạy ra xem ai. 3 phút sau, T to tiếng chạy vào nhà tìm cái gì đó. Tôi và Bác hốt hoảng chạy ra xem. Chủ "con nợ” đến đòi tiền. Khổ nỗi mình nợ tiền thì mình phải trả. Chơi được chịu được. Rõ ràng. Đằng này còn hổ báo. “Chó cậy gần nhà, gà cậy gần chuồng” là đây. Không biết ra ngoài nói chuyện gì. Chạy vào nhà chửi ngược ra. Còn dọa ngược lại “chủ nợ” mới ghê. Hết chỗ nói. Khi đó tôi chạy ra, hóa ra 2 vợ chồng chủ quán nét cạnh nhà tôi, cũng là cháu gọi tôi bằng chú, nhưng chắc vợ chồng không nhận ra. Tôi hỏi 2 bạn có việc gì mời vào nhà nói chuyện, chứ đứng ngoài này không hay. T được đà càng nói to.
-       Tao đéo vào trả. Mày ngồi đó mà mơ. Tao chỉ trả tiền nét thôi. Còn tiền "xèng" tao đút...cặc...vào...trả - T chửi to.
-       Mày có giỏi cứ không trả xem sao. Tao cho luôn - Chủ nợ nói.
Giữa chủ nợ và con nợ lời qua tiếng lại. Bố T hỏi mày nợ những gì thì trả hết đi. Điên đầu tao. Con trả rồi, còn 5 trăm nữa thôi. Còn tiền xèng không phải trả (không biết mấy triệu) - T nói. Tôi cũng nói, chơi được phải trả được. Người ta mở ra có phải miễn phí đâu. T nói tiếp, bọn thằng L, thằng H nó có trả đâu. Một lúc sau, bác bảo thôi các cháu cứ về đi, bác sẽ bảo em nó mang tiền trả hai cháu sau. Chủ nợ đi về cũng không quên nói “mày giỏi cứ không trả xem sao”. T, mày dám thách bố mày. Tao...đút...cặc...vào...trả.

Thế là bữa cơm đang dùng cũng bỏ dở. T nói, bố vào ăn cơm cho xong đi. Tao không ăn nữa, khổ vì con vì cái - Bác nói. Tôi mời bác ăn dùng bữa tiếp. Bác bảo cháu cứ ăn đi. Bác không ăn nữa. Tôi cũng uống xong cốc bia cũng thôi. Tôi ngồi hỏi han sự tình câu chuyện nợ ở quán nét. Hóa ra, em đến chơi nét (game), kêu thuốc, nước, mì tôm trứng... cho những buổi thâu đêm. Còn kêu “đắt” nữa. Tôi bảo không lẽ họ mở ra phục vụ mọi người không công ư. Ngồi gác chân, vểnh râu trê, quát to (gọi thuốc, nước, mì tôm...) người ta phục vụ tận mồm còn kêu đắt.
-       Còn chơi “xèng” sao không trả tiền? - tôi hỏi. Trò lừa đảo, T nói.
-       Ô hay, người ta mở ra, việc mình chơi hay không họ có bắt ép đâu. Khi chơi được ăn thua chịu, chuyện đương nhiên. Nay chơi thua, lại còn chơi chịu mà lại không chịu trả, tôi nói.
T2 dẫn chứng việc mình không trả. Thằng H nó chơi chịu hết 10 triệu, mới trả 3 triệu, còn lại nó cũng không trả. Thằng L cũng vậy, nó có trả đâu. Đó là cách giải thích của một thằng “cùn”. Chơi được mà không trả được thì lần sau đừng có mà chơi. “Nợ” tiền, bây giờ người ta đến đòi, nên thu xếp mà trả cho xong, đỡ đau đầu, gây phiền phức cho bố em, tôi bực mình nói vài câu. Bố T cũng tiếp lời, còn nợ bao nhiêu mang trả đi cho xong tội. Đang ngồi nói chuyện, một cuộc điện thoại gọi đến T làm đứt quãng câu chuyện. Nhưng T không nhấc máy. Đầu bên kia cứ gọi. Bên này lại tắt. Tôi hỏi ai gọi mà không bắt máy. T không nói gì. Cuộc thứ 3 gọi đến T bắt mắt. Anh dọa em à. Anh đòi nợ hộ bọn nó à. Bọn nó đến nhà em nói nhẹ nhàng không nghe, còn “hổ báo”. Em đéo trả bọn nó. Đó là những gì T nói chuyện với người đầu bên kia, rồi tắt máy. Tôi hỏi T không cho biết là ai.

Giá như...

Thực sự mà nói, nếu chủ quán nét không cho cắm nợ, chịu... thì cũng có cái khó riêng. Bởi, toàn người làng. Như vậy sẽ không giữ được khách, đặc biệt khách quen, khách tiềm năng (chịu chơi, chơi nhiều). Mà cho chơi chịu, ăn, uống... nợ, giờ mới đến nông nỗi này. Cái khó nữa, cho chịu một vài trăm, hay đôi ba triệu không sao. Nay cả chục triệu bạc, có ít đâu. Ở quê kiếm đâu ra tiền. Mà một lúc trả cả cục như thế, thấy “xót”, cay mũi lắm. Đúng là của đau con xót. Khi đó, chuyện tìm cách “bùng” sẽ xảy ra. Thực tế như vậy. Thực ra, ở quê còn người nọ người kia mới vậy, chứ ra ngoài đường đố dám. Chắc điều này, em cũng hiểu rõ hơn ai hết. Và GIÁ NHƯ... chủ quán không cho chơi hay ăn uống chịu có lẽ sẽ không xảy ra sự việc đáng tiếc như vậy. Qua đây, có thể coi là bài học cho “con nợ” và “chủ nợ”. Mà với đối tượng như vậy chắc không có lần sau.


Trên đây là một góc nhỏ trong list câu chuyện về cuộc sống thường nhật của “lão hạc thế kỷ 21”. Mời quý bạn đọc theo dõi tiếp kỳ sau, với tựa đề “con số đỏ đen”.

=======================================================================
Note: Nhân vật trong câu chuyện đã được thay đổi tên

July 26, 2016

Hôm nay, đang ngồi xử lý số liệu thì gặp trường hợp số liệu trống không (missing value). Để thuận tiện cho các phân tích tiếp theo, thì loại bỏ “số liệu trống không” trong data.frame là rất cần thiết. Vì R không tính toán được các phân tích tiếp theo.

Loại bỏ số liệu trống không

Trong nghiên cứu, vì nhiều lý do, số liệu không thể thu thập được cho tất cả các đối tượng, hay không thể đo lường tất cả các biến số cho một đối tượng, đặc biệt các nghiên cứu theo thời gian (số liệu theo thời gian). Trong phạm vi bài viết, số liệu về sinh trưởng cây Keo lá liềm được thử nghiệm trên vùng cát ven biển (3 huyện của 3 tỉnh vùng BTB), với 4 công thức thí nghiệm (CTTN) khác nhau, theo dõi qua các độ tuổi khác nhau. Trong trường hợp đó, số liệu trống được xem là “missing value”, có thể gọi là số liệu trống không. Trong R xem các số liệu trống không là NA (xem hình dưới đây, ví dụ các đối tượng (id) từ 171 đến 177).


Có một số kiểm định thống kê đòi hỏi phải loại các số liệu trống không ra (vì không tính toán được) trước khi phân tích. Số liệu trống không trong ví dụ, là các biến của cây Keo lá liềm bị chết, nên không có số liệu. Vậy câu hỏi đặt ra, tại sao không loại bỏ trước khi nhập số liệu? Như trên mình có nói, trường hợp nghiên cứu là đánh giá các biến (các chỉ tiêu sinh trưởng) của cây Keo lá liềm ở các CTTN theo thời gian (qua các năm, các độ tuổi khác nhau). Trong quá trình theo dõi việc đối tượng bị mất, hay bị chết, đặc biệt trong công tác trồng vùng đất cát ven biển là điều khó tránh khỏi. Vấn đề được đặt ra tiếp theo, loại bỏ các số liệu trống không ra khỏi data để phân tích tiếp theo? Thông thường, mình hay vào file gốc xóa bỏ các dòng (đối tượng) trống không. Như vậy rất mất thời gian (thủ công), dễ sai sót. Tuy nhiên, trong R có một lệnh rất có ích cho việc này: na.omit. Cách sử dụng như sau:

> LeThuy_Age1.3=na.omit(LT_Age1.3)
Trong lệnh trên, chúng ta yêu cầu R loại bỏ các số liệu trống không trong data.frame (LT_Age1.3) và data.frame (LeThuy_Age1.3) mới đã được loại bỏ các số liệu trống không. Kết quả thể hiện trong hình dưới đây (để ý cột id và cột mới row.names).


Kết quả hình trên cho thấy (để ý dòng cuối cùng), cột id có số thứ tự cuối cùng là 227 và cột row.names có số thứ tự 243. Tức là, có 16 đối tượng có số liệu trống không đã được loại bỏ.

Từ đây (data.frame đã loại bỏ số liệu trống không – LeThuy_Age1.3) có thể xử lý thống kê thông thường.
Trong phạm vi bài viết, mục tiêu là phân tích một số thông số thống kê thông thường như: mean, sd (độ lệch chuẩn), se (sai số chuẩn), median, bách phân vị 75%, bách phân vị 25%, max, min...
 Kết quả tính thông số thống kê: mean, sd, se như sau:
#attach(LeThuy_Age1.3)
#head(LeThuy_Age1.3)
> library(psych)
> describeBy(LeThuy_Age1.3, group=CTTN, skew=F, range=F)
#result

group: CT 1
                       vars  n  mean   sd   se
Local*                    1 67  2.00 0.00 0.00
Age                       2 67  2.30 0.00 0.00
CTTN*                     3 67  1.00 0.00 0.00
stump_diameter            4 67  3.52 1.37 0.17
tree_height               5 67  1.47 0.45 0.05
canopy_diameter           6 67  1.99 0.48 0.06
main_trunk                7 67  2.00 0.78 0.10
bough_50_cm               8 67 13.73 5.24 0.64
phan_than                 9 67  0.67 0.47 0.06
song_chet                10 67  1.00 0.00 0.00
stump_diameter_growth    11 67  1.53 0.60 0.07
tree_height_growth       12 67  0.64 0.19 0.02
canopy_diameter_growth   13 67  0.86 0.21 0.03
litter_fall              14 67  0.19 0.05 0.01
-------------------------------------------
group: CT 2
                       vars  n  mean   sd   se
Local*                    1 80  2.00 0.00 0.00
Age                       2 80  2.30 0.00 0.00
CTTN*                     3 80  2.00 0.00 0.00
stump_diameter            4 80  3.77 1.37 0.15
tree_height               5 80  1.58 0.51 0.06
canopy_diameter           6 80  2.06 0.46 0.05
main_trunk                7 80  1.91 0.92 0.10
bough_50_cm               8 80 12.40 5.85 0.65
phan_than                 9 80  0.79 0.41 0.05
song_chet                10 80  1.00 0.00 0.00
stump_diameter_growth    11 80  1.64 0.60 0.07
tree_height_growth       12 80  0.69 0.22 0.02
canopy_diameter_growth   13 80  0.89 0.20 0.02
litter_fall              14 80  0.20 0.06 0.01
-------------------------------------------
group: CT 3
                       vars  n  mean   sd   se
Local*                    1 75  2.00 0.00 0.00
Age                       2 75  2.30 0.00 0.00
CTTN*                     3 75  3.00 0.00 0.00
stump_diameter            4 75  4.52 1.43 0.16
tree_height               5 75  1.92 0.58 0.07
canopy_diameter           6 75  2.20 0.44 0.05
main_trunk                7 75  1.83 0.88 0.10
bough_50_cm               8 75 14.33 5.59 0.65
phan_than                 9 75  0.95 0.23 0.03
song_chet                10 75  1.00 0.00 0.00
stump_diameter_growth    11 75  1.97 0.62 0.07
tree_height_growth       12 75  0.83 0.25 0.03
canopy_diameter_growth   13 75  0.96 0.19 0.02
litter_fall              14 75  0.23 0.07 0.01
-------------------------------------------
group: DC
                       vars  n  mean   sd   se
Local*                    1 50  2.00 0.00 0.00
Age                       2 50  2.30 0.00 0.00
CTTN*                     3 50  4.00 0.00 0.00
stump_diameter            4 50  4.19 0.79 0.11
tree_height               5 50  1.50 0.44 0.06
canopy_diameter           6 50  1.91 0.33 0.05
main_trunk                7 50  1.50 0.65 0.09
bough_50_cm               8 50 11.84 4.24 0.60
phan_than                 9 50  0.90 0.30 0.04
song_chet                10 50  1.00 0.00 0.00
stump_diameter_growth    11 50  1.82 0.34 0.05
tree_height_growth       12 50  0.65 0.19 0.03
canopy_diameter_growth   13 50  0.83 0.14 0.02
litter_fall              14 50  0.21 0.04 0.01
-------------------------------------------

#Tương tự cho các độ tuổi còn lại.


Tuy nhiên, để phân tích được các thông số thống kê như: bách phân vị 75%, bách phân vị 25%, max, min... Chúng ta lại sử dụng lệnh subset trong R mà bài trước mình đã giới thiệu. Sau khi subset riêng cho từng CTTN, thì việc tiếp theo rất đơn giản cho phân tích thống kê cũng như vẽ các biểu đồ theo ý muốn.

#> LeThuy_DC=subset(LeThuy_Age1.3, CTTN=="DC")
#> attach(LeThuy_DC)
#> head(LeThuy_DC)

> summary(LeThuy_DC)
         Local         Age        CTTN    stump_diameter
 Cam_Duong  : 0   Min.   :1.3   CT 1: 0   Min.   :1.460 
 Le_Thuy    :34   1st Qu.:1.3   CT 2: 0   1st Qu.:1.995 
 Trieu_Phong: 0   Median :1.3   CT 3: 0   Median :2.530 
                  Mean   :1.3   DC  :34   Mean   :2.601 
                  3rd Qu.:1.3   DC  : 0   3rd Qu.:2.913 
                  Max.   :1.3             Max.   :4.620 
 ------------------------------------------------------
 tree_height     canopy_diameter   main_trunk  
 Min.   :0.6000   Min.   :0.450   Min.   :1.000 
 1st Qu.:0.8050   1st Qu.:0.935   1st Qu.:2.000 
 Median :0.9400   Median :1.050   Median :2.500 
 Mean   :0.9859   Mean   :1.055   Mean   :2.676 
 3rd Qu.:1.2300   3rd Qu.:1.188   3rd Qu.:3.000 
 Max.   :1.4700   Max.   :1.650   Max.   :6.000 
 ---------------------------------------------
 bough_50_cm      phan_than        song_chet
 Min.   :1.000   Min.   :0.0000   Min.   :1 
 1st Qu.:1.000   1st Qu.:0.0000   1st Qu.:1 
 Median :2.000   Median :0.0000   Median :1 
 Mean   :1.912   Mean   :0.3529   Mean   :1 
 3rd Qu.:2.000   3rd Qu.:1.0000   3rd Qu.:1 
 Max.   :4.000   Max.   :1.0000   Max.   :1 
 ------------------------------------------
 stump_diameter_growth tree_height_growth
 Min.   :1.130         Min.   :0.4600   
 1st Qu.:1.538         1st Qu.:0.6225   
 Median :1.945         Median :0.7250   
 Mean   :2.001         Mean   :0.7585    
 3rd Qu.:2.237         3rd Qu.:0.9425   
 Max.   :3.550         Max.   :1.1300   
 ------------------------------------
canopy_diameter_growth  litter_fall   
 Min.   :0.3500         Min.   :0.0600 
 1st Qu.:0.7225         1st Qu.:0.0900 
 Median :0.8100         Median :0.1200 
 Mean   :0.8121         Mean   :0.1235 
 3rd Qu.:0.9100         3rd Qu.:0.1400 
 Max.   :1.2700         Max.   :0.2300 
#Tương tự cho các CTTN còn lại.

Vẽ biểu đồ cho đối tượng nghiên cứu
Biểu đồ hộp (boxplot)
 #library(ggplot2)
> l=ggplot(data=LeThuy_Age1.3, aes(LeThuy_Age1.3$CTTN, y=stump_diameter))+ theme_bw()+ theme_classic()+ geom_boxplot(aes(fill=CTTN))+ xlab("CTTN")+ ylab("stump diameter, cm")
> lt3=l+ geom_rangeframe()+ theme_tufte()+ scale_y_continuous(breaks=extended_range_breaks()(LeThuy_Age1.3$stump_diameter))



Biểu đồ tương quan

> lt=ggplot(data=LeThuy_Age1.3, aes(x=stump_diameter, y=tree_height))+ theme_bw()+ theme_classic()+ xlab("stump diameter, cm")+ ylab("tree height, m")+ geom_point(aes(color=CTTN, size=Main_trunk))+ geom_smooth(method="lm")
> lt2=lt+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(LeThuy_Age1.3$stump_diameter))+ scale_y_continuous(breaks=extended_range_breaks()(LeThuy_Age1.3$tree_height))



#library(ggExtra)
Biểu đồ tương quan kết hợp với type=”histogram”
 > ggMarginal(lt2, type="histogram", color="White", size=2)



Biểu đồ tương quan kết hợp với type=”density”
> ggMarginal(lt2, type="density", color="green", size=2)



=====================================================================
Tham khảo: Nguyễn Văn Tuấn (2014). Phân tích dữ liệu với R. Nxb Tổng hợp TP HCM.

chủ đề

Ăn của rừng bài báo khoa học bản quyền bành trướng Bảo vệ cây là bảo vệ chính mình biến đổi khí hậu Biển Đông Biết sai vẫn cứ làm biểu đồ biểu đồ hộp biểu đồ sai số chuẩn Biểu đồ tương quan Biểu đồ với nhãn bon-sai boxplot buoc-dau-nghien-cuu-khoa-hoc but-ky-doi-toi Cái tài Cái tâm Cái tầm canh tác đất dốc Cây xanh đô thị Cha chung không ai khóc cha nào con nấy Chân thiện mỹ chân trong chân ngoài chạy chức chạy quyền Che chở Chết toàn tập chọn cách ta sống chữ tín chuyện giờ mới kể có vấn đề Cơm áo gạo tiền Con cháu các cụ con người biến thái Con ông cháu cha công nghệ 4.0 correlation matrix corrgram corrplot Cứ đi rồi sẽ tới cuộc cách mạng 4.0 Đam mê đàn gảy tai trâu danh dự danh xưng phù phiếm Đạo đức sống đào tạo sau đại học Đạo văn Đấu tranh sinh tồn day-do Đẹp trong tâm hồn Đi tắt đón đầu dở khóc dở cười đọc nghe nhìn và cảm nhận Dồn điền đổi thửa Động lực dựa vào nhau mà sống error bar plot GGalyy ggcorplot ggExtra ggiraph ggplot2 ggrepel ggthemes Giáng sinh Giáo dục giàu nghèo giục tốc bất đạt Góc quê gridExtra Hài lòng Hai mặt một lời hãy là chính mình hãy sống có trách nhiệm hơn hèn nhát Hiệu sau ứng bão hiệu ứng domino formosa Hiệu ứng sau bão Hòa cả làng học giả bằng thật hoc-lam-tho hoc-r-moi-ngay Ích kỷ KH&CN khả năng Khoán chi Không lối thoát Kiểm định thống kê kỹ năng mềm Kỷ niệm vùng miền Label lan rừng Lão Hạc thế kỷ 21 Liêm chính lính đánh thuê Lợi dụng lợi ích nhóm lừa trên gạt dưới lười suy nghĩ Lương thiện giả vờ Lương y Ma trận tương quan Mẹ Miền cát trắng miền đất hứa Mộc Châu món ăn địa phương Mùa gặt Mục đích sống Mường La Nghịch lý chất lượng - số lượng Nghiên cứu khoa học Ngồi chơi xơi nước Nhân cách nhu cầu Những cung đường tôi đã qua NN&PTNT phân cấp sinh trưởng phân tích hậu định phan-bien-xa-hoi plot3D psych Quán Nha R Rừng ngập mặn rước hổ về nhà rvg sach-hay SARS-CoV-2 sau-luy-tre-lang sciplot Số cây Số liệu trống không Sông Châu sống chết mặc ai sức ỳ sức ỳ bản thân suy thoái Tầm lùn tâm sự tâm sự buồn thảm họa formosa thảm họa môi trường tham nhũng Thân cô thế cô thắng cố ngựa Thăng trầm Thấy vậy mà không phải vậy Thế cây Thế cây cổ Thế cây thế người Thông điệp cuộc đời Thống kê mô tả Thông tư Thước đo lòng người Thủy điện Tiên trách kỷ hậu trách nhân Tình bạn cao đẹp Tình người Tố chất làm khoa học tội đếch gì mà phải ghét ai Tôi sợ giầu lắm track changes Trải nghiệm tre già măng mọc trở mặt Trung thực tư duy Tự sự Tư tưởng thụt lùi tuy duy nhiệm kỳ Ứng dụng R trong lâm nghiệp Văn hóa cảm ơn Văn hóa giao thông văn hóa ngầm Văn hóa xin lỗi Xấu khen đẹp chê Xỏ nhầm giầy xoay đầu đổi đít Ý tưởng

bài đã đăng

Powered by Blogger.

Disqus Shortname

Widget Recent Post No.

Widget Random Post No.

Widget Recent Comment No.

PageNavi Results No.

Labels Max-Results No.

Comments system

Contact Form

Name

Email *

Message *

bài đăng phổ biến

số lượt ghé qua trang blog

Bài đăng nổi bật

Thế cây thế người

T hế trong CÂY CẢNH thể hiện các chi tiết về CẤU TRÚC ở mọi phương diện, đa góc nhìn (trên dưới trái phải ngang dọc), trong đ...

Bài đăng phổ biến

bài xem nhiều nhất