使用用户输入的位置按位置推荐餐厅的最佳方式 - 使用 python
The best way of recommending restaurants by location using user inputted locations - using python
我正在为一个项目创建一个程序,可以推荐城市中的景点。
如果我的数据库中有很多餐馆的位置,并且我让用户输入他们的位置,那么向他们推荐不营业的餐馆的最佳方式是什么。我不会仅根据位置进行推荐,但我只是不知道执行此操作的最佳方法。我愿意学习只是不知从何下手!
让用户输入他们的位置(例如 post 代码)就足够了 - 我不知道我是否有足够的技术技能来使用 gps,我对 API 等没问题
这里有几个问题。
首先,您需要使用一致的co-ordinate系统来存储餐厅位置,EPSG:3857在这种情况下是最简单的,因为单位是米而不是度。这个系统仍然会扭曲长度,但餐厅离人很近,所以这在这里很好。 PyProj
Python 库是转换 co-ordinate 位置的标准,使用 pyproj.Transformer
.
使用 web-API 获取此人的位置。为此,您可以使用 Geopy Python 库来 look-up 一个地址,并在测试和演示中使用 Nominatim 解决这些问题;如果你想要频繁 look-ups.
,你需要转向付费服务而不是 Nominatim
然后,使用一种算法进行“最近邻查找”,而不是仅仅循环访问站点并使用您从几何中知道的距离公式。为此,有许多算法可供选择; sklearn
Python 图书馆 can do this.
使用欧氏距离公式:
在哪里
只是在python中编码为
x**0.5
if you want to read about the performance of x**0.5 vs math.sqrt(x) read this
哪里
只是在python中编码为
x**2
然后,
您可以使用这个非常基本的指导性 python 代码:
#location in tuple (x,y)
user_location = (8,9)
#This is dictionary with:
#keys being names of Restaurants
#values being tuples with the position (x,y)
locations={"MacDonald's": (-4,-8),
"TGI Fridays": (1,1),
"Bembos": (2,3),
"Burger King": (5,6),
"El Limeño": (7,8),
"Astrid y Gastón":(-1,10),
"Central": (1,9),
"Johnny Rockets": (6,1)
}
#Extract x,y value from tuple user_location
user_x,user_y = user_location
dist_min=float('inf')
for key in locations:
x,y=locations[key]
#Euclidean's Distance Expression presented earlier
dist=((x-user_x)**2+(y-user_y)**2)**0.5
print(f"Location:({x},{y}) Name:{key} / Distance:{dist:4.3f}" )
if dist<dist_min:
dist_min = dist
best_key = key
print("\n")
print(f"The selected location is {best_key} since it has th smallest distance to the user:{dist_min:4.3f}")
复制并粘贴此代码,它很简单。
希望对您有所帮助。
我正在为一个项目创建一个程序,可以推荐城市中的景点。
如果我的数据库中有很多餐馆的位置,并且我让用户输入他们的位置,那么向他们推荐不营业的餐馆的最佳方式是什么。我不会仅根据位置进行推荐,但我只是不知道执行此操作的最佳方法。我愿意学习只是不知从何下手!
让用户输入他们的位置(例如 post 代码)就足够了 - 我不知道我是否有足够的技术技能来使用 gps,我对 API 等没问题
这里有几个问题。
首先,您需要使用一致的co-ordinate系统来存储餐厅位置,EPSG:3857在这种情况下是最简单的,因为单位是米而不是度。这个系统仍然会扭曲长度,但餐厅离人很近,所以这在这里很好。
PyProj
Python 库是转换 co-ordinate 位置的标准,使用pyproj.Transformer
.使用 web-API 获取此人的位置。为此,您可以使用 Geopy Python 库来 look-up 一个地址,并在测试和演示中使用 Nominatim 解决这些问题;如果你想要频繁 look-ups.
,你需要转向付费服务而不是 Nominatim然后,使用一种算法进行“最近邻查找”,而不是仅仅循环访问站点并使用您从几何中知道的距离公式。为此,有许多算法可供选择;
sklearn
Python 图书馆 can do this.
使用欧氏距离公式:
在哪里
只是在python中编码为
x**0.5
if you want to read about the performance of x**0.5 vs math.sqrt(x) read this
哪里
只是在python中编码为
x**2
然后,
您可以使用这个非常基本的指导性 python 代码:
#location in tuple (x,y)
user_location = (8,9)
#This is dictionary with:
#keys being names of Restaurants
#values being tuples with the position (x,y)
locations={"MacDonald's": (-4,-8),
"TGI Fridays": (1,1),
"Bembos": (2,3),
"Burger King": (5,6),
"El Limeño": (7,8),
"Astrid y Gastón":(-1,10),
"Central": (1,9),
"Johnny Rockets": (6,1)
}
#Extract x,y value from tuple user_location
user_x,user_y = user_location
dist_min=float('inf')
for key in locations:
x,y=locations[key]
#Euclidean's Distance Expression presented earlier
dist=((x-user_x)**2+(y-user_y)**2)**0.5
print(f"Location:({x},{y}) Name:{key} / Distance:{dist:4.3f}" )
if dist<dist_min:
dist_min = dist
best_key = key
print("\n")
print(f"The selected location is {best_key} since it has th smallest distance to the user:{dist_min:4.3f}")
复制并粘贴此代码,它很简单。
希望对您有所帮助。