2010-03-05 17 views
5

दिए गए डेटा सेट से एक केएमएल हीटमैप उत्पन्न करना मैं एक स्थिर केएमएल (Google धरती मार्कअप) फ़ाइल बनाने की तलाश में हूं जो कुछ दिए गए डेटा सेटों के एक हीटमैप-शैली प्रतिपादन को प्रदर्शित करता है [लेट, लोन, घनत्व] tuples।[लैट, लॉन, घनत्व]

मेरे पास एक बहुत ही सरल डेटा सेट जनसंख्या घनत्व के लिए है।

मेरे आवश्यकताएँ हैं:

  • अक्षां किसी दिए गए के लिए डेटा में खिलाने के लिए सक्षम होना चाहिए, देशांतर
  • कि अक्षां पर डेटा का घनत्व निर्दिष्ट करने के लिए सक्षम होना चाहिए, देशांतर
  • निर्यात चाहिए केएमएल

आवश्यकताएं इस परियोजना के लिए भाषा अज्ञेयवादी हैं क्योंकि मैं इन फ़ाइलों को ऑफ़लाइन बनाने के लिए ऑफ़लाइन बनाने के लिए ऑफ़लाइन बनाउंगा।

मैंने कुछ परियोजनाओं को देखा है, विशेष रूप से heatmap.py, जो कि केएमएल निर्यात के साथ पाइथन में gheat का बंदरगाह है। मैंने इस अर्थ में एक ईंट की दीवार को मारा है कि जिन परियोजनाओं को मैंने आज पाया है, वे एल्गोरिदम में खिलाए गए [लेट, लॉन] अंक की घनत्व से हीटमैप बनाने पर भरोसा करते हैं।

यदि मुझे अपने डेटा सेट को केवल [लैट, लॉन] टुपल्स में फ़ीड करने के लिए अनुकूलित करने का एक स्पष्ट तरीका याद आ रहा है, लेकिन मेरे पास घनत्व मानों का उपयोग करके मैं उन्हें कैसे खिला सकता हूं, तो मुझे यह जानना अच्छा लगेगा!

उत्तर

3

हे विल, heatmap.py मुझे है। आपका अनुरोध एक आम है - पर्याप्त है और पते की मेरी सूची में है। मुझे यकीन नहीं है कि एक सामान्य फैशन में ऐसा कैसे करना है; heatmap.py parlance में, यह वैश्विक बिंदु के बजाय प्रति-बिंदु dotsize होने के लिए सीधा होगा, लेकिन मुझे यकीन नहीं है कि वास्तविक आवश्यकता को संबोधित किया जाएगा। मैं ग्रीष्मकालीन 2010 की रिलीज के लिए लक्ष्य रख रहा हूं, लेकिन आप शायद इस मोड को स्वयं बना सकते हैं।

आप Kernel Density Estimator उपकरण खोजने की कोशिश कर सकते हैं; यही आंकड़े हीटमैप्स कहते हैं। R में कुछ अच्छे अंतर्निहित टूल्स हैं जिनका आप उपयोग कर सकते हैं जो आपकी आवश्यकता को और अधिक तेज़ी से पूरा कर सकते हैं।

शुभकामनाएं!

+0

शानदार, धन्यवाद जे.जे.! –

+0

मुझे पता चला है कि ज़ूम 0-9 में फर्श डॉटसाइज होना चाहिए, ज़ूम 15-19 में छत है, और बीच में स्केल है। मुझे 0-9 पर मिला है, केवल 1-पिक्सेल डॉट्स व्यवहार्य हैं और 15-19 पर, यह 64px से अधिक होने का अर्थ नहीं है। क्या आप इस श्रेणी को अपने केएमएल पद्धति में शामिल करने का एक तरीका देखते हैं? – nessence

1

मुझे लगता है कि ऐसा करने का एक तरीका है कि उस बिंदु पर घनत्व के अनुसार प्रत्येक बिंदु के साथ दो बिंदुओं के साथ tuples की एक (बड़ी) सूची बनाना है। एक उच्च घनत्व वाले बिंदु को एक-दूसरे के शीर्ष पर बहुत से बिंदुओं द्वारा दर्शाया जाता है जबकि कम घनत्व वाले बिंदु में कुछ बिंदु होते हैं। तो इसके बजाय: [(120.7, 82.5, 2), (130.6, 81.5, 1)] आप [(120.7, 82.5), (120.7, 82.5), (130.6, 81.5)] (एक काफी सुस्त डेटासेट) का उपयोग करेंगे।

एक संभावित मुद्दा यह है कि आपकी घनत्व अच्छी तरह से फ्लोट हो सकती है, पूर्णांक नहीं, इसलिए आपको डेटा को सामान्यीकृत और गोल करना चाहिए।

def dens2points (dens_tups): 
    min_dens = dens_tups[0][2] 
    for tup in dens_tups: 
     if (min_dens > tup[2]): 
      min_dens = tup[2] 
    print min_dens 

    result = [] 
    for tup in dens_tups: 
     for i in range(int(tup[2]/min_dens)): 
      result.append((tup[0],tup[1])) 
    return result 

if __name__ == "__main__": 
    input = [(10, 10, 20.0),(5, 5, 10.0),(10,10,0.9)] 
    output = dens2points(input) 
    print input 
    print output 

(जो बहुत pythonic नहीं है, लेकिन साधारण परीक्षण मामले के लिए काम करने के लिए लगता है): एक तरह से रूपांतरण करने के लिए कुछ इस तरह है। इस सबराउटिन को आपके डेटा को ऐसे रूप में परिवर्तित करना चाहिए जो heatmap.py द्वारा स्वीकार किया जाता है। थोड़ा प्रयास के साथ मुझे लगता है कि सबराउटिन को दो पंक्तियों में घटाया जा सकता है।

1

मैंने heatmap.py स्क्रिप्ट को अपडेट किया ताकि आप प्रत्येक बिंदु के लिए घनत्व निर्दिष्ट कर सकें। मैं uploaded my changes to my blog। यकीन नहीं है कि यह वही करेगा जो आप चाहते हैं हालांकि!

चीयर्स, एलेक्स

+0

शानदार - धन्यवाद एलेक्स! मैं इसे देख लूँगा। –

संबंधित मुद्दे