डाउनलोड किए गए डेटा में कुछ फ्रेंक लोकल त्रुटियां हैं, इसलिए पहली बात यह है कि निर्देशांक को उचित मानों तक सीमित करें:
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))
ग्रिड सेल निर्देशांक और पहचानकर्ता की गणना करना अक्षांश और देशांतर मानों से दशमलव को कम करने का एक मामला है। (आम तौर पर, मनमाने ढंग से चींटियों के लिए, पहले केंद्र और उन्हें स्केल करने के लिए यूनिट सेल में स्केल करते हैं, दशमलव को काटते हैं, और फिर पुनर्विक्रय करते हैं और पुन: अपने मूल स्थान पर वापस भेज देते हैं, जैसा कि ji
नीचे दिए गए कोड में दिखाया गया है ।) हम इन निर्देशकों को अद्वितीय पहचानकर्ताओं में जोड़ सकते हैं। उन्हें इनपुट डेटाफ्रेम में संलग्न करना, और संवर्धित डेटाफ़्रेम को सीएसवी फ़ाइल के रूप में लिखना। प्रति बिंदु एक रिकॉर्ड होगा:
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)
आप इसके बजाय आउटपुट चाहते हो सकते हैं जो प्रत्येक ग्रिड सेल के भीतर घटनाओं को सारांशित करता है। इसे स्पष्ट करने के लिए, आइए प्रति सेल में गणना करें और उन पर आउटपुट करें, प्रति सेल एक रिकॉर्ड:
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")
अन्य सारांश के लिए, function
तर्क की गणना में परिवर्तन करें counts
। (वैकल्पिक रूप से, सेल पहचानकर्ता द्वारा पहली आउटपुट फ़ाइल को सारांशित करने के लिए स्प्रेडशीट या डेटाबेस सॉफ़्टवेयर का उपयोग करें।)
चेक के रूप में, आइए नक्शे के प्रतीकों का पता लगाने के लिए ग्रिड केंद्रों का उपयोग करते हुए गणना करते हैं । (भूमध्य सागर, यूरोप और अटलांटिक महासागर में स्थित बिंदुओं में संदिग्ध स्थान हैं: मुझे संदेह है कि उनमें से कई डेटा प्रविष्टि प्रक्रिया में अक्षांश और देशांतर को मिलाने से परिणाम होते हैं।)
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")
यह वर्कफ़्लो अब है
पूरी तरह से प्रलेखित ( R
कोड के माध्यम से ही),
प्रतिक्रमण (इस कोड को फिर से करना),
एक्स्टेंसिबल (स्पष्ट तरीकों से कोड को संशोधित करके), और
उचित रूप से तेज़ (पूरे ऑपरेशन में इन 53052 टिप्पणियों को संसाधित करने में 10 सेकंड से कम समय लगता है)।