我正在使用一个记录所有用户的地理位置的应用程序。现在很重要的一点是,我需要在特定时间段内从每个用户中选择最重要的地理位置。例如;对于某个用户,我上个月有以下位置。
long lat
2236 51.471899 5.471339
3432 51.461456 5.486195
3433 51.454544 5.487742
3434 51.471934 5.471232
3567 51.441648 5.464492
3568 51.398149 5.478717
3569 51.467318 5.470221
3570 51.467257 5.478014
3571 51.468200 5.477699
3572 51.443477 5.472390
仅在此列表中选择一个坐标来汇总用户最有可能打开应用程序的位置,这一点很重要。这将是我们必须集中资源的地方。
主要问题:如何确定每个用户在特定时间段内的地理位置最重要?
在这里,我在名为 folium
的Python库提供的地图上绘制了一个用户的地理位置 我目前解决此问题的最佳方法
对于每个地理位置,我在地理位置周围取x米的半径。我计算了此特定用户中有多少其他地理位置。在其半径内其他地理位置最多的地理位置被视为该特定用户最重要的地理位置。
我对你们的问题
我对解决这类问题是陌生的,我不知道我的解决方案是最佳选择还是有更好的解决方案来解决此类问题。大家对这个问题的任何反馈将不胜感激!
答案 0 :(得分:0)
解决方案的开始,您必须安装geopy来简化距离计算:我假设id是一个位置ID,并且计算所有位置id之间的所有距离(公里)
from geopy.distance import lonlat,distance
df= pd.DataFrame({'id': [2236, 3432, 3433, 3434, 3567, 3568, 3569, 3570, 3571, 3572],
'lon': [51.471899, 51.461456, 51.454544, 51.471934, 51.441648, 51.398149, 51.467318, 51.467257, 51.4682, 51.443477],
'lat': [5.471339, 5.486195, 5.487742, 5.471232, 5.464492, 5.478717, 5.470221, 5.478014, 5.477699, 5.47239]})
df_all = pd.merge(df.assign(key=0), df.assign(key=0),suffixes=('', '_loc') , on='key').drop('key', axis=1)
df_all['KM'] = df_all.apply(
(lambda row:distance(lonlat(row['lon'], row['lat']),lonlat(row['lon_loc'], row['lat_loc'])).km), axis=1)
print(df_all)
输出:
id lon lat id_loc lon_loc lat_loc KM
0 2236 51.471899 5.471339 2236 51.471899 5.471339 0.000000
1 2236 51.471899 5.471339 3432 51.461456 5.486195 2.009507
2 2236 51.471899 5.471339 3433 51.454544 5.487742 2.643655
3 2236 51.471899 5.471339 3434 51.471934 5.471232 0.012452
:
10 3432 51.461456 5.486195 2236 51.471899 5.471339 2.009507
11 3432 51.461456 5.486195 3432 51.461456 5.486195 0.000000
12 3432 51.461456 5.486195 3433 51.454544 5.487742 0.784811
:
70 3570 51.467257 5.478014 2236 51.471899 5.471339 0.899710
71 3570 51.467257 5.478014 3432 51.461456 5.486195 1.109818
:
98 3572 51.443477 5.472390 3571 51.468200 5.477699 2.801878
99 3572 51.443477 5.472390 3572 51.443477 5.472390 0.000000
(100 rows)
希望对我的英语不好会有所帮助