Dữ liệu khi được tải xuống chứa một số lỗi vị trí thẳng thắn, do đó, điều đầu tiên cần làm là giới hạn tọa độ ở các giá trị hợp lý:
data.df <- read.csv("f:/temp/All_Africa_1997-2011.csv", header=TRUE, sep=",",row.names=NULL)
data.df <- subset(data.df, subset=(LONGITUDE >= -180 & LATITUDE >= -90))
Việc tính toán tọa độ và số nhận dạng ô lưới chỉ là vấn đề cắt bớt các số thập phân từ các giá trị vĩ độ và kinh độ. (Nói chung, đối với các trình quét tùy ý, trước tiên, trung tâm và chia tỷ lệ chúng thành đơn vị tế bào, cắt bớt các số thập phân, sau đó nối lại và lấy lại vị trí ban đầu của chúng, như được hiển thị trong mã cho ji
bên dưới.) Chúng ta có thể kết hợp các tọa độ này thành các định danh duy nhất, đính kèm chúng vào khung dữ liệu đầu vào và viết khung dữ liệu tăng thêm ra dưới dạng tệp CSV. Sẽ có một bản ghi cho mỗi điểm:
ji <- function(xy, origin=c(0,0), cellsize=c(1,1)) {
t(apply(xy, 1, function(z) cellsize/2+origin+cellsize*(floor((z - origin)/cellsize))))
}
JI <- ji(cbind(data.df$LONGITUDE, data.df$LATITUDE))
data.df$X <- JI[, 1]
data.df$Y <- JI[, 2]
data.df$Cell <- paste(data.df$X, data.df$Y)
Thay vào đó, bạn có thể muốn đầu ra tóm tắt các sự kiện trong mỗi ô lưới. Để minh họa điều này, hãy tính tổng số trên mỗi ô và xuất ra số đó, một bản ghi cho mỗi ô:
counts <- by(data.df, data.df$Cell, function(d) c(d$X[1], d$Y[1], nrow(d)))
counts.m <- matrix(unlist(counts), nrow=3)
rownames(counts.m) <- c("X", "Y", "Count")
write.csv(as.data.frame(t(counts.m)), "f:/temp/grid.csv")
Đối với các tóm tắt khác, thay đổi function
đối số trong tính toán của counts
. (Cách khác, sử dụng bảng tính hoặc phần mềm cơ sở dữ liệu để tóm tắt tệp đầu ra đầu tiên theo mã định danh ô.)
Để kiểm tra, hãy ánh xạ số đếm bằng cách sử dụng các tâm lưới để xác định vị trí các ký hiệu bản đồ. (Các điểm nằm ở Biển Địa Trung Hải, Châu Âu và Đại Tây Dương có các vị trí đáng ngờ: Tôi nghi ngờ nhiều trong số chúng là do trộn lẫn vĩ độ và kinh độ trong quá trình nhập dữ liệu.)
count.max <- max(counts.m["Count",])
colors = sapply(counts.m["Count",], function(n) hsv(sqrt(n/count.max), .7, .7, .5))
plot(counts.m["X",] + 1/2, counts.m["Y",] + 1/2, cex=sqrt(counts.m["Count",]/100),
pch = 19, col=colors,
xlab="Longitude of cell center", ylab="Latitude of cell center",
main="Event counts within one-degree grid cells")
Quy trình này hiện đang
Tài liệu kỹ lưỡng (bằng R
chính mã),
Tái sản xuất (bằng cách chạy lại mã này),
Mở rộng (bằng cách sửa đổi mã theo những cách rõ ràng) và
Nhanh chóng hợp lý (toàn bộ hoạt động chỉ mất chưa đến 10 giây để xử lý 53052 quan sát này).