İndirilen veriler bazı açık konum hataları içerir, bu nedenle yapılacak ilk şey koordinatları makul değerlerle sınırlamaktır:
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))
Izgara hücre koordinatlarını ve tanımlayıcılarını hesaplamak, yalnızca ondalık sayıları enlem ve boylam değerlerinden kesmektir. (Daha genel olarak, rasgele rasterler için, önce bunları ortadaki hücrelerin boyutuna göre ölçeklendirin, ondalık sayıları kısaltın ve sonra ji
aşağıdaki kodda gösterildiği gibi orijinal konumlarına yeniden ölçeklendirin ve yeniden girin .) Bu koordinatları benzersiz tanımlayıcılar halinde birleştirebiliriz, giriş veri çerçevesine ekleyebilir ve artırılmış veri çerçevesini CSV dosyası olarak yazabilirsiniz. Her puan için bir kayıt olacak:
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)
Bunun yerine, her ızgara hücresindeki olayları özetleyen çıktılar isteyebilirsiniz. Bunu göstermek için, hücre başına sayıları hesaplayalım ve hücre başına bir kayıt çıkaralım:
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")
Diğer özetler için, function
hesaplamasındaki argümanı değiştirin counts
. (Alternatif olarak, ilk çıktı dosyasını hücre tanımlayıcıyla özetlemek için elektronik tablo veya veritabanı yazılımı kullanın.)
Kontrol olarak, harita sembollerini bulmak için ızgara merkezlerini kullanarak sayıları eşleyelim. (Akdeniz, Avrupa ve Atlantik Okyanusu'nda bulunan noktaların şüpheli konumları vardır: Birçoğunun veri giriş sürecinde enlem ve boylamı karıştırmasından kaynaklandığını düşünüyorum.)
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")
Bu iş akışı şimdi
Kapsamlı bir şekilde belgelenmiş ( R
kodun kendisi aracılığıyla),
Tekrarlanabilir (bu kodu yeniden çalıştırarak),
Genişletilebilir (kodu bariz şekilde değiştirerek) ve
Oldukça hızlı (bu 53052 gözlemi işlemek için tüm işlem 10 saniyeden az sürer).