আর্ড ব্যবহার করে গ্রিডে পয়েন্ট একত্রিত করা


14

আর-তে স্থানিক একীকরণের বিষয়ে আমার একটি প্রশ্ন রয়েছে What আমি যা করার চেষ্টা করছি তা হল গ্রিডে পয়েন্ট ডেটাসেট একত্রিত করা। এই ধরণের জিনিস নিয়ে আমার সামান্য অভিজ্ঞতা আছে বলে আমি কীভাবে এটি করব তা নিশ্চিত নই। আমি আশা করছিলাম আপনার কারও কারও কাছে কিছু কার্যকর গাইডেন্স / সম্ভাব্য সমাধান থাকতে পারে।

আমার ভ্যানটেজ পয়েন্ট হ'ল একটি ডেটাসেট যা আফ্রিকার সংঘাতের ইভেন্টগুলিতে জিওরফারেন্সযুক্ত ডেটা রয়েছে (দেখুন www.acleddata.com)। পয়েন্টগুলি অক্ষাংশ / দ্রাঘিমাংশ স্থানাঙ্কগুলির সাথে জিওরফারেন্স করা হয় এবং ইভেন্টের ধরণ এবং সময় সম্পর্কিত ডেটা থাকে। আমি যা করতে চাই তা হল এই পয়েন্টগুলিকে 1x1 ডিগ্রি গ্রিডে একত্রিত করা।

যদি গ্রিড-কোষের মধ্যে কোনও ঘটনা ঘটে থাকে তবে গ্রিড-কোষে ডেটা পয়েন্টগুলির তথ্য থাকা উচিত। এর চূড়ান্ত পণ্যটি একটি ডেটা ফ্রেম বা এমন কিছু হওয়া উচিত যা আমি কোনও সিএসভি-ফাইলে রফতানি করতে পারি কারণ ডেটা পরিসংখ্যানগত বিশ্লেষণের জন্য প্যানেল ডেটা-সেটে ব্যবহার করার উদ্দেশ্যে।

এখন পর্যন্ত আমি নীচের কোডটি ব্যবহার করে ডেটা এবং শেফফিলটি লোড এবং প্লট করেছি। আমি বিশ্বাস করি যে এসপি প্যাকেজটি থেকে আমার সামগ্রিকভাবে ওভার ফাংশনটি ব্যবহার করা উচিত তবে কীভাবে তা আমি জানি না। আশা করি আপনারা কেউ সাহায্য করতে পারেন।

আমি এখন পর্যন্ত যে কোডটি ব্যবহার করেছি সেগুলি এখানে সম্পর্কিত ভিজ্যুয়াল ফলাফলের সাথে পাওয়া যাবে

কিউজিআইএসে এটি করার পরামর্শটিও স্বাগত।


এটি একটি দ্রুত সহজ অপারেশন যা সামান্য পাটিগণিত ব্যতীত আর কিছুই প্রয়োজন হয় না। তবে আপনি কোন বিন্যাসে আউটপুট চান? "সিএসভি" কেবলমাত্র এটি একটি সম্পর্কিত টেবিল হওয়া উচিত বলে পরামর্শ দেয়, তবে এটি একটি সমস্যা উপস্থাপন করে: যখন আপনি একত্রিত হন, প্রতিটি ঘরটি সম্ভাব্যভাবে বিভিন্ন পয়েন্টের সাথে সামঞ্জস্য করে correspond সাধারণত আপনি দুটি বিকল্পের মধ্যে একটি নির্বাচন করেন: আপনি হয় প্রতি বিন্দুতে একটি রেকর্ড আউটপুট করেন (এর সমন্বিত সেলটির আইডি সহ) বা আপনি প্রতি সেল প্রতি এক রেকর্ড আউটপুট করেন এবং এতে থাকা পয়েন্টগুলির কয়েকটি পরিসংখ্যানের সংক্ষিপ্তসার অন্তর্ভুক্ত করেন। আপনার কোনটি দরকার?
হোবার

