Python 应用程序用户登录地理位置-哪个位置最重要?
我正在使用一个记录所有用户地理位置的应用程序。现在重要的是,我从每个用户那里选择一段时间内最重要的地理位置。例如对于某个用户,我有上个月的以下位置Python 应用程序用户登录地理位置-哪个位置最重要?,python,pandas,geolocation,folium,Python,Pandas,Geolocation,Folium,我正在使用一个记录所有用户地理位置的应用程序。现在重要的是,我从每个用户那里选择一段时间内最重要的地理位置。例如对于某个用户,我有上个月的以下位置 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.3981
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米的半径。我计算此特定用户的其他地理位置有多少位于此RADIU中。与半径内大多数其他地理位置一起的地理位置被视为该特定用户最重要的地理位置 我向你们提出的问题
我对解决这类问题还不熟悉,我不知道我的解决方案是最好的,还是有更好的解决方案来解决这类问题。非常感谢你们对这个问题的任何反馈 作为一种解决方案,您必须安装geopy以简化距离计算:我假设id是一个位置id,我计算所有位置id之间的所有距离(km)
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)
希望这能对我糟糕的英语有所帮助并表示歉意缺少解决方案,您必须安装geopy以简化距离计算:我假设id是一个位置id,我计算所有位置id之间的所有距离(km)
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)
希望这能对我糟糕的英语有所帮助并表示歉意这可能不是一个合适的地方,但你可以在这里找到一些提示,例如:。我个人对快速解决方案的看法是:转换数据,以便可以忽略haversine,并使用带欧几里德距离的kmeans。
在此列表中只选择一个坐标非常重要,该坐标总结了用户最有可能打开应用程序的位置。
时间戳在此处会有所帮助。例如,一个人可能在上午8点到达的地方与下午3点到达的地方不同。这可能不是询问的正确地点,但您可以在此处找到一些提示,例如:。我个人对快速解决方案的看法是:转换数据,以便可以忽略haversine,并使用带欧几里德距离的kmeans。在此列表中只选择一个坐标非常重要,该坐标总结了用户最有可能打开应用程序的位置。
时间戳在此处会有所帮助。如果这个答案对你有帮助,请不要忘记UVP注释/验证答案!!如果这个答案对你有帮助,请不要忘记uvpvote/验证答案!!