2014-06-19 57 views
0

我有一些數據,我必須在我的應用程序中關閉,而且我不知道如何以合理可理解的方式進行操作。如何「擴展」python時間序列號

我們有一系列未確定的數據,它們有不同的間隔。間隔時間可以是小時,每天,每週...例如:

hourly_data = { 
    'interval': '1h', 
    'data': [('05/10/2014 00:00', 10), 
      ('05/10/2014 01:00', 11), 
      ('05/10/2014 03:00', 6), 
      ('05/10/2014 04:00', 8), 
      ... 
      ] 
} 

daily_data = { 
    'interval': '1d', 
    'data': [('05/10/2014 00:00', 87), 
      ('05/11/2014 00:00', 73), 
      ('05/12/2014 00:00', 86), 
      ('05/13/2014 00:00', 99), 
      ... 
      ] 
} 

我需要比較這些數據。假設數據是工廠的生產數據,我需要計算每小時完成的每日生產的百分比。我需要遍歷hourly_data列表,並將該值與daily_data中的對應值進行比較。

複雜的部分出現在我們不知道我們必須與這個系統「比較」多少個系列時(在這個例子中只有兩個,但可以多一些),也不知道這個系列中的每個系列會有多少間隔。我所知道的是,我必須按照我描述的系統循環播放這個系列文章。

我想到的所有可能的解決方案都很愚蠢,絕對難以閱讀。你將如何面對這個算法?

編輯

回答到@ user3727843,時間間隔的選擇是相當窄:每小時,每天,每週和每月。就這樣。我想從數據中「學習」的內容完全是任意的。我已經解釋了百分比例子,因爲它很容易理解,但我想建立任何類型的關係。

我認爲解決這個問題的最通用的方法是「擴大」數據以匹配最小的間隔。類似這樣的:

expanded_data = [ 
    [('05/10/2014 00:00', 10), ('05/10/2014 00:00', 87)], 
    [('05/10/2014 01:00', 11), ('05/10/2014 00:00', 87)], 
    .... 
    [('05/11/2014 16:00', 7), ('05/11/2014 00:00', 93)], 
    [('05/11/2014 17:00', 11), ('05/11/2014 00:00', 93)], 
    .... 
] 

回答

1

我認爲無論你如何做,它都會變得有點混亂。很高興知道可能的全系列數據(如年度數據或分鐘數據)。從那裏你應該確定你在比較什麼單位。使用你的例子可以說,你的基數比較將是相對於整個一天每小時產生的百分比。你可以決定你的基本單位是每小時/每天。然後,你在不同的單位獲得的任何東西,你可以轉換爲幾小時和幾天。

你的問題的問題是我們需要知道你想從數據中「學習」什麼。這僅僅是上面提到的示例百分比嗎?或者它是更多的類似的項目。當你說「比較多個系列」時,你的意思是創建一個差異表?我們需要更多有關您的問題的信息才能真正幫助您,但希望這可以爲您提供一個開始。

編輯:

擴大到時間序列的最小單位是一個良好的開端。至於建立關係,你只需要有很多if語句。你可以做的是開發一些基本的數學函數來比較你的系列。這些措施可能包括相關的數據的百分比在兩個系列,差異等,您還可以使用組比較數據或得到區別:

a = set(seriesA) 
b= set(seriesB) 
a.difference(b) #ref: https://docs.python.org/2/library/sets.html 

一旦你開發了一些這些功能可以簡化其餘你的比較代碼只需調用你想要的操作來構建你的比較。

+0

我編輯了這個問題來回答你的建議。 –

+0

編輯我的回覆 – user3727843

+0

比較的數學不是問題。其實它已經寫好了。問題是如何以合理清晰的方式編寫數據列表擴展 –