{"id":405477,"date":"2024-06-29T18:20:51","date_gmt":"2024-06-29T18:20:51","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=405477"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=405477","title":{"rendered":"<span>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043a\u0430\u043a Google \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421 Python, Jupyter, Pandas, Geopandas \u0438 Matplotlib<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043e\u0442\u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0434\u0430\u0436 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0443\u00a0<em>ABC:\u00a0<\/em><a href=\"https:\/\/www.youtube.com\/watch?v=GrhSLf0I-HM&amp;t=3m21s\" rel=\"noopener noreferrer nofollow\"><em>Always Be Closing<\/em><\/a><em>, \u0447\u0442\u043e <\/em>\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u043a\u0438 \u0441 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u0435\u043c.\u00a0\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u0435 \u043f\u043e\u0440\u043e\u0434\u0438\u043b\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0443\u00a0<em>ABCD: Always Be Collecting Data<\/em>.\u00a0<\/p>\n<p>\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Google \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u044b, \u043a\u0430\u0440\u0442, \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449, \u0432\u0438\u0434\u0435\u043e \u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e.\u00a0\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Twitter, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u0430.\u00a0\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Facebook \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u2026 \u043d\u0443, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435.\u00a0\u041d\u043e \u043d\u0430\u0448\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438\u043c.\u00a0\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c TikTok\u2026 \u041f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u044e, \u0437\u0430\u0447\u0435\u043c.\u00a0<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u2026 \u041d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e, \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.\u00a0\u041c\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u0438 \u043e\u043d\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b.\u00a0\u0412 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435 XXI \u0432\u0435\u043a\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043b\u0430\u0442\u0438\u0442\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430\u0440, \u0432\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u0442\u043e\u0432\u0430\u0440\u043e\u043c.\u00a0<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u0445\u043e\u0442\u0435\u043b \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00a0<a href=\"https:\/\/abc.xyz\/\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Alphabet<\/a>, \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 Google, \u043e\u0431\u043e \u043c\u043d\u0435 \u0437\u043d\u0430\u0435\u0442.\u00a0\u041a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f \u0434\u043e\u043b\u044f, \u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438.\u00a0\u042f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b \u0441\u043b\u0443\u0436\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0446\u0435\u043d\u0438\u043b \u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u0432\u044b\u0448\u0435 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0\u041f\u043b\u043e\u0445\u0430\u044f \u0438\u0434\u0435\u044f.<\/p>\n<h3>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Google \u0441\u043e\u0431\u0440\u0430\u043b \u043e \u0432\u0430\u0441, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 <a href=\"https:\/\/takeout.google.com\/\" rel=\"noopener noreferrer nofollow\">takeout.google.com<\/a> \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u043e, \u0447\u0442\u043e \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442. \u0411\u043e\u044e\u0441\u044c, \u0447\u0442\u043e \u0436\u0435\u0441\u0442\u043a\u0438\u0439 \u0434\u0438\u0441\u043a \u043c\u043e\u0435\u0433\u043e \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u044b\u0431\u0440\u0430\u043b\u00a0\u0442\u043e\u043b\u044c\u043a\u043e\u00a0<em>\u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/em>.\u00a0\u0422\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043e\u0447\u0442\u0438 300 \u041c\u0411 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON.\u00a0<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/www.google.com\/maps\/timeline\" rel=\"noopener noreferrer nofollow\">\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/a>.\u00a0Facebook \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u0430\u0448\u0435\u043c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438,\u00a0<a href=\"https:\/\/www.facebook.com\/location_history\/view\/\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c<\/a>.\u00a0<a href=\"https:\/\/www.facebook.com\/help\/212802592074644\" rel=\"noopener noreferrer nofollow\">\u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430<\/a>\u00a0\u043e\u043f\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\u00a0\u0423 \u043c\u0435\u043d\u044f 1,4 \u041c\u0411, \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u043d\u043e \u0432\u0430\u0448 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.\u00a0\u0418\u043c\u0435\u044f \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0445 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c.<\/p>\n<h3>\u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 Jupyter Notebook<\/h3>\n<p>\u0412 2020 \u0433\u043e\u0434\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 JSON \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<em>\u043d\u0430\u0443\u043a\u043e\u0439 \u043e \u0434\u0430\u043d\u043d\u044b\u0445<\/em>.\u00a0\u042f \u0445\u043e\u0447\u0443 \u0431\u044b\u0442\u044c \u0443\u0447\u0435\u043d\u044b\u043c!\u00a0\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b: Python, Jupyter Notebook \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:  <\/p>\n<pre><code class=\"php\">brew install python3  pip3 install jupyter pandas geopandas matplotlib descartes<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c Jupyter Notebook \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<code>jupyter notebook<\/code>\u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u2026) Jupyter \u2014  \u044d\u0442\u043e, \u043f\u043e \u0441\u0443\u0442\u0438, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 REPL, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 Python \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.\u00a0\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0449\u0438\u0435 \u043a\u043e\u0434, \u0442\u0435\u043a\u0441\u0442 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.\u00a0\u0412\u0441\u0435 \u0432 \u0432\u0430\u0448\u0435\u043c \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<h3>\u0420\u0430\u0437\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f JSON<\/h3>\n<p>Google \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 JSON, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"json\">\"locations\" : [ {     \"timestampMs\" : \"1387457266881\",     \"latitudeE7\" : 521490489,     \"longitudeE7\" : 208043723,     \"accuracy\" : 15 }, {     \"timestampMs\" : \"1387457271865\",     \"latitudeE7\" : 521490030,     \"longitudeE7\" : 208044464,     \"accuracy\" : 10,     \"activity\" : [ {     \"timestampMs\" : \"1387457280733\",     \"activity\" : [ {         \"type\" : \"STILL\",         \"confidence\" : 77     }, {         \"type\" : \"UNKNOWN\",         \"confidence\" : 20     }, {         \"type\" : \"IN_VEHICLE\",         \"confidence\" : 2     } ]     } ] }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0435, \u0448\u0438\u0440\u043e\u0442\u0430 \/ \u0434\u043e\u043b\u0433\u043e\u0442\u0430 (\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043d\u0430 10\u00a0<sup>7<\/sup>), \u043e\u0442\u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c.\u00a0\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e Google, \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435.\u00a0\u0421 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e 77% \u044f \u0441\u0442\u043e\u044f\u043b \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.\u00a0\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u044d\u0442\u043e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0435\u0433\u043e:  <\/p>\n<pre><code class=\"python\">import pandas as pd import numpy as np import geopandas as gp import shapely.geometry as sg import datetime as dt from matplotlib import cm from matplotlib.lines import Line2D  def extract_activity(record):     try:         return record[\"activity\"][0][\"activity\"][0][\"type\"]     except:         return \"MISSING\"      def parse_json(json):     points = [sg.Point(xy) for xy in zip(json.locations.apply(lambda x: x[\"longitudeE7\"] \/ 10000000),                                     json.locations.apply(lambda x: x[\"latitudeE7\"] \/ 10000000))]     df = gp.GeoDataFrame(geometry=points)     locations = json.locations     df[\"timestamp\"] = locations.apply(lambda x: pd.to_datetime(x[\"timestampMs\"], unit='ms'))     df[\"accuracy\"] = locations.apply(lambda x: x[\"accuracy\"])     df[\"velocity\"] = locations.apply(lambda x: x.get(\"velocity\", None))     df[\"heading\"] = locations.apply(lambda x: x.get(\"heading\", None))     df[\"altitude\"] = locations.apply(lambda x: x.get(\"altitude\", None))     df[\"activity\"] = locations.apply(extract_activity)     return df  %time df = parse_json(pd.read_json(\"Location history.json\"))<\/code><\/pre>\n<p>\u042f \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 JSON.\u00a0\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430\u0443\u043a\u0438 \u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<strong>\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432<\/strong>.\u00a0\u041c\u043d\u0435 \u044d\u0442\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435.\u00a0\u0425\u043e\u0440\u043e\u0448\u043e,\u00a0<em>\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438<\/em>\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0<a href=\"https:\/\/towardsdatascience.com\/feature-extraction-techniques-d619b56e31be\" rel=\"noopener noreferrer nofollow\">\u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a>, \u043d\u043e \u043c\u043d\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043b\u0435\u0433\u0447\u0435.\u00a0\u041f\u043e \u0441\u0443\u0442\u0438, \u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b\u00a0<code>shapely.geometry.Point <\/code>\u0448\u0438\u0440\u043e\u0442\u044b \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u044b \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u0430\u044f \u0438\u043c\u0435\u0435\u0442\u0441\u044f.\u00a0\u041d\u0438\u0447\u0435\u0433\u043e \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e.\u00a0\u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (\u0438\u043b\u0438, \u044f \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b, <code>DataFrame<\/code>) \u0441\u2026 1 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u0437\u0430 8 \u043b\u0435\u0442.\u00a0\u0421\u0442\u0440\u0430\u0448\u043d\u044b\u0439.\u00a0\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u044d\u0442\u0438 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u0438\u0445 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430!<\/p>\n<h3>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043c\u0438\u0440\u0430<\/h3>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0448\u0435\u0439\u043f-\u0444\u0430\u0439\u043b \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f.\u00a0\u042f \u0433\u0434\u0435-\u0442\u043e \u0438\u0445 \u043d\u0430\u0448\u0435\u043b \u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0443\u043c\u0435\u043b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043c\u0438\u0440\u0430:  <\/p>\n<pre><code class=\"php\"># http:\/\/thematicmapping.org\/downloads\/world_borders.php world = gp.read_file('.\/TM_WORLD_BORDERS-0.3\/TM_WORLD_BORDERS-0.3.shp')  def draw_map(df, box):     box_only = df[df.geometry.within(box)]     minx, miny, maxx, maxy = box.bounds     base = world.plot(color='white', edgecolor='silver', figsize=(16,16))     base.set_xlim(minx, maxx)     base.set_ylim(miny, maxy)     ax = box_only.plot(ax=base, marker='o', markersize=8)<\/code><\/pre>\n<p><code>df <\/code>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439\u00a0<code>DataFrame <\/code>\u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0430\u00a0<code>box <\/code>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.\u00a0\u0412\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c54\/e0b\/314\/c54e0b314873ad155e4b58a912617a2a.png\" width=\"935\" height=\"322\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c54\/e0b\/314\/c54e0b314873ad155e4b58a912617a2a.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e.\u00a0\u041c\u0435\u043d\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a 2013\u20132020 \u0433\u043e\u0434\u0430\u043c.\u00a0\u042f \u043f\u043e\u0441\u0435\u0442\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043c\u0435\u0441\u0442 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0447\u0435\u0440\u0430.\u00a0\u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0438\u0437 \u0434\u0430\u043b\u0435\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043e\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445.\u00a0\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430.\u00a0\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u0435\u0441\u044f\u0446\u0430\u043c \u0438 \u0433\u043e\u0434\u0430\u043c, \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0435\u043b \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0433\u043b\u0430\u0434\u043a\u0443\u044e \u043f\u0430\u043b\u0438\u0442\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0435.\u00a0\u042d\u0442\u043e \u0437\u0430\u043d\u044f\u043b\u043e \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u0432\u043e\u0442 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f:  <\/p>\n<pre><code class=\"python\">def seconds(timestamp):     return timestamp.to_pydatetime().timestamp()   def calculate_pal(df2, cmap):     min_ts = seconds(df2.timestamp.min())     max_ts = seconds(df2.timestamp.max())     return df2.timestamp.apply(lambda ts: cmap((seconds(ts) - min_ts) \/ (max_ts - min_ts))).tolist()   def compute_legend(df, ax, cmap, steps):     vals = [x \/ (steps - 1) for x in range(steps)]     custom_lines = [Line2D([0], [0], color=cmap(step), lw=4) for step in vals]     labels = [df.timestamp.quantile(step).strftime(\"%Y-%m-%d\") for step in vals]     ax.legend(custom_lines, labels, loc=\"lower right\")       def draw_map(df, box):     box_only = df[df.geometry.within(box)]     minx, miny, maxx, maxy = box.bounds     base = world.plot(color='white', edgecolor='silver', figsize=(16,12))     base.set_xlim(minx, maxx)     base.set_ylim(miny, maxy)     cmap = cm.get_cmap('viridis')     pal = calculate_pal(box_only, cmap)     ax = box_only.plot(ax=base, marker='o', color=pal, markersize=8)     compute_legend(box_only, ax, cmap, 5)<\/code><\/pre>\n<p><code>calculate_pal() <\/code>\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0446\u0432\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u0435.\u00a0\u0421\u0430\u043c\u044b\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0435 \/ \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0435.\u00a0\u0421\u0430\u043c\u044b\u0435 \u043d\u043e\u0432\u044b\u0435 \u0436\u0435\u043b\u0442\u044b\u0435 \u0441 \u0437\u0435\u043b\u0435\u043d\u044b\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438.\u00a0\u041c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u0443\u044e \u043b\u0435\u0433\u0435\u043d\u0434\u0443.\u00a0\u0425\u0432\u0430\u0442\u0438\u0442, \u043f\u043e\u043a\u0430\u0436\u0438 \u043c\u043d\u0435 \u043a\u0430\u0440\u0442\u0443!  <\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(-140, -20, 140, 70))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eb6\/089\/e61\/eb6089e61ac796a01b4b2ccf40039c65.png\" width=\"935\" height=\"322\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb6\/089\/e61\/eb6089e61ac796a01b4b2ccf40039c65.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u0443\u0447\u0438\u043c \u043c\u043e\u0438 \u043b\u043e\u043a\u0430\u0446\u0438\u0438!<\/h3>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0436\u0438\u0432\u0443 \u0433\u0434\u0435-\u0442\u043e \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0415\u0432\u0440\u043e\u043f\u0435.\u00a0\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431:<\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(-10, 30, 50, 70))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d74\/264\/666\/d74264666d855d73652bfc12308145f1.png\" width=\"933\" height=\"630\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d74\/264\/666\/d74264666d855d73652bfc12308145f1.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410\u0433\u0430, \u044d\u0442\u043e \u041f\u043e\u043b\u044c\u0448\u0430 \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435.\u00a0\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(14, 49, 24, 55))<\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u041f\u043e\u043b\u044c\u0448\u0430, \u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0435\u0435 \u0441\u0442\u043e\u043b\u0438\u0446\u0443 \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e.\u00a0\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u044f \u0436\u0438\u0432\u0443 \u0432 \u0412\u0430\u0440\u0448\u0430\u0432\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043c\u043e\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f.\u00a0\u042d\u0442\u0430 \u0437\u0432\u0435\u0437\u0434\u0447\u0430\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0438 \u043a\u0430\u043d\u0438\u043a\u0443\u043b\u044b.\u00a0\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u043d\u0430 \u0441\u0435\u0432\u0435\u0440 \u043f\u043e \u0431\u0435\u0440\u0435\u0433\u0443 \u043c\u043e\u0440\u044f.\u00a0\u041f\u0440\u044f\u043c\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 &#8212; \u044d\u0442\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u0430, \u043a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0431\u044b\u043b \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c GPS \u0432 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0435.\u00a0\u0425\u043e\u0440\u043e\u0448\u043e, \u0434\u0430\u0432\u0430\u0439 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0433\u0434\u0435 \u044f \u0436\u0438\u0432\u0443:  <\/p>\n<pre><code class=\"php\">draw_map(df, sg.box(20.6, 52, 21.3, 52.5))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/a1c\/793\/e58\/a1c793e5852968fc665fa698a27ce5ac.jpg\" width=\"640\" height=\"488\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a1c\/793\/e58\/a1c793e5852968fc665fa698a27ce5ac.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0439, \u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0414\u0436\u0435\u0439\u0441\u043e\u043d\u0430 \u041f\u043e\u043b\u043b\u043e\u043a\u0430.\u00a0\u0412\u043e\u0442 \u0447\u0442\u043e \u044f \u0438\u043c\u0435\u043b \u0432 \u0432\u0438\u0434\u0443:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/807\/bbd\/758\/807bbd758837f8589bb050549f5e77b7.png\" width=\"947\" height=\"673\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/807\/bbd\/758\/807bbd758837f8589bb050549f5e77b7.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0440\u0438 \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u0442\u043e\u0447\u043a\u0438: \u0441\u0435\u0432\u0435\u0440, \u044e\u0433\u043e-\u0437\u0430\u043f\u0430\u0434 \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e-\u0432\u043e\u0441\u0442\u043e\u043a.\u00a0\u041e\u043d\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u043e\u044e \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0446\u0435\u043d\u0442\u0440 \u0433\u043e\u0440\u043e\u0434\u0430, \u0433\u0434\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e:  <\/p>\n<pre><code class=\"php\">draw_map(df, sg.box(20.88, 52.17, 21.05, 52.32))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/862\/240\/594\/862240594484e0953472c9eb8c8008f8.png\" width=\"789\" height=\"687\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/862\/240\/594\/862240594484e0953472c9eb8c8008f8.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044f\u0445<\/h3>\n<p>\u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044f\u0445, \u043f\u043e\u043c\u043d\u0438\u0442\u0435?\u00a0\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a\u00a0<code>IN_VEHICLE <\/code>(\u043d\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u0438\u043b\u0438 \u0437\u0430 \u0440\u0443\u043b\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f)?<\/p>\n<pre><code class=\"python\">draw_map(df[df.activity == 'IN_VEHICLE'], sg.box(20.88, 52.17, 21.05, 52.32))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9f9\/a3a\/030\/9f9a3a030df8c9f4bdc04b084027497e.png\" width=\"789\" height=\"687\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9f9\/a3a\/030\/9f9a3a030df8c9f4bdc04b084027497e.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0430, \u0435\u0441\u043b\u0438\u00a0<code>ON_FOOT <\/code>\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u00a0\u0442\u043e\u043b\u044c\u043a\u043e\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c:  <\/p>\n<pre><code class=\"python\">draw_map(df[df.activity == 'ON_FOOT'], sg.box(20.88, 52.17, 21.05, 52.32))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e53\/576\/6cd\/e535766cd244c9ab2fd44801a6ffe06b.png\" width=\"789\" height=\"687\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e53\/576\/6cd\/e535766cd244c9ab2fd44801a6ffe06b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0430\u0432\u0442\u043e\u0431\u0443\u0441 \u0438\u043b\u0438 \u043c\u0430\u0448\u0438\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u0435\u0445\u0430\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043f\u0435\u0448\u0438\u0435 \u043f\u0440\u043e\u0433\u0443\u043b\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.\u00a0\u0415\u0441\u043b\u0438 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435\u2026 (?) \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 2016 \u0433\u043e\u0434\u0443 (\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043b\u0435\u0433\u0435\u043d\u0434\u0443) \u044f \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u043b \u043e\u043a\u043e\u043b\u043e 10 \u043a\u043c \u043e\u0442 \u043e\u0444\u0438\u0441\u0430 \u0434\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b.\u00a0\u0418 Google \u044d\u0442\u043e \u0437\u043d\u0430\u0435\u0442.<\/p>\n<h3>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0432\u0430\u0440\u0442\u0430\u043b \u0432\u043e\u043a\u0440\u0443\u0433 \u043c\u043e\u0435\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b:  <\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(20.88, 52.17, 20.93, 52.22)) draw_map(df, sg.box(20.895, 52.19, 20.915, 52.21))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/980\/266\/dcd\/980266dcd159ff3c5e5c76946438964c.png\" width=\"716\" height=\"687\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/980\/266\/dcd\/980266dcd159ff3c5e5c76946438964c.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c60\/af1\/2ce\/c60af12ce669e3ad124de06820b406ef.png\" width=\"735\" height=\"687\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c60\/af1\/2ce\/c60af12ce669e3ad124de06820b406ef.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044f\u0441\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043e\u044f \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u0443\u043b\u0438\u0446\u0443.\u00a0\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u043a\u0430: \u044f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 2016 \u0433\u043e\u0434\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u0441 2020 \u0433\u043e\u0434\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u0436\u0435\u043b\u0442\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u0435\u0434\u0443 \u0432 \u041a\u0440\u0430\u043a\u043e\u0432, \u041f\u043e\u0437\u043d\u0430\u043d\u044c \u0438\u043b\u0438 \u0413\u0434\u0430\u043d\u044c\u0441\u043a.\u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0435\u0442 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0439 \u0438 \u043e\u0442\u043f\u0443\u0441\u043a\u043e\u0432?\u00a0\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 GPS \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435, \u0447\u0435\u043c \u0441\u0435\u043c\u0435\u0439\u043d\u044b\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438!\u00a0\u042d\u0442\u043e \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f JCrete (un):  <\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(23.4, 35.15, 24.3, 35.65))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7e3\/c5b\/5e9\/7e3c5b5e98b661683ae7953c98d4e092.png\" width=\"936\" height=\"527\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7e3\/c5b\/5e9\/7e3c5b5e98b661683ae7953c98d4e092.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u044f \u0431\u044b\u043b \u0442\u0430\u043c \u0434\u0432\u0430\u0436\u0434\u044b \u0432 2016 \u0438 2017 \u0433\u043e\u0434\u0430\u0445, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 2016 \u0433\u043e\u0434\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0435\u0435.\u00a0\u0418\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441 2017 \u0433\u043e\u0434\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0443\u043c\u0438\u043d\u0433 \u0441\u0442\u0430\u043b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c \u0432 \u0415\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u043c \u0421\u043e\u044e\u0437\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043c\u043e\u0435\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0431\u044b\u043b\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0448\u043f\u0438\u043e\u043d\u0438\u0442\u044c \u0437\u0430 \u043c\u043e\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.\u00a0\u0413\u043e\u0434\u043e\u043c \u0440\u0430\u043d\u0435\u0435 \u044f \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u044b\u043b \u043e\u0444\u043b\u0430\u0439\u043d.\u00a0\u0415\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b: \u043e\u0442\u0434\u044b\u0445 \u043d\u0430 \u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0435:  <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f98\/002\/eeb\/f98002eebd732bace57c50ed30fdd01f.png\" width=\"447\" height=\"687\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f98\/002\/eeb\/f98002eebd732bace57c50ed30fdd01f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u2026 \u0418 \u0422\u0430\u0438\u043b\u0430\u043d\u0434 \/ \u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430 \/ \u0412\u044c\u0435\u0442\u043d\u0430\u043c:  <\/p>\n<pre><code class=\"php\">draw_map(df, sg.box(95, 6, 112, 17))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d8b\/72f\/2f4\/d8b72f2f460cd4ce5b79cdf96775deb1.png\" width=\"936\" height=\"609\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d8b\/72f\/2f4\/d8b72f2f460cd4ce5b79cdf96775deb1.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u044f \u043b\u044e\u0431\u043b\u044e \u0433\u0443\u043b\u044f\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043f\u0443\u0441\u043a\u0430.<\/p>\n<h3>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u0438\u0440\u0430\u043b Google \u0437\u0430 \u0434\u0435\u043d\u044c?<\/h3>\n<p>\u041e\u0434\u0438\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0442\u043e\u0447\u0435\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430 8 \u043b\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0445 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e.\u00a0\u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u0435\u0442\u0441\u044f.\u00a0\u042f \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u0439\u0442\u0438 \u0434\u043d\u0438, \u043a\u043e\u0433\u0434\u0430 Google \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:  <\/p>\n<pre><code class=\"python\">def dt_to_date(dt):     return dt.date()  def aggregate_by(df, fun):         tuples = [(activity, df[df.activity == activity].groupby(df.timestamp.apply(fun)).activity.agg('count'))              for activity              in df.activity.drop_duplicates()]         return pd.DataFrame(dict(tuples))  by_day = aggregate_by(df, dt_to_date) by_day.plot(figsize=[20,10])<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3a7\/364\/ea7\/3a7364ea7a8ebeabaadf31c2aa7c7d57.png\" width=\"1162\" height=\"575\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a7\/364\/ea7\/3a7364ea7a8ebeabaadf31c2aa7c7d57.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0432\u044f\u0442\u043e\u0439 \u0434\u044b\u043c, 3 \u0442\u044b\u0441\u044f\u0447\u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 28 \u0438\u044e\u043d\u044f 2016 \u0433\u043e\u0434\u0430!\u00a0\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u044d\u0442\u043e \u043f\u043e \u0447\u0430\u0441\u0430\u043c:  <\/p>\n<pre><code class=\"python\">busy_day = df[df.timestamp.apply(dt_to_date) == dt.date(2016, 6, 28)] busy_day.groupby(busy_day.timestamp.dt.hour).agg('count').geometry.plot.bar(figsize=[12, 9])<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c88\/7dc\/03d\/c887dc03db3a381d1df9ae54df782184.png\" width=\"710\" height=\"537\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c88\/7dc\/03d\/c887dc03db3a381d1df9ae54df782184.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0447\u0442\u0438 250 \u0442\u043e\u0447\u0435\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435\u0433\u043e \u0437\u0430 \u0447\u0430\u0441!<\/p>\n<h3>\u0413\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u044b\u0441\u043e\u0442\u044b<\/h3>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0430\u0436\u043d\u043e\u0435: \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043c\u043e\u0435\u0439 \u0432\u044b\u0441\u043e\u0442\u044b \u0441 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438:  <\/p>\n<pre><code class=\"php\">df.altitude.plot.hist(figsize=[20,10], bins=200, log=True)<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ac4\/941\/51e\/ac494151efc4e6740aa84aafd855ee1f.png\" width=\"1170\" height=\"575\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ac4\/941\/51e\/ac494151efc4e6740aa84aafd855ee1f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0448\u043a\u0430\u043b\u0443.\u00a0\u0420\u0435\u0436\u0438\u043c \u043e\u043a\u043e\u043b\u043e 130 \u043c\u0435\u0442\u0440\u043e\u0432, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b &#8212; \u044f \u0436\u0438\u0432\u0443 \u0432 \u0412\u0430\u0440\u0448\u0430\u0432\u0435.\u00a0\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e \u0431\u044b\u0432\u0430\u044e \u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 2000 \u043c\u0435\u0442\u0440\u043e\u0432 &#8212; \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0441\u0430\u043c\u0430\u044f\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Rysy\" rel=\"noopener noreferrer nofollow\">\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0433\u043e\u0440\u0430 \u0432 \u041f\u043e\u043b\u044c\u0448\u0435<\/a>\u00a0\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0435 2499 \u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430\u0434 \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043c\u043e\u0440\u044f.\u00a0\u0412\u0441\u0435, \u0447\u0442\u043e \u0432\u044b\u0448\u0435, \u043b\u0438\u0431\u043e \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439, \u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0443\u0447\u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u0435\u043d\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u043c \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c.\u00a0\u041d\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0443\u0442\u043e.\u00a0\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0434\u0440\u0443\u0447\u0430\u0435\u0442 \u0442\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043e\u0442\u0434\u0430\u0442\u044c.\u00a0\u0418\u043c\u0435\u0439\u0442\u0435 \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043c\u0430\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0443 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0439.\u00a0\u041f\u043e\u043b\u043d\u044b\u0439 Notebook, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0441\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f,\u00a0<a href=\"https:\/\/github.com\/nurkiewicz\/google-location-history\/blob\/master\/Google%20location%20history.ipynb\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 GitHub<\/a>.\u00a0\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u0446\u0435\u043d\u044e \u0441\u0432\u043e\u044e \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c&#8230; <\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/581062\/\"> https:\/\/habr.com\/ru\/articles\/581062\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043e\u0442\u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0434\u0430\u0436 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0443\u00a0<em>ABC:\u00a0<\/em><a href=\"https:\/\/www.youtube.com\/watch?v=GrhSLf0I-HM&amp;t=3m21s\" rel=\"noopener noreferrer nofollow\"><em>Always Be Closing<\/em><\/a><em>, \u0447\u0442\u043e <\/em>\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u043a\u0438 \u0441 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u0435\u043c.\u00a0\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u0435 \u043f\u043e\u0440\u043e\u0434\u0438\u043b\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0443\u00a0<em>ABCD: Always Be Collecting Data<\/em>.\u00a0<\/p>\n<p>\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Google \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u044b, \u043a\u0430\u0440\u0442, \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449, \u0432\u0438\u0434\u0435\u043e \u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e.\u00a0\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Twitter, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u0430.\u00a0\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Facebook \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u2026 \u043d\u0443, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435.\u00a0\u041d\u043e \u043d\u0430\u0448\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438\u043c.\u00a0\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c TikTok\u2026 \u041f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u044e, \u0437\u0430\u0447\u0435\u043c.\u00a0<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u2026 \u041d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e, \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.\u00a0\u041c\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u0438 \u043e\u043d\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b.\u00a0\u0412 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435 XXI \u0432\u0435\u043a\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043b\u0430\u0442\u0438\u0442\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430\u0440, \u0432\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u0442\u043e\u0432\u0430\u0440\u043e\u043c.\u00a0<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u0445\u043e\u0442\u0435\u043b \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00a0<a href=\"https:\/\/abc.xyz\/\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f Alphabet<\/a>, \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 Google, \u043e\u0431\u043e \u043c\u043d\u0435 \u0437\u043d\u0430\u0435\u0442.\u00a0\u041a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f \u0434\u043e\u043b\u044f, \u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438.\u00a0\u042f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b \u0441\u043b\u0443\u0436\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0446\u0435\u043d\u0438\u043b \u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u0432\u044b\u0448\u0435 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0\u041f\u043b\u043e\u0445\u0430\u044f \u0438\u0434\u0435\u044f.<\/p>\n<h3>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Google \u0441\u043e\u0431\u0440\u0430\u043b \u043e \u0432\u0430\u0441, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 <a href=\"https:\/\/takeout.google.com\/\" rel=\"noopener noreferrer nofollow\">takeout.google.com<\/a> \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u043e, \u0447\u0442\u043e \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442. \u0411\u043e\u044e\u0441\u044c, \u0447\u0442\u043e \u0436\u0435\u0441\u0442\u043a\u0438\u0439 \u0434\u0438\u0441\u043a \u043c\u043e\u0435\u0433\u043e \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u044b\u0431\u0440\u0430\u043b\u00a0\u0442\u043e\u043b\u044c\u043a\u043e\u00a0<em>\u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/em>.\u00a0\u0422\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043e\u0447\u0442\u0438 300 \u041c\u0411 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON.\u00a0<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/www.google.com\/maps\/timeline\" rel=\"noopener noreferrer nofollow\">\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/a>.\u00a0Facebook \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u0430\u0448\u0435\u043c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438,\u00a0<a href=\"https:\/\/www.facebook.com\/location_history\/view\/\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c<\/a>.\u00a0<a href=\"https:\/\/www.facebook.com\/help\/212802592074644\" rel=\"noopener noreferrer nofollow\">\u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430<\/a>\u00a0\u043e\u043f\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\u00a0\u0423 \u043c\u0435\u043d\u044f 1,4 \u041c\u0411, \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u043d\u043e \u0432\u0430\u0448 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.\u00a0\u0418\u043c\u0435\u044f \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0445 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c.<\/p>\n<h3>\u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 Jupyter Notebook<\/h3>\n<p>\u0412 2020 \u0433\u043e\u0434\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 JSON \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<em>\u043d\u0430\u0443\u043a\u043e\u0439 \u043e \u0434\u0430\u043d\u043d\u044b\u0445<\/em>.\u00a0\u042f \u0445\u043e\u0447\u0443 \u0431\u044b\u0442\u044c \u0443\u0447\u0435\u043d\u044b\u043c!\u00a0\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b: Python, Jupyter Notebook \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:  <\/p>\n<pre><code class=\"php\">brew install python3  pip3 install jupyter pandas geopandas matplotlib descartes<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c Jupyter Notebook \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<code>jupyter notebook<\/code>\u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u2026) Jupyter \u2014  \u044d\u0442\u043e, \u043f\u043e \u0441\u0443\u0442\u0438, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 REPL, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 Python \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.\u00a0\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0449\u0438\u0435 \u043a\u043e\u0434, \u0442\u0435\u043a\u0441\u0442 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.\u00a0\u0412\u0441\u0435 \u0432 \u0432\u0430\u0448\u0435\u043c \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<h3>\u0420\u0430\u0437\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f JSON<\/h3>\n<p>Google \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 JSON, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"json\">\"locations\" : [ {     \"timestampMs\" : \"1387457266881\",     \"latitudeE7\" : 521490489,     \"longitudeE7\" : 208043723,     \"accuracy\" : 15 }, {     \"timestampMs\" : \"1387457271865\",     \"latitudeE7\" : 521490030,     \"longitudeE7\" : 208044464,     \"accuracy\" : 10,     \"activity\" : [ {     \"timestampMs\" : \"1387457280733\",     \"activity\" : [ {         \"type\" : \"STILL\",         \"confidence\" : 77     }, {         \"type\" : \"UNKNOWN\",         \"confidence\" : 20     }, {         \"type\" : \"IN_VEHICLE\",         \"confidence\" : 2     } ]     } ] }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0435, \u0448\u0438\u0440\u043e\u0442\u0430 \/ \u0434\u043e\u043b\u0433\u043e\u0442\u0430 (\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043d\u0430 10\u00a0<sup>7<\/sup>), \u043e\u0442\u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c.\u00a0\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e Google, \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435.\u00a0\u0421 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e 77% \u044f \u0441\u0442\u043e\u044f\u043b \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.\u00a0\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u044d\u0442\u043e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0435\u0433\u043e:  <\/p>\n<pre><code class=\"python\">import pandas as pd import numpy as np import geopandas as gp import shapely.geometry as sg import datetime as dt from matplotlib import cm from matplotlib.lines import Line2D  def extract_activity(record):     try:         return record[\"activity\"][0][\"activity\"][0][\"type\"]     except:         return \"MISSING\"      def parse_json(json):     points = [sg.Point(xy) for xy in zip(json.locations.apply(lambda x: x[\"longitudeE7\"] \/ 10000000),                                     json.locations.apply(lambda x: x[\"latitudeE7\"] \/ 10000000))]     df = gp.GeoDataFrame(geometry=points)     locations = json.locations     df[\"timestamp\"] = locations.apply(lambda x: pd.to_datetime(x[\"timestampMs\"], unit='ms'))     df[\"accuracy\"] = locations.apply(lambda x: x[\"accuracy\"])     df[\"velocity\"] = locations.apply(lambda x: x.get(\"velocity\", None))     df[\"heading\"] = locations.apply(lambda x: x.get(\"heading\", None))     df[\"altitude\"] = locations.apply(lambda x: x.get(\"altitude\", None))     df[\"activity\"] = locations.apply(extract_activity)     return df  %time df = parse_json(pd.read_json(\"Location history.json\"))<\/code><\/pre>\n<p>\u042f \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 JSON.\u00a0\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430\u0443\u043a\u0438 \u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<strong>\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432<\/strong>.\u00a0\u041c\u043d\u0435 \u044d\u0442\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435.\u00a0\u0425\u043e\u0440\u043e\u0448\u043e,\u00a0<em>\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438<\/em>\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0<a href=\"https:\/\/towardsdatascience.com\/feature-extraction-techniques-d619b56e31be\" rel=\"noopener noreferrer nofollow\">\u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a>, \u043d\u043e \u043c\u043d\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043b\u0435\u0433\u0447\u0435.\u00a0\u041f\u043e \u0441\u0443\u0442\u0438, \u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b\u00a0<code>shapely.geometry.Point <\/code>\u0448\u0438\u0440\u043e\u0442\u044b \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u044b \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u0430\u044f \u0438\u043c\u0435\u0435\u0442\u0441\u044f.\u00a0\u041d\u0438\u0447\u0435\u0433\u043e \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e.\u00a0\u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (\u0438\u043b\u0438, \u044f \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b, <code>DataFrame<\/code>) \u0441\u2026 1 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u0437\u0430 8 \u043b\u0435\u0442.\u00a0\u0421\u0442\u0440\u0430\u0448\u043d\u044b\u0439.\u00a0\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u044d\u0442\u0438 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u0438\u0445 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430!<\/p>\n<h3>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043c\u0438\u0440\u0430<\/h3>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0448\u0435\u0439\u043f-\u0444\u0430\u0439\u043b \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f.\u00a0\u042f \u0433\u0434\u0435-\u0442\u043e \u0438\u0445 \u043d\u0430\u0448\u0435\u043b \u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0443\u043c\u0435\u043b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043c\u0438\u0440\u0430:  <\/p>\n<pre><code class=\"php\"># http:\/\/thematicmapping.org\/downloads\/world_borders.php world = gp.read_file('.\/TM_WORLD_BORDERS-0.3\/TM_WORLD_BORDERS-0.3.shp')  def draw_map(df, box):     box_only = df[df.geometry.within(box)]     minx, miny, maxx, maxy = box.bounds     base = world.plot(color='white', edgecolor='silver', figsize=(16,16))     base.set_xlim(minx, maxx)     base.set_ylim(miny, maxy)     ax = box_only.plot(ax=base, marker='o', markersize=8)<\/code><\/pre>\n<p><code>df <\/code>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439\u00a0<code>DataFrame <\/code>\u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0430\u00a0<code>box <\/code>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.\u00a0\u0412\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e.\u00a0\u041c\u0435\u043d\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a 2013\u20132020 \u0433\u043e\u0434\u0430\u043c.\u00a0\u042f \u043f\u043e\u0441\u0435\u0442\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043c\u0435\u0441\u0442 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0447\u0435\u0440\u0430.\u00a0\u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0438\u0437 \u0434\u0430\u043b\u0435\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043e\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445.\u00a0\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430.\u00a0\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u0435\u0441\u044f\u0446\u0430\u043c \u0438 \u0433\u043e\u0434\u0430\u043c, \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0435\u043b \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0433\u043b\u0430\u0434\u043a\u0443\u044e \u043f\u0430\u043b\u0438\u0442\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0435.\u00a0\u042d\u0442\u043e \u0437\u0430\u043d\u044f\u043b\u043e \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u0432\u043e\u0442 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f:  <\/p>\n<pre><code class=\"python\">def seconds(timestamp):     return timestamp.to_pydatetime().timestamp()   def calculate_pal(df2, cmap):     min_ts = seconds(df2.timestamp.min())     max_ts = seconds(df2.timestamp.max())     return df2.timestamp.apply(lambda ts: cmap((seconds(ts) - min_ts) \/ (max_ts - min_ts))).tolist()   def compute_legend(df, ax, cmap, steps):     vals = [x \/ (steps - 1) for x in range(steps)]     custom_lines = [Line2D([0], [0], color=cmap(step), lw=4) for step in vals]     labels = [df.timestamp.quantile(step).strftime(\"%Y-%m-%d\") for step in vals]     ax.legend(custom_lines, labels, loc=\"lower right\")       def draw_map(df, box):     box_only = df[df.geometry.within(box)]     minx, miny, maxx, maxy = box.bounds     base = world.plot(color='white', edgecolor='silver', figsize=(16,12))     base.set_xlim(minx, maxx)     base.set_ylim(miny, maxy)     cmap = cm.get_cmap('viridis')     pal = calculate_pal(box_only, cmap)     ax = box_only.plot(ax=base, marker='o', color=pal, markersize=8)     compute_legend(box_only, ax, cmap, 5)<\/code><\/pre>\n<p><code>calculate_pal() <\/code>\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0446\u0432\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u0435.\u00a0\u0421\u0430\u043c\u044b\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0435 \/ \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0435.\u00a0\u0421\u0430\u043c\u044b\u0435 \u043d\u043e\u0432\u044b\u0435 \u0436\u0435\u043b\u0442\u044b\u0435 \u0441 \u0437\u0435\u043b\u0435\u043d\u044b\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438.\u00a0\u041c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u0443\u044e \u043b\u0435\u0433\u0435\u043d\u0434\u0443.\u00a0\u0425\u0432\u0430\u0442\u0438\u0442, \u043f\u043e\u043a\u0430\u0436\u0438 \u043c\u043d\u0435 \u043a\u0430\u0440\u0442\u0443!  <\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(-140, -20, 140, 70))<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u0443\u0447\u0438\u043c \u043c\u043e\u0438 \u043b\u043e\u043a\u0430\u0446\u0438\u0438!<\/h3>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0436\u0438\u0432\u0443 \u0433\u0434\u0435-\u0442\u043e \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0415\u0432\u0440\u043e\u043f\u0435.\u00a0\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431:<\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(-10, 30, 50, 70))<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0410\u0433\u0430, \u044d\u0442\u043e \u041f\u043e\u043b\u044c\u0448\u0430 \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435.\u00a0\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(14, 49, 24, 55))<\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u041f\u043e\u043b\u044c\u0448\u0430, \u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0435\u0435 \u0441\u0442\u043e\u043b\u0438\u0446\u0443 \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e.\u00a0\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u044f \u0436\u0438\u0432\u0443 \u0432 \u0412\u0430\u0440\u0448\u0430\u0432\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043c\u043e\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f.\u00a0\u042d\u0442\u0430 \u0437\u0432\u0435\u0437\u0434\u0447\u0430\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0438 \u043a\u0430\u043d\u0438\u043a\u0443\u043b\u044b.\u00a0\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u043d\u0430 \u0441\u0435\u0432\u0435\u0440 \u043f\u043e \u0431\u0435\u0440\u0435\u0433\u0443 \u043c\u043e\u0440\u044f.\u00a0\u041f\u0440\u044f\u043c\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 &#8212; \u044d\u0442\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u0430, \u043a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0431\u044b\u043b \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c GPS \u0432 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0435.\u00a0\u0425\u043e\u0440\u043e\u0448\u043e, \u0434\u0430\u0432\u0430\u0439 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0433\u0434\u0435 \u044f \u0436\u0438\u0432\u0443:  <\/p>\n<pre><code class=\"php\">draw_map(df, sg.box(20.6, 52, 21.3, 52.5))<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0439, \u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0414\u0436\u0435\u0439\u0441\u043e\u043d\u0430 \u041f\u043e\u043b\u043b\u043e\u043a\u0430.\u00a0\u0412\u043e\u0442 \u0447\u0442\u043e \u044f \u0438\u043c\u0435\u043b \u0432 \u0432\u0438\u0434\u0443:  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0440\u0438 \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u0442\u043e\u0447\u043a\u0438: \u0441\u0435\u0432\u0435\u0440, \u044e\u0433\u043e-\u0437\u0430\u043f\u0430\u0434 \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e-\u0432\u043e\u0441\u0442\u043e\u043a.\u00a0\u041e\u043d\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u043e\u044e \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0446\u0435\u043d\u0442\u0440 \u0433\u043e\u0440\u043e\u0434\u0430, \u0433\u0434\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e:  <\/p>\n<pre><code class=\"php\">draw_map(df, sg.box(20.88, 52.17, 21.05, 52.32))<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044f\u0445<\/h3>\n<p>\u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044f\u0445, \u043f\u043e\u043c\u043d\u0438\u0442\u0435?\u00a0\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a\u00a0<code>IN_VEHICLE <\/code>(\u043d\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u0438\u043b\u0438 \u0437\u0430 \u0440\u0443\u043b\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f)?<\/p>\n<pre><code class=\"python\">draw_map(df[df.activity == 'IN_VEHICLE'], sg.box(20.88, 52.17, 21.05, 52.32))<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0430, \u0435\u0441\u043b\u0438\u00a0<code>ON_FOOT <\/code>\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u00a0\u0442\u043e\u043b\u044c\u043a\u043e\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c:  <\/p>\n<pre><code class=\"python\">draw_map(df[df.activity == 'ON_FOOT'], sg.box(20.88, 52.17, 21.05, 52.32))<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0430\u0432\u0442\u043e\u0431\u0443\u0441 \u0438\u043b\u0438 \u043c\u0430\u0448\u0438\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u0435\u0445\u0430\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043f\u0435\u0448\u0438\u0435 \u043f\u0440\u043e\u0433\u0443\u043b\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.\u00a0\u0415\u0441\u043b\u0438 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435\u2026 (?) \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 2016 \u0433\u043e\u0434\u0443 (\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043b\u0435\u0433\u0435\u043d\u0434\u0443) \u044f \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u043b \u043e\u043a\u043e\u043b\u043e 10 \u043a\u043c \u043e\u0442 \u043e\u0444\u0438\u0441\u0430 \u0434\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b.\u00a0\u0418 Google \u044d\u0442\u043e \u0437\u043d\u0430\u0435\u0442.<\/p>\n<h3>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0432\u0430\u0440\u0442\u0430\u043b \u0432\u043e\u043a\u0440\u0443\u0433 \u043c\u043e\u0435\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b:  <\/p>\n<pre><code class=\"python\">draw_map(df, sg.box(20.88, 52.17, 20.93, 52.22)) draw_map(df, sg.box(20.895, 52.19, 20.915, 52.21))<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044f\u0441\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043e\u044f \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u0443\u043b\u0438\u0446\u0443.\u00a0\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u043a\u0430: \u044f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 2016 \u0433\u043e\u0434\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u0441 2020 \u0433\u043e\u0434\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u0436\u0435\u043b\u0442\u044b\u0445 \u0442\u043e\u0447\u0435\u043a.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-405477","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/405477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=405477"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/405477\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=405477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=405477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=405477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}