假设我有时间序列数据(时间在x轴上,坐标在y-z平面上)。
给定一组感染用户的种子集,我想获取所有在时间内与种子集中的点距离
有没有聪明的方法来实现这一点?
天真的方法大致如下:
我应该如何更聪明地处理这个问题——最好将所有数据保留在RAM中(虽然我不确定是否可行)。Pandas是一个好的选择吗?我也考虑过Bandicoot,但它似乎不能为我完成这个任务。
如果我的问题太广泛,请告诉我如何改进。 编辑: 我认为我上面提出的算法有缺陷。
这样是否更好:
给定一组感染用户的种子集,我想获取所有在时间内与种子集中的点距离
d
以内的用户。这基本上就是接触追踪。有没有聪明的方法来实现这一点?
天真的方法大致如下:
points_at_end_of_iteration = []
for p in seed_set:
other_ps = find_points_t_time_away(t)
points_at_end_of_iteration += find_points_d_distance_away_from_set(other_ps)
我应该如何更聪明地处理这个问题——最好将所有数据保留在RAM中(虽然我不确定是否可行)。Pandas是一个好的选择吗?我也考虑过Bandicoot,但它似乎不能为我完成这个任务。
如果我的问题太广泛,请告诉我如何改进。 编辑: 我认为我上面提出的算法有缺陷。
这样是否更好:
for user,time,pos in infected_set:
info = get_next_info(user, time) # info will be a tuple: (t, pos)
intersecting_users = find_intersecting_users(user, time, delta_t, pos, delta_pos) # intersect if close enough to the user's pos/time
infected_set.add(intersecting_users)
update_infected_set(user, info) # change last_time and last_pos (described below)
infected_set
我认为应该实际上是一个哈希表 {user_id: {last_time: ..., last_pos: ...}, user_id2: ...}
一个潜在的问题是用户被独立处理,因此对于用户2来说,下一个时间戳可能是几个小时或几天之后。
如果我进行插值,使每个用户都有每个时间点的信息(比如每小时一次),那么接触追踪可能会更容易,尽管这将大大增加数据量。
数据格式/示例
user_id = 123
timestamp = 2015-05-01 05:22:25
position = 12.111,-12.111 # lat,long
有一个包含所有记录的csv文件:
uid1,timestamp1,position1
uid1,timestamp2,position2
uid2,timestamp3,position3
还有一个文件目录(相同格式),每个文件对应一个用户。
records/uid1.csv
records/uid2.csv
pytables
! - matjazzz144