【问题标题】:App users logged geolocation - which location is most important?应用程序用户记录地理位置 - 哪个位置最重要?
【发布时间】:2019-02-26 13:22:00
【问题描述】:

我正在使用一个记录所有用户地理位置的应用程序。现在很重要的是,我从每个用户中选择特定时间段内最重要的地理位置。例如;对于某个用户,我有上个月的以下位置。

    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 米的半径。我计算了这个特定用户的其他地理位置有多少在这个范围内。在其半径范围内具有最多其他地理位置的地理位置被视为该特定用户最重要的地理位置。

我的问题
我是解决这类问题的新手,我不知道我的解决方案是否是最好的选择,或者是否有更好的解决方案来解决此类问题。非常感谢你们对此问题的任何反馈!

【问题讨论】:

  • 这可能不是问的正确地方,但您可以在这里找到一些提示,例如:datascience.stackexchange.com/questions/761/…。我个人对快速解决方案的看法:转换您的数据,以便您可以忽略haversine并使用具有欧几里得距离的kmeans。
  • It is important to select only one coordinate of this list that summarizes where the user most likely will open the app 时间戳在这里会很有帮助。即一个人可能在上午 8 点出现的位置与下午 3 点不同

标签: python pandas geolocation folium


【解决方案1】:

解决方案的开始,您必须安装 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)

希望能帮到我,对我糟糕的英语感到抱歉

【讨论】:

  • 如果这个答案对你有帮助,请不要忘记 uvpvote/validate the answer!!
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多