应用程序用户登录的地理位置-哪个位置最重要?

时间:2019-02-26 13:22:01

标签: 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.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库提供的地图上绘制了一个用户的地理位置

使用一名特定用户的地理位置进行地图: enter image description here

我目前解决此问题的最佳方法
对于每个地理位置,我在地理位置周围取x米的半径。我计算了此特定用户中有多少其他地理位置。在其半径内其他地理位置最多的地理位置被视为该特定用户最重要的地理位置。

我对你们的问题
我对解决这类问题是陌生的,我不知道我的解决方案是最佳选择还是有更好的解决方案来解决此类问题。大家对这个问题的任何反馈将不胜感激!

1 个答案:

答案 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)

希望对我的英语不好会有所帮助