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/验证答案!!