1
দুঃখিত আমি এটি নির্দিষ্ট করিনি। আমার যা দরকার তা হ'ল প্রতি সেলে একটি রেকর্ড । আমি সেল-ইয়ার ফর্ম্যাটে প্যানেল ডেটা তৈরি করতে csv-file ব্যবহার করি ।
ঘোড়াঘটিয়ার

উত্তর:


13

ডাউনলোড করা ডেটাতে কিছু স্পষ্ট লোকাল ত্রুটি থাকে, তাই প্রথমে করণীয়গুলিকে যুক্তিসঙ্গত মানগুলিতে সীমাবদ্ধ করা:

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নীচের কোডে দেখানো হয়েছে back সেগুলি ইনপুট ডেটাফ্রেমে সংযুক্ত করা, এবং একটি সিএসভি ফাইল হিসাবে আউটমেটেড ডেটাফ্রেম লিখুন। প্রতি পয়েন্টে একটি রেকর্ড থাকবে:

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। (বিকল্পভাবে, সেল সনাক্তকারী দ্বারা প্রথম আউটপুট ফাইলের সংক্ষিপ্তসার জন্য স্প্রেডশিট বা ডাটাবেস সফ্টওয়্যার ব্যবহার করুন))

একটি চেক হিসাবে, আসুন গ্রিড কেন্দ্রগুলি ব্যবহার করে মানচিত্রের প্রতীকগুলি সনাক্ত করতে গণনাগুলি ম্যাপ করুন। (ভূমধ্যসাগর, ইউরোপ এবং আটলান্টিক মহাসাগরে অবস্থিত পয়েন্টগুলির সন্দেহজনক অবস্থান রয়েছে: আমি সন্দেহ করি যে এগুলির মধ্যে অনেকগুলি ডাটা এন্ট্রি প্রক্রিয়ায় অক্ষাংশ এবং দ্রাঘিমাংশকে মিশ্রিত করে result

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 সেকেন্ডেরও কম সময় নেয়)।


কোড পুরোপুরি প্রজননযোগ্য। যদিও আমার একটি অতিরিক্ত প্রশ্ন আছে। একটি সারসংক্ষেপ পরিবর্তে আমি ইনপুট ডেটা ফাইলের তথ্য সংযুক্ত না সেল নির্মিত গ্রিড?
ঘোড়াফিয়ার ইয়ার

1
আউটপুট টেবিলের সাহায্যে এটি করা সম্ভব নয় কারণ কোষগুলির জন্য সম্পূর্ণ তথ্যের পরিবর্তনশীল দৈর্ঘ্য রয়েছে। রেকর্ড করার সঠিক উপায়টি আমি প্রদর্শিত প্রথম আউটপুটটির সাথে: একটি সেল সনাক্তকারী বৈশিষ্ট্য সহ প্রতি বিন্দুতে একটি রেকর্ড। এই দুটি ফর্ম্যাটগুলির মধ্যে একটি - প্রতি-পয়েন্ট এবং প্রতি সেল টেবিলগুলি - আপনি যে পরিসংখ্যানগত প্রোগ্রাম ব্যবহার করছেন তা দ্বারা প্রত্যাশিত হবে।
whuber

1
আহ, ঠিক আছে. আমি বুঝছি তুমি কি বলতে চাও. সমস্ত কক্ষের জন্য কেবল একটি গ্রিড তৈরি করতে হবে এবং এটি মার্জ করতে হবে। সাহায্যের জন্য ধন্যবাদ.
ঘোড়াফিয়ারে

3

ঠিক আছে, আপনি যা চান তা "স্পেশিয়াল জয়েন" নামে পরিচিত একটি মৌলিক, যা একে অপরের সাথে দুটি শেফফিলের সাথে মেলে এবং ফলাফলটি গুণমান-সারণীতে যোগফল (গণনা সংখ্যা) বরাদ্দ করে। যদি আপনি "স্পেশিয়াল জয়েন ইন আর" অনুসন্ধান করেন তবে আপনি জিআইএস.স্ট্যাকেক্সচেঞ্জে এখানেও অসংখ্য উদাহরণ পাবেন। আমি দ্রুত googled এবং উদাহরণস্বরূপ এই কোডটি একটি মেলিং তালিকায় পোস্ট করা খুঁজে পেয়েছি ।

