识别来自GPS点的旅行

时间:2019-06-17 17:49:34

标签: python pandas gps gis

我有一个包含纬度,经度和时间戳的GPS点的样本数据。

url = "https://raw.githubusercontent.com/csmontt/trajectory-sample/master/dayGPS.csv"
df = pd.read_csv(url)

为了确定有意义的位置(例如,家庭/工作位置),我运行了HDBSCAN算法,并为每个GPS点分配了一个群集。在此特定情况下,假设群集3对应于家庭位置,群集6对应于工作位置。我想做的是为每一行提供一个旅行ID,但仅适用于那些与上班或上班相关的旅行。我的最终结果应该像这样,通过删除带有NA的行,可以摆脱我不感兴趣的观察结果

df
Out[24]: 
     Unnamed: 0        lat   ...                datetime  cluster   trip_id
5          6527  52.497950   ...     2018-11-14 07:52:05        3      NA
6          6528  52.499457   ...     2018-11-14 08:01:34        3       1
7          6529  52.504406   ...     2018-11-14 08:04:57        2       1
8          6530  52.508824   ...     2018-11-14 08:14:33       -1       1
19         6541  52.526574   ...     2018-11-14 08:53:55        5       1
21         6543  52.528029   ...     2018-11-14 08:57:59        6       1
22         6544  52.527763   ...     2018-11-14 09:03:30        6      NA
78         6600  52.523626   ...     2018-11-14 20:07:18        6       2
79         6601  52.522004   ...     2018-11-14 20:09:49       -1       2
85         6607  52.518066   ...     2018-11-14 20:21:23        4       2
86         6608  52.504473   ...     2018-11-14 20:41:05        2       2
95         6617  52.500502   ...     2018-11-14 20:56:03        3       2
96         6618  52.498646   ...     2018-11-14 20:57:38        3      NA

相反,到目前为止,在完成此post之后,我为每个行点创建了一个唯一的行程ID,然后将与我感兴趣的行相对应的IDS进行了子集化

trips = pd.factorize(df['cluster'].isin([3,6]).iloc[::-1].cumsum().sort_index())[0]
df['trip_id'] = trips

此解决方案有两个问题。首先,我必须“手动”识别出感兴趣的旅程ID,第二,我错过了每次旅程的首次观察,因为旅程的第一点应该以不同的唯一ID结束。

# get only trips of interest
# Though I am missing first observation of each trip!! I need to select
# them separately. 
df = df[(df.trip_id == 6) | (df.trip_id == 7) | (df.trip_id == 55) | (df.trip_id == 56)]

df
Out[137]: 
 Unnamed: 0        lat         ...     cluster  trip_id
                               ...
  5          6527  52.497950   ...           3        5
  6          6528  52.499457   ...           3        6   # should be 7!
  7          6529  52.504406   ...           2        7
  8          6530  52.508824   ...          -1        7
                               ...
  20         6542  52.527379   ...           5        7
  21         6543  52.528029   ...           6        7   # this is fine
                               ...
  77         6599  52.524396   ...           6       54
  78         6600  52.523626   ...           6       55   # should be 56!
  79         6601  52.522004   ...          -1       56
  80         6602  52.520797   ...          -1       56
                               ...

任何指针将不胜感激。谢谢!

0 个答案:

没有答案