Skip to content

Commit c94f34f

Browse files
committed
feat: introduce geolocation examples
1 parent 74849e1 commit c94f34f

File tree

4 files changed

+328
-0
lines changed

4 files changed

+328
-0
lines changed

install.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
pip install -r requirements.txt
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
cab_26,43.602508,39.715685,14:47:44
2+
cab_112,43.582243,39.752077,14:47:55
3+
cab_26,43.607480,39.721521,14:49:11
4+
cab_112,43.579258,39.758944,14:49:51
5+
cab_112,43.574906,39.766325,14:51:53
6+
cab_26,43.612203,39.720491,14:52:48
Lines changed: 317 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,317 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 9,
6+
"id": "d22b455e-8d88-49cd-82e6-55838d526cbc",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"import geocoder\n",
11+
"\n",
12+
"geocode_res = geocoder.osm('1 Apple Park Way, Cupertino, California, United States')"
13+
]
14+
},
15+
{
16+
"cell_type": "code",
17+
"execution_count": 21,
18+
"id": "1caf59dc-c1f8-4bc7-b478-39edf657d9b8",
19+
"metadata": {},
20+
"outputs": [
21+
{
22+
"name": "stdout",
23+
"output_type": "stream",
24+
"text": [
25+
"[-122.010747, 37.3317424]\n"
26+
]
27+
}
28+
],
29+
"source": [
30+
"coordinates = geocode_res.geometry['coordinates']\n",
31+
"print(coordinates)"
32+
]
33+
},
34+
{
35+
"cell_type": "code",
36+
"execution_count": 42,
37+
"id": "ddedf165-a1cd-4fb8-9d42-175eb5a56dc5",
38+
"metadata": {},
39+
"outputs": [
40+
{
41+
"data": {
42+
"text/html": [
43+
"<div>\n",
44+
"<style scoped>\n",
45+
" .dataframe tbody tr th:only-of-type {\n",
46+
" vertical-align: middle;\n",
47+
" }\n",
48+
"\n",
49+
" .dataframe tbody tr th {\n",
50+
" vertical-align: top;\n",
51+
" }\n",
52+
"\n",
53+
" .dataframe thead th {\n",
54+
" text-align: right;\n",
55+
" }\n",
56+
"</style>\n",
57+
"<table border=\"1\" class=\"dataframe\">\n",
58+
" <thead>\n",
59+
" <tr style=\"text-align: right;\">\n",
60+
" <th></th>\n",
61+
" <th>cab</th>\n",
62+
" <th>lat</th>\n",
63+
" <th>long</th>\n",
64+
" <th>tm</th>\n",
65+
" </tr>\n",
66+
" </thead>\n",
67+
" <tbody>\n",
68+
" <tr>\n",
69+
" <th>0</th>\n",
70+
" <td>cab_26</td>\n",
71+
" <td>43.602508</td>\n",
72+
" <td>39.715685</td>\n",
73+
" <td>14:47:44</td>\n",
74+
" </tr>\n",
75+
" <tr>\n",
76+
" <th>1</th>\n",
77+
" <td>cab_112</td>\n",
78+
" <td>43.582243</td>\n",
79+
" <td>39.752077</td>\n",
80+
" <td>14:47:55</td>\n",
81+
" </tr>\n",
82+
" <tr>\n",
83+
" <th>2</th>\n",
84+
" <td>cab_26</td>\n",
85+
" <td>43.607480</td>\n",
86+
" <td>39.721521</td>\n",
87+
" <td>14:49:11</td>\n",
88+
" </tr>\n",
89+
" <tr>\n",
90+
" <th>3</th>\n",
91+
" <td>cab_112</td>\n",
92+
" <td>43.579258</td>\n",
93+
" <td>39.758944</td>\n",
94+
" <td>14:49:51</td>\n",
95+
" </tr>\n",
96+
" <tr>\n",
97+
" <th>4</th>\n",
98+
" <td>cab_112</td>\n",
99+
" <td>43.574906</td>\n",
100+
" <td>39.766325</td>\n",
101+
" <td>14:51:53</td>\n",
102+
" </tr>\n",
103+
" <tr>\n",
104+
" <th>5</th>\n",
105+
" <td>cab_26</td>\n",
106+
" <td>43.612203</td>\n",
107+
" <td>39.720491</td>\n",
108+
" <td>14:52:48</td>\n",
109+
" </tr>\n",
110+
" </tbody>\n",
111+
"</table>\n",
112+
"</div>"
113+
],
114+
"text/plain": [
115+
" cab lat long tm\n",
116+
"0 cab_26 43.602508 39.715685 14:47:44\n",
117+
"1 cab_112 43.582243 39.752077 14:47:55\n",
118+
"2 cab_26 43.607480 39.721521 14:49:11\n",
119+
"3 cab_112 43.579258 39.758944 14:49:51\n",
120+
"4 cab_112 43.574906 39.766325 14:51:53\n",
121+
"5 cab_26 43.612203 39.720491 14:52:48"
122+
]
123+
},
124+
"metadata": {},
125+
"output_type": "display_data"
126+
}
127+
],
128+
"source": [
129+
"import pandas as pd\n",
130+
"\n",
131+
"df = pd.read_csv(\"ex09_geolocation_moving_obj.csv\", names=['cab', 'lat', 'long', 'tm'])\n",
132+
"display(df)"
133+
]
134+
},
135+
{
136+
"cell_type": "code",
137+
"execution_count": 43,
138+
"id": "9f5412aa-d334-45a5-af1f-b430f161413f",
139+
"metadata": {},
140+
"outputs": [
141+
{
142+
"data": {
143+
"text/html": [
144+
"<div>\n",
145+
"<style scoped>\n",
146+
" .dataframe tbody tr th:only-of-type {\n",
147+
" vertical-align: middle;\n",
148+
" }\n",
149+
"\n",
150+
" .dataframe tbody tr th {\n",
151+
" vertical-align: top;\n",
152+
" }\n",
153+
"\n",
154+
" .dataframe thead th {\n",
155+
" text-align: right;\n",
156+
" }\n",
157+
"</style>\n",
158+
"<table border=\"1\" class=\"dataframe\">\n",
159+
" <thead>\n",
160+
" <tr style=\"text-align: right;\">\n",
161+
" <th></th>\n",
162+
" <th>cab</th>\n",
163+
" <th>lat</th>\n",
164+
" <th>long</th>\n",
165+
" <th>tm</th>\n",
166+
" </tr>\n",
167+
" </thead>\n",
168+
" <tbody>\n",
169+
" <tr>\n",
170+
" <th>5</th>\n",
171+
" <td>cab_26</td>\n",
172+
" <td>43.612203</td>\n",
173+
" <td>39.720491</td>\n",
174+
" <td>14:52:48</td>\n",
175+
" </tr>\n",
176+
" <tr>\n",
177+
" <th>4</th>\n",
178+
" <td>cab_112</td>\n",
179+
" <td>43.574906</td>\n",
180+
" <td>39.766325</td>\n",
181+
" <td>14:51:53</td>\n",
182+
" </tr>\n",
183+
" </tbody>\n",
184+
"</table>\n",
185+
"</div>"
186+
],
187+
"text/plain": [
188+
" cab lat long tm\n",
189+
"5 cab_26 43.612203 39.720491 14:52:48\n",
190+
"4 cab_112 43.574906 39.766325 14:51:53"
191+
]
192+
},
193+
"metadata": {},
194+
"output_type": "display_data"
195+
}
196+
],
197+
"source": [
198+
"latestrows = df.sort_values(['cab', 'tm'], ascending=False).drop_duplicates('cab')\n",
199+
"display(latestrows)"
200+
]
201+
},
202+
{
203+
"cell_type": "code",
204+
"execution_count": 44,
205+
"id": "dee21ad0-9ffb-42b5-bdc4-c7fcfa828427",
206+
"metadata": {},
207+
"outputs": [
208+
{
209+
"data": {
210+
"text/plain": [
211+
"[['cab_26', 43.612203, 39.720491, '14:52:48'],\n",
212+
" ['cab_112', 43.574906, 39.766325, '14:51:53']]"
213+
]
214+
},
215+
"metadata": {},
216+
"output_type": "display_data"
217+
}
218+
],
219+
"source": [
220+
"latestrows_numpy = latestrows.values\n",
221+
"latestrows = latestrows_numpy.tolist()\n",
222+
"display(latestrows)"
223+
]
224+
},
225+
{
226+
"cell_type": "code",
227+
"execution_count": 45,
228+
"id": "eaf3773d-9880-4026-86e0-0758a998fa2b",
229+
"metadata": {},
230+
"outputs": [
231+
{
232+
"name": "stdout",
233+
"output_type": "stream",
234+
"text": [
235+
"cab_26: 4636\n",
236+
"cab_112: 1015\n"
237+
]
238+
},
239+
{
240+
"data": {
241+
"text/plain": [
242+
"[['cab_26', 43.612203, 39.720491, '14:52:48', 4636],\n",
243+
" ['cab_112', 43.574906, 39.766325, '14:51:53', 1015]]"
244+
]
245+
},
246+
"metadata": {},
247+
"output_type": "display_data"
248+
}
249+
],
250+
"source": [
251+
"# calculate the distance between each cab and a pickup place\n",
252+
"from geopy.distance import distance\n",
253+
"\n",
254+
"pick_up = (43.578854, 39.754995)\n",
255+
"\n",
256+
"for i, row in enumerate(latestrows):\n",
257+
" lat = row[1]\n",
258+
" long = row[2]\n",
259+
" cab = (lat, long)\n",
260+
" dist_meters = distance(pick_up, cab).m\n",
261+
"\n",
262+
" print(row[0] + ':', round(dist_meters))\n",
263+
" latestrows[i].append(round(dist_meters))\n",
264+
"\n",
265+
"display(latestrows)"
266+
]
267+
},
268+
{
269+
"cell_type": "code",
270+
"execution_count": 46,
271+
"id": "e12cf848-4505-40c1-ae6e-a9a2c2c962e1",
272+
"metadata": {},
273+
"outputs": [
274+
{
275+
"name": "stdout",
276+
"output_type": "stream",
277+
"text": [
278+
"The closest cab is: cab_112 . Distance in meters: 1015\n"
279+
]
280+
}
281+
],
282+
"source": [
283+
"closest_cab = min(latestrows, key=lambda x: x[4])\n",
284+
"print('The closest cab is: ', closest_cab[0], '. Distance in meters: ', closest_cab[4])"
285+
]
286+
},
287+
{
288+
"cell_type": "code",
289+
"execution_count": null,
290+
"id": "61ce9cf6-d5e7-47d3-b836-a2daf422ab23",
291+
"metadata": {},
292+
"outputs": [],
293+
"source": []
294+
}
295+
],
296+
"metadata": {
297+
"kernelspec": {
298+
"display_name": "Python 3 (ipykernel)",
299+
"language": "python",
300+
"name": "python3"
301+
},
302+
"language_info": {
303+
"codemirror_mode": {
304+
"name": "ipython",
305+
"version": 3
306+
},
307+
"file_extension": ".py",
308+
"mimetype": "text/x-python",
309+
"name": "python",
310+
"nbconvert_exporter": "python",
311+
"pygments_lexer": "ipython3",
312+
"version": "3.9.17"
313+
}
314+
},
315+
"nbformat": 4,
316+
"nbformat_minor": 5
317+
}

requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
Cartopy == 0.23.0
2+
geocoder == 1.38.1
3+
geopy == 2.4.1
24
h5py == 3.10.0
35
jupyter == 1.0.0
46
keras == 3.3.3
@@ -10,5 +12,6 @@ pandas == 2.2.1
1012
pillow == 10.3.0
1113
scikit-learn == 1.4.0
1214
seaborn == 0.13.2
15+
shapely == 2.0.6
1316
spacy == 3.7.4
1417
yfinance == 0.2.38

0 commit comments

Comments
 (0)