আপনি যদি কিউজিআইএস-এ একটি স্থানিক বৈশিষ্ট্য যোগ করতে চান তবে নিম্নলিখিতগুলি করুন:

  • আপনার আকারগুলি .shp ফাইল হিসাবে সংরক্ষণ করুন ( rgdal প্যাকেজ থেকে কমান্ড WritOGR )
  • এগুলি কিউজিআইএস-এ লোড করুন। যথাযথ স্কেলিং সহ এমএমকিউজিআইএস প্লাগইন (তৈরি -> গ্রিড স্তর তৈরি করুন) এর মাধ্যমে আপনার ভেক্টর গ্রিডটি পুনরুদ্ধার করুন।
  • ভেক্টর -> ডেটা ম্যানেজমেন্ট মেনু থেকে "যোগদানের বৈশিষ্ট্যগুলি" সরঞ্জামটি ব্যবহার করুন। আপনার পয়েন্ট স্তরটির একটি বৈশিষ্ট্য নির্বাচন করুন (এটি ভিন্ন বিরোধের ইভেন্টের জন্য সত্য (1) বা মিথ্যা (0) মান উপস্থাপনকারী একটি সাধারণ কলাম হতে পারে)।
  • আপনার গ্রিড নির্বাচন করুন এবং সমস্ত উপস্থিতিগুলি যোগ করুন এবং সম্পাদন করুন। এর পরে আমি আপনার গ্রিডটি আফ্রিকান মহাদেশের আকারের সাথেও ক্লিপ করব।

যদি যোগদানটি কোনওভাবে ব্যর্থ হয় (আমার জন্য প্রতিটি সময় কাজ করে না), তবে এক্সট্যান্টে আটকে থাকুন এবং সাগা টুলবক্সটি সন্ধান করুন, এতে খুব ভাল যোগদানের কাজ রয়েছে।


যদিও এটি একটি সমাধান, এটি একটি বিশেষত জটিল এবং অদক্ষ একটি যা গ্রিডের জন্য পয়েন্টগুলি সংক্ষিপ্ত করে সংক্ষিপ্ত করা কয়েকটি কয়েকটি সাধারণ গাণিতিক ক্রিয়াকলাপ, যা Rছাড়িয়ে গেছে। rgdalশেফফাইলস, কিউজিআইএস এবং সিক্সেন্টেটি ব্যবহার করার পরামর্শ দেওয়ার মতো এটি হ'ল কেউ কেউ দুটি বোর্ড একসাথে পেরেক করার জন্য একটি আধুনিক স্বয়ংক্রিয় শিল্প কারখানার ভাড়া নেওয়ার জন্য :-)।
হোবার

আমি এই সপ্তাহান্তে এই পদ্ধতির চেষ্টা করব। অদূর ভবিষ্যতে আমি একে অপরের সাথে বিভিন্ন আকার-ফাইলগুলি সংযুক্ত করতে চাই যাতে এটি কার্যকর হতে পারে। ইনপুট এবং পরামর্শের জন্য ধন্যবাদ।
ঘোড়াঘটিয়ার

@ শুভ: সত্য, তবে আপনি যদি বিতরণ করতে এবং আপনার আউটপুটটি স্টাইল করতে চান তবে একটি শেফফাইলই সুস্পষ্ট পছন্দ। তবুও, চমৎকার আর উদাহরণ!
কার্লিউ

আমি অবশেষে এটি চেষ্টা করেছিলাম। তবে এই পদ্ধতির সমস্যাটি হ'ল এটি বহু পর্যবেক্ষণের যোগফলকে যোগ করে। যদিও আমি আদর্শভাবে সময়ের সাথে বিভিন্ন ইভেন্টের তথ্য রাখতে চাই। তবে এটি হতে পারে যে আমি কিছু ভুল করেছি।
ঘোড়াঘটিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.