从时间序列

时间:2015-12-01 02:19:56

标签: python numpy pandas matplotlib gis

我有一组相对较大(约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:11它们应该是点之间的1/40(所以插值如下所述:Pandas data frame: resample with linear interpolation

我认为基本过程是:

  • 遍历每个id:
    • 获取该ID的过滤器数据
    • 在时间之前获取最后一个位置(例如,在8:31:11之前的最后记录位置,或者使用的时间)
    • 获取第一个位置(例如,在8:31:11之后的第一个记录位置,或者使用的任何时间)
    • 插入以确定它们在第二个
    • 的位置
    • 将位置添加到列表
  • 每个身份证位置的情节清单

我知道我可以用

遍历每个id
for name, group in df.groupby('id'):

并且策划不是问题,但我不确定其余部分。

经过一些搜索后,我找不到任何好方法来为每个组中的单个值做到这一点。其他答案建议使用重新采样和插值函数,但这对于我拥有的数据大小会花费太长时间,并且会进行大量不必要的计算,因为我只需要一个点。

1 个答案:

答案 0 :(得分: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)

这看起来合理吗?