2013-08-02 21 views
6

के साथ जीपीएस RINEX डेटा पढ़ना मैं कुछ समय आधारित उपग्रह आईडी फ़िल्टरिंग करने के लिए एक [RINEX-3.02] (पृष्ठ 60) निरीक्षण डेटा फ़ाइल पढ़ रहा हूं, और आखिरकार इसे बाद में पुनर्निर्मित कर दूंगा। यह उन उपग्रहों के चयन पर अधिक नियंत्रण देगा जो मैं आरटीके पोस्ट प्रोसेसिंग के साथ समय के साथ एक स्थिति समाधान में योगदान करने की अनुमति देता हूं।पांडस

इस भाग यद्यपि के लिए

विशेष रूप से, मैं सिर्फ उपयोग कर रहा हूँ:

  • [अजगर-3.3]
  • [पांडा]
  • [numpy]

यहाँ के साथ एक नमूना है पहले तीन बार मुद्रित अवलोकन।
नोट: मेरे लिए हेडर से डेटा पार्स करना आवश्यक नहीं है।

 3.02   OBSERVATION DATA M: Mixed   RINEX VERSION/TYPE 
CONVBIN 2.4.2       20130731 223656 UTC PGM/RUN BY/DATE 
log: /home/ruffin/Documents/Data/in/FlagStaff_center/FlagStaCOMMENT    
format: u-blox            COMMENT    
                  MARKER NAME   
                  MARKER NUMBER  
                  MARKER TYPE   
                  OBSERVER/AGENCY 
                  REC#/TYPE/VERS 
                  ANT #/TYPE   
    808673.9171 -4086658.5368 4115497.9775     APPROX POSITION XYZ 
     0.0000  0.0000  0.0000     ANTENNA: DELTA H/E/N 
G 4 C1C L1C D1C S1C          SYS/#/OBS TYPES 
R 4 C1C L1C D1C S1C          SYS/#/OBS TYPES 
S 4 C1C L1C D1C S1C          SYS/#/OBS TYPES 
    2013  7 28  0 27 28.8000000  GPS   TIME OF FIRST OBS 
    2013  7 28  0 43 43.4010000  GPS   TIME OF LAST OBS  
G               SYS/PHASE SHIFT 
R               SYS/PHASE SHIFT 
S               SYS/PHASE SHIFT 
    0               GLONASS SLOT/FRQ # 
C1C 0.000 C1P 0.000 C2C 0.000 C2P 0.000  GLONASS COD/PHS/BIS 
                  END OF HEADER  
> 2013 7 28 0 27 28.8000000 0 10      
G10 20230413.601  76808.847  -1340.996   44.000 
G 4 20838211.591  171263.904  -2966.336   41.000 
G12 21468211.719  105537.443  -1832.417   43.000 
S38 38213212.070  69599.2942  -1212.899   45.000 
G 5 22123924.655  -106102.481  1822.942   46.000 
G25 23134484.916  -38928.221   656.698   40.000 
G17 23229864.981  232399.788  -4048.368   41.000 
G13 23968536.158  6424.1143  -123.907   28.000 
G23 24779333.279  103307.5703  -1805.165   29.000 
S35 39723655.125  69125.5242  -1209.970   44.000 
> 2013 7 28 0 27 29.0000000 0 10      
G10 20230464.937  77077.031  -1341.254   44.000 
G 2 20684692.905  35114.399  -598.536   44.000 
G12 21468280.880  105903.885  -1832.592   43.000 
S38 38213258.255  69841.8772  -1212.593   45.000 
G 5 22123855.354  -106467.087  1823.084   46.000 
G25 23134460.075  -39059.618   657.331   40.000 
G17 23230018.654  233209.408  -4048.572   41.000 
G13 23968535.044  6449.0633  -123.060   28.000 
G23 24779402.809  103668.5933  -1804.973   29.000 
S35 39723700.845  69367.3942  -1208.954   44.000 
> 2013 7 28 0 27 29.2000000 0 9      
G10 20230515.955  77345.295  -1341.436   44.000 
G12 21468350.548  106270.372  -1832.637   43.000 
S38 38213304.199  70084.4922  -1212.840   45.000 
G 5 22123786.091  -106831.642  1822.784   46.000 
G25 23134435.278  -39190.987   657.344   40.000 
G17 23230172.406  234019.092  -4048.079   41.000 
G13 23968534.775  6473.9923  -125.373   28.000 
G23 24779471.004  104029.6643  -1805.983   29.000 
S35 39723747.025  69609.2902  -1209.259   44.000 

मैं एक कस्टम पार्सर करना है करते हैं, तो
अन्य मुश्किल बात उपग्रह आईडी आते हैं और समय के साथ जाना है

