2015-02-20 7 views
6

से मूल्य के रूप में समय सीमा को साजिश कैसे करें मेरे पास समय श्रृंखला डेटा वाले कई डेटाफ्रेम हैं और उन डेटाफ्रेम के लिए समय सीमा के दौरान एक सरल विज़ुअलाइजेशन बनाना चाहते हैं। चूंकि मैं इसे कोड के साथ उत्पन्न करने में असमर्थ था क्योंकि मैंने अपने लक्ष्य को चित्रित करने के लिए एक स्केच शामिल किया है।पांडस या MatPlotLib

Time Range Illustration

यहाँ तीन DataFrames कि अनिवार्य रूप से सरल बनाया जाता है, DataFrames मैं के साथ काम कर रहा हूँ के छोटे संस्करण बनाने के लिए कुछ कोड है।

from pandas import DataFrame 
from numpy import datetime64, random 

# example data recorded by two different sensors 
example_data = random.rand(5,2) 
example_data2 = random.rand(9,2) 
example_data3 = random.rand(9,2) 

# timestamps from sensor1 
times = ['2000-01-01 09:00:00', 
     '2000-01-01 09:15:00', 
     '2000-01-01 09:30:00', 
     '2000-01-01 09:45:00', 
     '2000-01-01 10:00:00'] 

# timestamps from sensor2 
times2 = ['2000-01-01 08:45:00', 
     '2000-01-01 09:00:00', 
     '2000-01-01 09:15:00', 
     '2000-01-01 09:30:00', 
     '2000-01-01 09:45:00', 
     '2000-01-01 10:00:00', 
     '2000-01-01 10:15:00', 
     '2000-01-01 10:30:00', 
     '2000-01-01 10:45:00'] 

# timestamps from sensor2 
times3 = ['2000-01-01 09:20:00', 
     '2000-01-01 09:40:00', 
     '2000-01-01 10:00:00', 
     '2000-01-01 10:20:00', 
     '2000-01-01 10:40:00', 
     '2000-01-01 11:00:00', 
     '2000-01-01 11:20:00', 
     '2000-01-01 11:40:00', 
     '2000-01-01 12:00:00'] 


# create the DataFrame object for sensor1 with the times and data above 
sensor1 = DataFrame({'Time': times, 
        'measure1': example_data[:,0], 
        'measure2': example_data[:,1]}) 

# create the DataFrame object for sensor2 with the times and data above 
sensor2 = DataFrame({'Time': times2, 
        'measure1': example_data2[:,0], 
        'measure2': example_data2[:,1]}) 

# create the DataFrame object for sensor2 with the times and data above 
sensor3 = DataFrame({'Time': times3, 
        'measure1': example_data3[:,0], 
        'measure2': example_data3[:,1]}) 

# coerce the 'Time' column from string to a numpy datetime64 value 
sensor1['Time'] = sensor1['Time'].astype(datetime64) 
sensor2['Time'] = sensor2['Time'].astype(datetime64) 
sensor3['Time'] = sensor3['Time'].astype(datetime64) 

मैं DataFrames में से प्रत्येक से न्यूनतम और अधिकतम datetime मूल्य लेने और उन्हें एक नया DataFrame में डाल लेकिन जब मैं कोशिश करते हैं और उन्हें साजिश मैं साजिश करने के लिए कोई मान देखते हैं कि कोई त्रुटि मिलती है की कोशिश की है।

मैंने केवल 'टाइम' कॉलम लेने और 'मान' कॉलम को एक इंटीजर असाइन करने का प्रयास किया है (यानी सेंसर 1 को 'मान' कॉलम में इंटेल 1 प्रसारण मिलता है, सेंसर 2 इंट 2 प्रसारण होता है और इतने पर), फिर इन डेटाफ्रेम विलय।

लेकिन इसके परिणामस्वरूप 'मान' कॉलम और 'मान' कॉलम में नैन मानों में बहुत से डुप्लिकेट मान होते हैं।

मेरे पास यह काम करने के तरीके के बारे में विचारों से बाहर है।

संपादित करें: सही कोड ब्लॉक ;-)

उत्तर

4
import numpy 
import pandas 

# create an index containing all time stamps 
idx1 = pandas.Index(sensor1.Time) 
idx2 = pandas.Index(sensor2.Time) 
idx3 = pandas.Index(sensor3.Time) 
df = pandas.DataFrame(index=idx1.union(idx2).union(idx3)) 

# create a (constant) Series for each sensor 
df['Sensor1'] = df.index.to_series().apply(lambda x: 3 if x >= sensor1.Time.min() and x <= sensor1.Time.max() else numpy.NaN) 
df['Sensor2'] = df.index.to_series().apply(lambda x: 2 if x >= sensor2.Time.min() and x <= sensor2.Time.max() else numpy.NaN) 
df['Sensor3'] = df.index.to_series().apply(lambda x: 1 if x >= sensor3.Time.min() and x <= sensor3.Time.max() else numpy.NaN) 

# plot 
p = df.plot(ylim=[0, 4], legend=False) 
p.set_yticks([1., 2., 3.]) 
p.set_yticklabels(['Sensor3', 'Sensor2', 'Sensor1']) 

वैसे में एक डरपोक '2001' टाइमस्टैम्प, क्या आप वाकई अपने timestamps में वर्ष 2001 है कर रहे हैं? यह आपके सेंसर 1 प्लॉट को अदृश्य रूप से छोटा कर देगा। हाथ से तैयार साजिश के लिए

+0

बहुत बहुत धन्यवाद। और हाँ - आप काफी सही हैं - '2001' का आखिरी टाइमस्टैम्प एक टाइपो था, यह '2000' भी होना चाहिए था। –

0

+1। मैं अपने विज़ुअलाइज़ेशन कोड को लक्ष्य की पहचान करने के लिए हाथ से तैयार प्लॉट के साथ शुरू करना चाहता हूं, इसलिए मुझे स्वरूपण के साथ ट्रैक नहीं किया गया है या स्कैनरियो क्या होगा।