我有一個大的Twitter數據流,並且我有興趣分析每條推文中的hashtags的關係。例如,如果哈希標籤A和哈希標籤B出現在同一條推文中,我會將此推文連同推文的時間戳一起記錄爲「A-B」。用於存儲時間戳數據和在滾動窗口中計算的高效數據結構
這樣,樣品輸入是:
hashtags, Timestamp
A-B, created_time: 2016-04-07T01:33:19Z
B-C, created_time: 2016-04-07T03:53:19Z
C, created_time: 2016-04-08T03:31:19Z
C-A, created_time: 2016-04-08T04:33:19Z
A-D, created_time: 2016-04-07T07:33:19Z # (Note: an example of out of order)
B-D, created_time: 2016-04-09T09:33:19Z
注意,流數據可能不會被時間排序。
任務: 1)使用流數據構建哈希標籤(A,B,C,C ...)及其相互關係的圖形。 2)計算圖形中頂點的平均度數,並在每次出現新的流數據時(在一天的滑動窗口上)更新。
頂點的平均度定義爲:度=邊數/節點數。例如,如果當前圖形是A-B,那麼平均度數= 1(邊緣)/ 2(節點數量)。
樣本輸出:
Output
1/2,
2/3,
1/2,
1/2,
2/3,
1/2
什麼是最有效的Python數據結構來存儲以計算在一天的滾動窗口頂點的平均度這樣一個時間戳數據*
?我的直覺是使用字典來存儲和維護標籤作爲關鍵字,並將created_time
作爲值。所以爲了保持一天的窗口,我需要先排序字典,這需要很多時間。有沒有一種更有效的方式來根據時間自動存儲時間戳數據(無需排序)?
我發現使用Pandas DataFrame
和滾動功能來完成類似任務的帖子。但在我的情況下,我正在尋找一個最高效的數據結構來完成這項任務。
更新: 經過對我的問題的更多研究後,我發現這個問題與我的很好匹配。 Ideal data structure with fast lookup, fast update and easy comparison/sorting
的核心思想是利用[heapq][2]
一旦排序就會消耗這些數據?一個,兩個,多個流程?也許數據庫會是適當的。 –
如果你的所有數據都適用於內存,熊貓是非常有效的 - 但目前還不清楚爲什麼你需要'滾動窗口'功能。你能發佈想要的數據集嗎? – MaxU
@MaxU,複製和粘貼,排序後,我想計算在一天的時間窗口中的邊緣和節點的平均程度。邊和節點的平均度被定義爲度=總邊數/總節點。這就是我談到滾動窗口功能的原因。 – enaJ