(उपग्रहों "जी 2" और "जी 4" के साथ दिखाया गया है) (साथ ही उनके पास आईडी में रिक्त स्थान भी हैं)
इसलिए जब मैं उन्हें डेटाफ्रेम में पढ़ता हूं,
मुझे नए कॉलम लेबल (या मल्टीइंडेक्स के लिए पंक्ति लेबल) बनाने की आवश्यकता है जैसा कि मुझे लगता है।

मैं शुरू में सोच रहा था कि यह एक MultiIndex समस्या माना जा सकता है,
लेकिन मुझे नहीं इतना यकीन पांडा read_csv सब कुछ
Jump to Reading DataFrame objects with MultiIndex

कोई सुझाव कर सकता हूँ?

प्रासंगिक स्रोतों अगर रुचि:

+0

क्या आप डमी डेटा की कुछ पंक्तियां जोड़ सकते हैं, बिना अनुमान के लिए मुश्किल। :) –

+0

क्षमा करें, फ़ॉर्मेटिंग में कुछ त्रुटि हुई थी और प्रारूप को डीबग करने के लिए प्रकाशन रखना था। – ruffsl

उत्तर

3

यहाँ मैं क्या कर रहा

df = readObs(indir, filename) 
df.set_index(['%_GPST', 'satID']) 

ध्यान दें कि मैं सिर्फ यह निर्माण के बाद अंत में नई MultiIndex सेट समाप्त हो गया है। enter image description here

def readObs(dir, file): 
    df = pd.DataFrame() 
    #Grab header 
    header = '' 
    with open(dir + file) as handler: 
     for i, line in enumerate(handler): 
      header += line 
      if 'END OF HEADER' in line: 
       break 
    #Grab Data 
    with open(dir + file) as handler: 
     for i, line in enumerate(handler): 
      #Check for a Timestamp lable 
      if '> ' in line: 
       #Grab Timestamp 
       links = line.split() 
       index = datetime.strptime(' '.join(links[1:7]), '%Y %m %d %H %M %S.%f0') 
       #Identify number of satellites 
       satNum = int(links[8]) 
       #For every sat 
       for j in range(satNum): 
        #just save the data as a string for now 
        satData = handler.readline() 
        #Fix the names 
        satdId = satData.replace("G ", "G0").split()[0] 
        #Make a dummy dataframe 
        dff = pd.DataFrame([[index,satdId,satData]], columns=['%_GPST','satID','satData']) 
        #Tack it on the end 
        df = df.append(dff) 
    return df, header 

एक डमी डेटा फ्रेम का उपयोग सिर्फ हालांकि सबसे सुंदर प्रतीत नहीं होता।

+0

तो, क्या आपने अपना पाइथन जीएनएसएस प्रसंस्करण कार्यक्रम बनाने का प्रबंधन किया था? – multigoodverse

+0

मैंने आईपीथन नोटबुक के साथ बहुत सी पटकथा की है, वास्तव में एक कार्यक्रम नहीं कहता है। आप मेरी संगीत [यहां] (https://github.com/ruffsl/RTKLIB-Tools) पा सकते हैं, लेकिन मैंने इसे थोड़ी देर में छुआ नहीं है। मुझे लगता है कि आप पाइथन और जीआईएस में बहुत हैं, क्या पिछले साल में कोई वादा करने वाला पायथन जीएनएसएस उपकरण उगाया गया है या कोई भी योगदान दे सकता है, @ArditS।? मैं [आरटीकेएलबीबी] (https://github.com/tomojitakasu/RTKLIB/network) देखता हूं (हालांकि एक सी प्रोजेक्ट) काफी सक्रिय रहा है। – ruffsl

1

मैं, एक कस्टम पार्सर लिखने लाइन द्वारा फ़ाइल लाइन को पढ़ने के लिए सुझाव देते हैं।

"जी 5" के बीच की जगह कस्टम पार्सर लिखने का एक और संकेत है।
उस स्थिति में आप आसानी से अंतरिक्ष द्वारा तर्कों को विभाजित नहीं कर सकते हैं,
आपको एक ही समय में सभी 3 वर्ण पढ़ना होगा, और पहले चार को हटा देना होगा, और शेष दो ("5") को सैटेलाइट नंबर में परिवर्तित करना होगा।

+0

जैसा कि मैं फ़ाइल के माध्यम से लूप करता हूं, डेटाफ्रेम में नए कॉलम जोड़ने का तरीका क्या होगा क्योंकि मुझे एक नई उपग्रह आईडी मिलती है? मैं ना मूल्यों के साथ ठीक हूँ। – ruffsl

+0

मैं एसएटी द्वारा आरोही एक क्रमबद्ध सूची का उपयोग करूंगा, शायद एक पेड़ मैप (जावा में), कुंजी (शनि आईडी, मूल्य = एटीएस के बाकी) के साथ। हो सकता है कि प्रत्येक जीपीएस सैट सिस्टम के लिए (क्या वह पहला अक्षर "जी" और "एस") अपनी सूची या पेड़ है। – AlexWien