2015-12-01 36 views
1

予具有相對大的(〜300 MB)組地理定位數據,其中,所述格式是插值單值

Timestamp, id, type, x, y 

用下面的數據類型:

In[7]: df.dtypes 
Out[7]: 
Timestamp datetime64[ns] 
id     int64 
type     object 
X      int64 
Y      int64 
dtype: object 

每個ID對應於特定的用戶,並且每個人在一天中記錄數百個點。

我想創建一個圖表,顯示每個人在某個特定的時間。所以我需要每個ID 1點。但是,數據有點稀疏,並且不太可能存在與第二個數據點精確相關的數據點。我想通過在最接近的兩點之間進行插值來近似。

在數據點之間,我假設人們線性移動,所以如果我們知道8點31分10秒和8點31分50秒的位置,那麼在8點31分30秒,他們應該完全處於兩個位置,並在8時31分十一秒,他們應該是點(使內插如下所述:Pandas data frame: resample with linear interpolation)之間的方式1/40

我想的基本過程是:

  • 通過每個ID循環:
    • 獲得該ID的過濾器數據
    • 在時間之前得到最後的位置(例如,在8:31:11之前的最後記錄的位置,或者任何時間被使用)
    • 獲得第一個位置(例如在8:31:11之後的第一個記錄位置,或者任何時間被使用)
    • 插值到數字出它們在該第二
    • 添加位置,其中列出每個ID的位置
  • 情節名單

我知道我可以遍歷每個ID與

for name, group in df.groupby('id'): 

和繪圖不是問題,但我不確定其餘的。

經過一番搜索,我還沒有找到任何好辦法來做到這一點從每個組的單個值。其他答案建議使用resample和內插函數,但是對於我所擁有的數據量來說,這會花費太長時間,並且會看到很多不必要的計算,因爲我只需要一個點。

回答

1

這是不太清楚你想要什麼,但讓我們開始與一些

首先,你可能需要獨特的ID列表,對不對?

import pandas as pd 
import numpy as np 

df = ... 

unids = np.unique(df[['id']]) 

for id in unids: 
    df_id = # subset df by id, filtering out rows by id, and get back dataframe 
    # sort new df by Timestamp 
    tmin = new_df['Timestamp'][0] 
    tmax = new_df['Timestamp'][-1] 
    tstep = ... # time step 

    position = [] 
    for t in range(tmin, tmax, tstep): 
     # interpolate 
     # add to position 
    plot(position) 

這看起來合理嗎?

+0

我增加了更多的問題,希望能夠更好地解釋它。基本上,我想在某個特定時間(例如上午10點30分14秒)爲每個人點1分,但不太可能存在與那段時間完全一致的數據。所以我想我需要在10:30:14之前和10:30:14之後獲取數據並進行插值。儘管每個人的數據都是一整天。 – Jezzamon