{"id":311426,"date":"2020-10-14T03:00:11","date_gmt":"2020-10-14T03:00:11","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=311426"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=311426","title":{"rendered":"\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0445 \u043f\u0435\u0440\u0435\u0435\u0437\u0434"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/523360\/\">\n<p>\u0412 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043f\u043e\u0434\u043c\u043e\u0441\u043a\u043e\u0432\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043f\u043b\u043e\u0445\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0435\u0437\u0434. \u0412 \u0447\u0430\u0441 \u043f\u0438\u043a \u0432\u0441\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d, \u043d\u043e \u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438. \u041f\u0440\u043e\u0435\u0437\u0436\u0430\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437, \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u2014 \u043a\u0430\u043a\u0430\u044f \u0443 \u043d\u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c?<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ye\/ks\/vl\/yeksvloajfta6bdbtjhn7gof19k.jpeg\" alt=\"\u041f\u0435\u0440\u0435\u0435\u0437\u0434\"\/><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0443\u0431\u0438\u043c\u0441\u044f \u0432 \u043d\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u044b \u0438 \u0442\u0435\u043e\u0440\u0438\u044e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 GPS \u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Python \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"#\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435-\u0434\u0430\u043d\u043d\u044b\u0435\">1&nbsp;&nbsp;\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/a><\/li>\n<li><a href=\"#\u0422\u0435\u043e\u0440\u0438\u044f-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e-\u043f\u043e\u0442\u043e\u043a\u0430\">2&nbsp;&nbsp;\u0422\u0435\u043e\u0440\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430<\/a><\/li>\n<li><a href=\"#\u0421\u0431\u043e\u0440-\u0438-\u0430\u043d\u0430\u043b\u0438\u0437-\u0434\u0430\u043d\u043d\u044b\u0445\">3&nbsp;&nbsp;\u0421\u0431\u043e\u0440 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445<\/a>\n<ul>\n<li><a href=\"#\u0420\u0443\u0447\u043d\u043e\u0439-\u043f\u043e\u0434\u0441\u0447\u0435\u0442-\u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438-\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\">3.1&nbsp;&nbsp;\u0420\u0443\u0447\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"#\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435-\u0441\u0440\u0435\u0434\u043d\u0435\u0439-\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438-\u043d\u0430-\u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435\">3.2&nbsp;&nbsp;\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435<\/a>\n<ul>\n<li><a href=\"#\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f-\u043d\u0430-\u043a\u0430\u0440\u0442\u0435\">3.2.1&nbsp;&nbsp;\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0435<\/a><\/li>\n<li><a href=\"#\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f-\u043f\u0440\u043e\u0444\u0438\u043b\u044f-\u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430\">3.2.2&nbsp;&nbsp;\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#\u041e\u0446\u0435\u043d\u043a\u0430-\u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438\">3.3&nbsp;&nbsp;\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#\u0418\u0442\u043e\u0433\u0438\">4&nbsp;&nbsp;\u0418\u0442\u043e\u0433\u0438<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435-\u0434\u0430\u043d\u043d\u044b\u0435\">1. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h2>\n<p>  <\/p>\n<p>\u041c\u044b \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u043d\u043e\u043a\u043e\u043b\u0435\u0439\u043d\u044b\u0439 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0441 \u043f\u043b\u043e\u0445\u0438\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0434\u043e\u0440\u043e\u0433\u0438, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10 \u043a\u043c\/\u0447. \u0418\u0437 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0438 \u043d\u043e\u0443\u0442\u0431\u0443\u043a. <\/p>\n<p>  <\/p>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Jupyter Notebook \u043d\u0430 \u043c\u043e\u0435\u043c <a href=\"https:\/\/github.com\/Ushakovvk\/railroad-crossing\">GitHub&#8217;\u0435<\/a>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jg\/up\/mm\/jgupmma7mtqlw_8xvmxwj_ax8fs.jpeg\" alt=\"\u041f\u0435\u0440\u0435\u0435\u0437\u0434\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">import pandas as pd import numpy as np import glob  #!pip install utm import utm  from sklearn.decomposition import PCA from scipy import interpolate  import matplotlib.pyplot as plt import seaborn as sns sns.set(rc={'figure.figsize':(12, 8)}) import plotly.express as px  # \u0422\u043e\u043a\u0435\u043d Mapbox \u0434\u043b\u044f \u043a\u0430\u0440\u0442 \u0432 Plotly mapbox_token = open('mapbox_token', 'r').read()<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"\u0422\u0435\u043e\u0440\u0438\u044f-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e-\u043f\u043e\u0442\u043e\u043a\u0430\">2. \u0422\u0435\u043e\u0440\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438.<br \/>  <strong>\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f<\/strong> <math>$inline$\\rho$inline$<\/math> \u2014 \u0427\u0438\u0441\u043b\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u043d\u0430 1 \u043a\u043c \u0434\u043e\u0440\u043e\u0433\u0438.<br \/>  <math>$inline$v$inline$<\/math> \u2014 <strong>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0410\u0422\u0421<\/strong>.<\/p>\n<p>  <\/p>\n<p><strong>\u0418\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f<\/strong> <math>$inline$Q(\\rho)$inline$<\/math> \u2014 \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c<\/strong> <math>$inline$P$inline$<\/math> \u2014 \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0434\u043e\u0440\u043e\u0433\u0438 \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0445 \u0438 \u043f\u043e\u0433\u043e\u0434\u043d\u043e-\u043a\u043b\u0438\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445.<\/p>\n<p>  <\/p>\n<p>\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0444\u043e\u0440\u043c\u0443\u043b\u043e\u0439:<\/p>\n<p>  <\/p>\n<p><math>$$display$$Q = V \\cdot \\rho$$display$$<\/math><\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c <math>$inline$Q(\\rho)$inline$<\/math> \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>\u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u043e\u0439<\/strong>. <\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043d\u0438\u0436\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u00ab\u0426\u0435\u043d\u0442\u0440\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b\u00bb \u0433. \u041c\u043e\u0441\u043a\u0432\u044b, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043d\u044f \u0432 2005 \u0433. \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u043f\u043e\u043b\u043e\u0441\u0430\u043c \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u044c\u0446\u0430 \u043e\u0442 \u0410\u0432\u0442\u043e\u0437\u0430\u0432\u043e\u0434\u0441\u043a\u043e\u0439 \u0443\u043b\u0438\u0446\u044b \u0434\u043e \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0448\u043e\u0441\u0441\u0435, \u0438 \u0441\u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0434\u043d\u0443 \u043f\u043e\u043b\u043e\u0441\u0443.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jl\/uz\/2_\/jluz2_x9pyysikimwv2dlkyrtr8.png\" alt=\"\u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\"\/><\/p>\n<p>  <\/p>\n<p><strong>\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438<\/strong><\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u0438 \u043e\u0446\u0435\u043d\u043a\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0440\u043e\u0433 \u0438 \u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 <a href=\"http:\/\/docs.cntd.ru\/document\/1200092512\">\u041e\u0414\u041c 218.2.020-2012<\/a> &quot;\u041c\u0435\u0442\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u0446\u0435\u043d\u043a\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u0440\u043e\u0433&quot;.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0446\u0435\u043b\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b, \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<p>  <\/p>\n<p><math>$$display$$P_{\u0436.\u043f.}=P_\u0434 \\cdot \\beta^{\u0436.\u043f.}_1 \\cdot \\beta^{\u0436.\u043f.}_2 \\cdot \\beta^{\u0436.\u043f.}_3 \\cdot \\beta^{\u0436.\u043f.}_4 \\cdot \\beta^{\u0436.\u043f.}_5,$$display$$<\/math><\/p>\n<p>  <\/p>\n<p>\u0433\u0434\u0435 <math>$inline$\\beta^{\u0436.\u043f.}_1,\\beta^{\u0436.\u043f.}_2,\\beta^{\u0436.\u043f.}_3,\\beta^{\u0436.\u043f.}_4,\\beta^{\u0436.\u043f.}_5$inline$<\/math> \u2014 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u0432 \u0438 \u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432 \u0437\u043e\u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0443\u044e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439:<\/p>\n<p>  <\/p>\n<p><math>$$display$$P_{\u0436.\u043f.}=1500 \\cdot 0.93 \\cdot 0.66 \\cdot 0.8 \\cdot 1 \\cdot 1 = 736.56 \u0430\u0432\u0442.\/\u0447 = 12.3 \u0430\u0432\u0442.\/\u043c\u0438\u043d$$display$$<\/math><\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b 2 \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0446\u0435\u043d\u043a\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0435\u0445\u0430\u0432\u0448\u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0410\u0422\u0421;<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0410\u0422\u0421 \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u0432 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041c\u043e\u0434\u0435\u043b\u044c \u0422\u0430\u043d\u0430\u043a\u0430:<\/li>\n<\/ul>\n<p>  <\/p>\n<p><math>$inline$\\rho(v)=\\frac{1}{d(v)}$inline$<\/math>,<br \/>  <math>$inline$d(v)= L+ c_1 v+ c_2 v^2$inline$<\/math>,<\/p>\n<p>  <\/p>\n<p>\u0433\u0434\u0435 <math>$inline$d(v)$inline$<\/math> \u2013 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 (\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435) \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0410\u0422\u0421, <math>$inline$L$inline$<\/math> \u2013 \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0434\u043b\u0438\u043d\u0430 \u0410\u0422\u0421, <math>$inline$c_1$inline$<\/math> \u2013 \u0432\u0440\u0435\u043c\u044f, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u044e\u0449\u0435\u0435 \u0440\u0435\u0430\u043a\u0446\u0438\u044e \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f, <math>$inline$c_2$inline$<\/math> \u2014 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438. \u041f\u0440\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 (\u0441\u0443\u0445\u043e\u0439 \u0430\u0441\u0444\u0430\u043b\u044c\u0442): <math>$inline$L=5.7 \u043c, c_1=0.504 c, c_2=0.0285 \u0441^2\/\u043c$inline$<\/math>.<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041c\u043e\u0434\u0435\u043b\u044c \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430:<\/li>\n<\/ul>\n<p>  <\/p>\n<p><math>$inline$\\rho= \\rho_{max} (1 &#8212; \\frac{v}{v_{max}})$inline$<\/math>,<\/p>\n<p>  <\/p>\n<p>\u0433\u0434\u0435 <math>$inline$\\rho_{max}$inline$<\/math> \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0430 (\u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f), <math>$inline$v_{max}$inline$<\/math> \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f (\u0436\u0435\u043b\u0430\u0435\u043c\u0430\u044f) \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0410\u0422\u0421 (\u043f\u0440\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0435). \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u041e\u0414\u041c 218.2.020-2012 \u2014 <math>$inline$\\rho_{max} = 85 \u0430\u0432\u0442.\/\u043a\u043c, v_{max}=60 \u043a\u043c\/\u0447$inline$<\/math><\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\"># \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 diagram1 = pd.read_csv('\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430.csv', sep=';', header=None, names=['P', 'V'], decimal=',') diagram1_func = interpolate.interp1d(diagram1['P'], diagram1['V'], kind='cubic') diagram1_xnew = np.arange(diagram1['P'].min(), diagram1['P'].max())  # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b diagram2 = pd.read_csv('\u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430.csv', sep=';', header=None, names=['P', 'Q'], decimal=',') diagram2_func = interpolate.interp1d(diagram2['P'], diagram2['Q'], kind='cubic') diagram2_xnew = np.arange(diagram2['P'].min(), diagram2['P'].max())<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\">def density_Tanaka(V):     # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0422\u0430\u043d\u0430\u043a\u0430      V = V * 1000 \/ 60 \/ 60 # \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043a\u043c\/\u0447 \u0432 \u043c\/\u0441     L = 5.7 # \u043c     c1 = 0.504 # \u0441     c2 = 0.0285 #\u0441**2\/\u043c      return 1000 \/ (L + c1 * V + c2 * V**2) # \u0430\u0432\u0442.\/\u043a\u043c  def density_Grindshilds(V):     # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430       pmax = 85 # \u0430\u0432\u0442.\/\u043a\u043c     vmax = 60 # \u043a\u043c\/\u0447      return pmax * (1 - V \/ vmax) # \u0430\u0432\u0442.\/\u043a\u043c<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\"># \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 V = np.arange(1, 80) # \u043a\u043c\/\u0447 V1 = np.arange(1, 61) # \u043a\u043c\/\u0447  fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8))  ax1.plot(density_Tanaka(V), V, label=&quot;\u041c\u043e\u0434\u0435\u043b\u044c \u0422\u0430\u043d\u0430\u043a\u0430&quot;) ax1.plot(density_Grindshilds(V1), V1, label=&quot;\u041c\u043e\u0434\u0435\u043b\u044c \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430&quot;) ax1.plot(diagram1_xnew, diagram1_func(diagram1_xnew), label=&quot;\u042d\u043a\u0441\u043f\u0435\u0440. \u0434\u0430\u043d\u043d\u044b\u0435 \u0422\u0422\u041a&quot;) ax1.set_xlabel(r'\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c $\\rho$, \u0430\u0432\u0442\/\u043a\u043c') ax1.set_ylabel(r'\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c $V$, \u043a\u043c\/\u0447') ax1.legend()  ax2.plot(density_Tanaka(V), density_Tanaka(V) * V, label=&quot;\u041c\u043e\u0434\u0435\u043b\u044c \u0422\u0430\u043d\u0430\u043a\u0430&quot;) ax2.plot(density_Grindshilds(V1), density_Grindshilds(V1) * V1, label=&quot;\u041c\u043e\u0434\u0435\u043b\u044c \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430&quot;) ax2.plot(diagram2_xnew, diagram2_func(diagram2_xnew), label=&quot;\u042d\u043a\u0441\u043f\u0435\u0440. \u0434\u0430\u043d\u043d\u044b\u0435 \u0422\u0422\u041a&quot;) ax2.set_xlabel(r'\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c $\\rho$, \u0430\u0432\u0442\/\u043a\u043c') ax2.set_ylabel(r'\u0418\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c $Q$, \u0430\u0432\u0442\/\u0447') ax2.legend()  plt.show()<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/q1\/rk\/_u\/q1rk_ussjxsm2dckmlgtrd10-my.png\" alt=\"\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b\"\/><\/p>\n<p>  <\/p>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u043d\u0438\u0436\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u044d\u0442\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  <\/p>\n<h2 id=\"\u0421\u0431\u043e\u0440-\u0438-\u0430\u043d\u0430\u043b\u0438\u0437-\u0434\u0430\u043d\u043d\u044b\u0445\">3. \u0421\u0431\u043e\u0440 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>  <\/p>\n<h3 id=\"\u0420\u0443\u0447\u043d\u043e\u0439-\u043f\u043e\u0434\u0441\u0447\u0435\u0442-\u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438-\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\">3.1 \u0420\u0443\u0447\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<p>\u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0448\u0438\u043d, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u0435\u0439\u043b\u043e\u0433\u0435\u0440 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0438. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u044c Enter, \u043a\u043e\u0434 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0441\u044f:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u043a\u0435\u0439\u043b\u043e\u0433\u0435\u0440\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">%%writefile &quot;key-logger.py&quot; import pandas as pd import time import datetime  class _GetchUnix:     # from https:\/\/code.activestate.com\/recipes\/134892\/     def __init__(self):         import tty, sys      def __call__(self):         import sys, tty, termios         fd = sys.stdin.fileno()         old_settings = termios.tcgetattr(fd)         try:             tty.setraw(sys.stdin.fileno())             ch = sys.stdin.read(1)         finally:             termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)         return ch  def logging():     path = 'logs\/keylog\/'     filename = f&quot;{time.strftime('%Y-%m-%d %H-%M-%S')}.csv&quot;     path_to_file = path + filename     db = []     getch = _GetchUnix()     print('\u041f\u0440\u043e\u0446\u0435\u0441\u0441...')     while True:         key = getch()         if key == 'c':             break         else:             db.append((datetime.datetime.now(), key))     df = pd.DataFrame(db, columns=['time', 'click'])     print(df)     df.to_csv(path_to_file, index=False)     print(f&quot;\\nSaved to {filename}&quot;)  if __name__ == &quot;__main__&quot;:     logging()<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u0437\u043b\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 20 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u043c. \u042f \u0437\u0430\u043f\u0438\u0441\u0430\u043b 2 \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0435\u0437\u0434\u0430 \u043f\u043e\u0435\u0437\u0434\u0430, \u0442. \u0435. \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u043d\u0430 100%:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">files = glob.glob('logs\/keylog\/*.csv') keylogger_data = [] print(f'\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 - {len(files)} \u0448\u0442.') for filename in files:     df = pd.read_csv(filename, parse_dates=['time'])     keylogger_data.append(df) keylogger_data = pd.concat(keylogger_data, ignore_index=True) keylogger_data.head()<\/code><\/pre>\n<div class=\"scrollable-table\">\n<table border=\"1\">\n<thead>\n<tr>\n<th><\/th>\n<th>time<\/th>\n<th>click<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>0<\/th>\n<td>2020-09-29 16:24:02.691189<\/td>\n<td>d<\/td>\n<\/tr>\n<tr>\n<th>1<\/th>\n<td>2020-09-29 16:24:05.186670<\/td>\n<td>a<\/td>\n<\/tr>\n<tr>\n<th>2<\/th>\n<td>2020-09-29 16:24:07.157702<\/td>\n<td>d<\/td>\n<\/tr>\n<tr>\n<th>3<\/th>\n<td>2020-09-29 16:24:11.506961<\/td>\n<td>a<\/td>\n<\/tr>\n<tr>\n<th>4<\/th>\n<td>2020-09-29 16:24:14.206266<\/td>\n<td>a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u041a\u043b\u0430\u0432\u0438\u0448\u0430 &quot;a&quot; \u2014 \u043c\u0430\u0448\u0438\u043d\u0430 \u043f\u0440\u043e\u0435\u0445\u0430\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0438\u0437 \u0433\u043e\u0440\u043e\u0434\u0430, \u043a\u043b\u0430\u0432\u0438\u0448\u0430 &#8216;d&#8217; \u2014 \u0432 \u0433\u043e\u0440\u043e\u0434.<br \/>  \u0421\u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043c\u0438\u043d\u0443\u0442\u0430\u043c \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">keylogger_data['time'] = keylogger_data['time'].astype('datetime64[m]') keylogger_per_min = keylogger_data.groupby(['click', 'time'], as_index=False).size().reset_index().rename(columns={0:'size'}) keylogger_per_min.head()<\/code><\/pre>\n<div class=\"scrollable-table\">\n<table border=\"1\">\n<thead>\n<tr>\n<th><\/th>\n<th>index<\/th>\n<th>click<\/th>\n<th>time<\/th>\n<th>size<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>0<\/th>\n<td>0<\/td>\n<td>a<\/td>\n<td>2020-09-29 16:24:00<\/td>\n<td>12<\/td>\n<\/tr>\n<tr>\n<th>1<\/th>\n<td>1<\/td>\n<td>a<\/td>\n<td>2020-09-29 16:25:00<\/td>\n<td>13<\/td>\n<\/tr>\n<tr>\n<th>2<\/th>\n<td>2<\/td>\n<td>a<\/td>\n<td>2020-09-29 16:26:00<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<th>3<\/th>\n<td>3<\/td>\n<td>a<\/td>\n<td>2020-09-29 16:27:00<\/td>\n<td>18<\/td>\n<\/tr>\n<tr>\n<th>4<\/th>\n<td>4<\/td>\n<td>a<\/td>\n<td>2020-09-29 16:28:00<\/td>\n<td>14<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<pre><code class=\"python\">sns.catplot(x='click', y='size', kind=&quot;box&quot;, data=keylogger_per_min);<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/8d\/ee\/pc\/8deepclvt5bmotq2wqma_ixicfs.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<pre><code class=\"python\">print(f&quot;\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c: {keylogger_per_min['size'].mean():.1f} \u0430\u0432\u0442.\/\u043c\u0438\u043d \\ \u0438\u043b\u0438 {keylogger_per_min['size'].mean() * 60:.1f} \u0430\u0432\u0442.\/\u0447&quot;)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c: 11.7 \u0430\u0432\u0442.\/\u043c\u0438\u043d \u0438\u043b\u0438 700.0 \u0430\u0432\u0442.\/\u0447<br \/>  \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u043e\u0439 \u0441 \u043d\u0435\u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430.<br \/>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043d\u0430\u0448\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430 \u2014 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0432 700 \u0430\u0432\u0442.\/\u0447 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u043a\u043e\u043b\u043e 10 \u043a\u043c\/\u0447 (\u043e 50 \u043a\u043c\/\u0447 \u0440\u0435\u0447\u0438 \u043d\u0435 \u0438\u0434\u0435\u0442) \u2014 \u043f\u043e \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u044d\u0442\u043e \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c.<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">plt.plot(V1, density_Grindshilds(V1)*V1, label=&quot;\u041c\u043e\u0434\u0435\u043b\u044c \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430&quot;) plt.xlabel(r'\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c $V$, \u043a\u043c\/\u0447') plt.ylabel(r'\u0418\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c $Q$, \u0430\u0432\u0442\/\u0447') plt.show()<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nv\/lb\/h1\/nvlbh1xmonjhdzkn0m0twbe32d4.png\" alt=\"Grindshilds_model\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435-\u0441\u0440\u0435\u0434\u043d\u0435\u0439-\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438-\u043d\u0430-\u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435\">3.2 \u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Android <strong>GPSLogger<\/strong> \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430 \u0432 csv \u0444\u0430\u0439\u043b\u044b. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0434\u0435\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 (\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f) \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 GPS \u2014 \u0441 \u044d\u0442\u0438\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <strong>Physics Toolbox Suite<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0443 \u043c\u0435\u043d\u044f \u043d\u0430\u0431\u0440\u0430\u043b\u043e\u0441\u044c \u043e\u043a\u043e\u043b\u043e 50 \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u0432 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430. \u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u043f\u0440\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0435 \u0438 \u0432 \u043f\u0440\u043e\u0431\u043a\u0430\u0445 \u2014 \u044f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0435\u0437\u0436\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><strong>\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f GPSLogger<\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 GPSLogger \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>time \u2014 \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f;<\/li>\n<li>lat \u0438 lon \u2014 \u0448\u0438\u0440\u043e\u0442\u0430 \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u0430, \u0433\u0440\u0430\u0434;<\/li>\n<li>speed \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, <math>$inline$\u043c\/\u0441^2$inline$<\/math>;<\/li>\n<li>direction \u2014 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0432 \u0433\u043e\u0440\u043e\u0434 \u0438\u043b\u0438 \u0438\u0437 \u0433\u043e\u0440\u043e\u0434\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"python\">files = glob.glob('logs\/gps\/*.csv') gpslogger_data = [] print(f'\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 GPS - {len(files)} \u0448\u0442.') for filename in files:     df = pd.read_csv(filename, parse_dates=['time'], index_col='time')     if df.iloc[10, 1] &lt; df.iloc[-1, 1]:         df['direction'] = 0 # \u0432 \u0433\u043e\u0440\u043e\u0434     else:         df['direction'] = 1 # \u0438\u0437 \u0433\u043e\u0440\u043e\u0434\u0430     gpslogger_data.append(df) gpslogger_data = pd.concat(gpslogger_data) gpslogger_data.head()  gps_1 = gpslogger_data[['lat', 'lon', 'speed', 'direction']]<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 GPS \u2014 37 \u0448\u0442.<\/p>\n<p>  <\/p>\n<p><strong>\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Physics Toolbox Suite:<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"python\">files = glob.glob('logs\/gps_accel\/*.csv') print(f'\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 - {len(files)} \u0448\u0442.') pts_data = []  for filename in files:     df = pd.read_csv(filename, sep=';',decimal=',')     df['time'] = filename[-22:-12] + '-' + df['time']     if df.iloc[10, 5] &lt; df.iloc[-1, 5]:         df['direction'] = 0 # \u0432 \u0433\u043e\u0440\u043e\u0434     else:         df['direction'] = 1 # \u0438\u0437 \u0433\u043e\u0440\u043e\u0434\u0430     pts_data.append(df) pts_data = pd.concat(pts_data) pts_data.head()<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u2014 14 \u0448\u0442.<\/p>\n<div class=\"scrollable-table\">\n<table border=\"1\">\n<thead>\n<tr>\n<th><\/th>\n<th>time<\/th>\n<th>ax<\/th>\n<th>ay<\/th>\n<th>az<\/th>\n<th>Latitude<\/th>\n<th>Longitude<\/th>\n<th>Speed (m\/s)<\/th>\n<th>Unnamed: 7<\/th>\n<th>direction<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>0<\/th>\n<td>2020-09-04-14:11:18:029<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.000000<\/td>\n<td>0.00000<\/td>\n<td>0.0<\/td>\n<td>NaN<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<th>1<\/th>\n<td>2020-09-04-14:11:18:030<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>NaN<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<th>2<\/th>\n<td>2020-09-04-14:11:18:030<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>NaN<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<th>3<\/th>\n<td>2020-09-04-14:11:18:094<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>NaN<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<th>4<\/th>\n<td>2020-09-04-14:11:18:094<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>NaN<\/td>\n<td>1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0448\u0438\u0440\u043e\u0442\u043e\u0439, \u0434\u043e\u043b\u0433\u043e\u0442\u043e\u0439 \u2014 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">pts_data = pts_data.query('Latitude != 0.')<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Physics Toolbox Suite \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0434\u043b\u044f \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 400 \u0413\u0446, \u043d\u043e \u0434\u0430\u0442\u0447\u0438\u043a GPS \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 1 \u0413\u0446, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">pts_data['time'] = pd.to_datetime(pts_data['time'], format='%Y-%m-%d-%H:%M:%S:%f') pts_data = pts_data.rename(columns={'Latitude':'lat', 'Longitude':'lon', 'Speed (m\/s)':'speed'})<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">accel_data = pts_data[['time', 'lat', 'lon', 'ax', 'ay', 'az', 'direction']].copy() accel_data = accel_data.set_index('time') accel_data['direction'] = accel_data['direction'].map({1.: '\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430', 0.: '\u0412 \u0433\u043e\u0440\u043e\u0434'}) accel_data.head()<\/code><\/pre>\n<div class=\"scrollable-table\">\n<table border=\"1\">\n<thead>\n<tr>\n<th><\/th>\n<th>lat<\/th>\n<th>lon<\/th>\n<th>ax<\/th>\n<th>ay<\/th>\n<th>az<\/th>\n<th>direction<\/th>\n<\/tr>\n<tr>\n<th>time<\/th>\n<th><\/th>\n<th><\/th>\n<th><\/th>\n<th><\/th>\n<th><\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>2020-09-04 14:11:18.030<\/th>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>2020-09-04 14:11:18.030<\/th>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>2020-09-04 14:11:18.094<\/th>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>2020-09-04 14:11:18.094<\/th>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>2020-09-04 14:11:18.095<\/th>\n<td>56.372343<\/td>\n<td>37.53044<\/td>\n<td>0.0<\/td>\n<td>0.0<\/td>\n<td>-0.0<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 GPS:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">gps_2 = pts_data[['time', 'lat', 'lon', 'speed', 'direction']].copy() gps_2 = gps_2.set_index('time') gps_2 = gps_2.resample('S').mean() gps_2 = gps_2.dropna(how='all') gps_2.head()<\/code><\/pre>\n<div class=\"scrollable-table\">\n<table border=\"1\">\n<thead>\n<tr>\n<th><\/th>\n<th>lat<\/th>\n<th>lon<\/th>\n<th>speed<\/th>\n<th>direction<\/th>\n<\/tr>\n<tr>\n<th>time<\/th>\n<th><\/th>\n<th><\/th>\n<th><\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>2020-08-10 00:45:02<\/th>\n<td>56.338342<\/td>\n<td>37.522946<\/td>\n<td>0.0<\/td>\n<td>1.0<\/td>\n<\/tr>\n<tr>\n<th>2020-08-10 00:45:03<\/th>\n<td>56.338342<\/td>\n<td>37.522946<\/td>\n<td>0.0<\/td>\n<td>1.0<\/td>\n<\/tr>\n<tr>\n<th>2020-08-10 00:45:04<\/th>\n<td>56.338342<\/td>\n<td>37.522946<\/td>\n<td>0.0<\/td>\n<td>1.0<\/td>\n<\/tr>\n<tr>\n<th>2020-08-10 00:45:05<\/th>\n<td>56.338342<\/td>\n<td>37.522946<\/td>\n<td>0.0<\/td>\n<td>1.0<\/td>\n<\/tr>\n<tr>\n<th>2020-08-10 00:45:06<\/th>\n<td>56.338342<\/td>\n<td>37.522946<\/td>\n<td>0.0<\/td>\n<td>1.0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u0432\u0441\u0435 GPS \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">gps_data = gps_1.append(gps_2, ignore_index=True) gps_data['direction'] = gps_data['direction'].map({1.: '\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430', 0.: '\u0412 \u0433\u043e\u0440\u043e\u0434'}) gps_data.head()<\/code><\/pre>\n<div class=\"scrollable-table\">\n<table border=\"1\">\n<thead>\n<tr>\n<th><\/th>\n<th>lat<\/th>\n<th>lon<\/th>\n<th>speed<\/th>\n<th>direction<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>0<\/th>\n<td>56.167241<\/td>\n<td>37.504026<\/td>\n<td>19.82<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>1<\/th>\n<td>56.167051<\/td>\n<td>37.503804<\/td>\n<td>19.36<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>2<\/th>\n<td>56.166884<\/td>\n<td>37.503667<\/td>\n<td>19.62<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>3<\/th>\n<td>56.166718<\/td>\n<td>37.503554<\/td>\n<td>19.35<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<th>4<\/th>\n<td>56.166570<\/td>\n<td>37.503427<\/td>\n<td>19.12<\/td>\n<td>\u0418\u0437 \u0433\u043e\u0440\u043e\u0434\u0430<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h4 id=\"\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f-\u043d\u0430-\u043a\u0430\u0440\u0442\u0435\">3.2.1 \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0435<\/h4>\n<p>  <\/p>\n<p>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Plotly:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">fig = px.scatter_mapbox(gps_data, lat=&quot;lat&quot;, lon=&quot;lon&quot;, color='direction', zoom=17, height=600) fig.update_layout(mapbox_accesstoken=mapbox_token, mapbox_style='streets') fig.show()<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a5\/fs\/jh\/a5fsjhkaor9-9_khgtq1dppdbqq.png\" alt=\"\u041a\u0430\u0440\u0442\u0430\"\/><\/p>\n<p>  <\/p>\n<h4 id=\"\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f-\u043f\u0440\u043e\u0444\u0438\u043b\u044f-\u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430\">3.2.2 \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430<\/h4>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u043e\u0434\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0432\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b GPS, \u0430 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 WGS 84 \u0432 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e. <\/li>\n<li>\u0421\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043e\u0440\u043e\u0433\u0438.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 \u043e\u043d\u043b\u0430\u0439\u043d \u043a\u0430\u0440\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f Web Mercator, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0430\u0445 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0410\u0444\u0440\u0438\u043a\u0438, \u0445\u043e\u0442\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438 \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0430\u0431\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u043e\u043f\u0435\u0440\u0435\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u041c\u0435\u0440\u043a\u0430\u0442\u043e\u0440\u0430. \u0412 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0413\u0430\u0443\u0441\u0441\u0430 \u2014 \u041a\u0440\u044e\u0433\u0435\u0440\u0430, \u0432 \u0421\u0428\u0410 \u2014 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u043f\u0435\u0440\u0435\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u041c\u0435\u0440\u043a\u0430\u0442\u043e\u0440\u0430 (UTM).<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0446\u0438\u044f Web-Mercator<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jc\/9g\/pg\/jc9gpgvq4hkowazfi0kgsbjva6i.png\" alt=\"\u041f\u0440\u043e\u0435\u043a\u0446\u0438\u044f Web-Mercator\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0446\u0438\u044f UTM<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ox\/oe\/tj\/oxoetjpz_vtfnahwpdibhrb0478.png\" alt=\"\u041f\u0440\u043e\u0435\u043a\u0446\u0438\u044f UTM\"\/><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 UTM \u0434\u043b\u044f Python \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/Turbo87\/utm\">https:\/\/github.com\/Turbo87\/utm<\/a>, \u0435\u0433\u043e \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">gps_data['xs'] = gps_data[['lat', 'lon']].apply(lambda x: utm.from_latlon(x[0], x[1])[0], axis=1) gps_data['ys'] = gps_data[['lat', 'lon']].apply(lambda x: utm.from_latlon(x[0], x[1])[1], axis=1) gps_data['speed_kmh'] = gps_data.speed \/ 1000 * 60 * 60<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 50 \u043c\u0435\u0442\u0440\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\"># \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 lat0 = 56.35205 lon0 = 37.51792 xc, yc, _, _ = utm.from_latlon(lat0, lon0)  r = 50 gps_data = gps_data.query(f'{xc - r} &lt; xs &amp; xs &lt; {xc + r}')\\                    .query(f'{yc - r} &lt; ys &amp; ys &lt; {yc + r}')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\">fig = px.scatter_mapbox(gps_data, lat=&quot;lat&quot;, lon=&quot;lon&quot;, color='direction', zoom=17, height=600) fig.update_layout(mapbox_accesstoken=mapbox_token, mapbox_style='streets') fig.show()<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ye\/4d\/pe\/ye4dpehtxshl4hlhwwajno4j_mq.png\" alt=\"\u041a\u0430\u0440\u0442\u0430\"\/><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043e\u0441\u044c \u0434\u043e\u0440\u043e\u0433\u0438. \u042d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0441 2d \u0432 1d, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 (PCA). <\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c 2 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u2014 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u0432\u0437\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 scikit-learn. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u043c Sklearn:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">pca = PCA(n_components=1).fit(gps_data[['xs', 'ys']]) gps_data['xs_transform'] = pca.transform(gps_data[['xs', 'ys']])<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform', y='speed_kmh', data=gps_data, aspect=2.5, hue='direction');<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/r-\/km\/4z\/r-km4zta3zkjoqd8ewcf2o2yzve.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442. \u041f\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b [-5, 25]. \u0414\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">accel_data['xs'] = accel_data[['lat', 'lon']].apply(lambda x: utm.from_latlon(x[0], x[1])[0], axis=1) accel_data['ys'] = accel_data[['lat', 'lon']].apply(lambda x: utm.from_latlon(x[0], x[1])[1], axis=1) accel_data = accel_data.query(f'{xc - r} &lt; xs &amp; xs &lt; {xc + r}')\\                        .query(f'{yc - r} &lt; ys &amp; ys &lt; {yc + r}') accel_data['xs_transform'] = pca.transform(accel_data[['xs', 'ys']])<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0441\u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u0432 Android \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nq\/3i\/qz\/nq3iqztamuq6yuvewyal79y6e-g.png\" alt=\"\u041e\u0441\u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0435\u0436\u0430\u043b \u043f\u043e \u0445\u043e\u0434\u0443 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (\u043e\u0441\u044c Y). \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u043e \u043e\u0441\u044f\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform', y='ax', data=accel_data, aspect=2.5, hue='direction');<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hh\/bk\/sg\/hhbksgotubwjszudvvif4xhcqsk.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform', y='ay', data=accel_data, aspect=2.5, hue='direction');<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/1f\/ii\/vl\/1fiivlhjgw5z5s_luk1mm__dure.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform', y='az', data=accel_data, aspect=2.5, hue='direction');<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gh\/aj\/_u\/ghaj_uhgpwzhwassbyni6kw5ao8.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043f\u043e \u043e\u0441\u0438 Z:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform', y='az', data=accel_data.query('-20 &lt; xs_transform &lt; 40'), aspect=2.5, hue='direction');<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/v6\/-x\/9q\/v6-x9qd3quppvmh-3ztq3epsioc.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u043e \u043e\u0441\u044f\u043c X \u0438 Z \u0447\u0435\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u2014 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b [-10, 25] \u0441 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0432 \u0442\u043e\u0447\u043a\u0435 7.5.<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">cross = gps_data.query('-10 &lt; xs_transform &lt; 25')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\">fig = px.scatter_mapbox(cross, lat=&quot;lat&quot;, lon=&quot;lon&quot;, color='direction', zoom=19, height=600) fig.update_layout(mapbox_accesstoken=mapbox_token, mapbox_style='streets') fig.show()<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a5\/hf\/rl\/a5hfrlovf0qgp63edacrwh_ax1i.png\" alt=\"\u041a\u0430\u0440\u0442\u0430\"\/><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">mean_v = cross.speed_kmh.mean() print(f&quot;\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 - {mean_v:.2} \u043a\u043c\/\u0447&quot;) sns.distplot(cross.speed_kmh);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u2014 9.4 \u043a\u043c\/\u0447<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gw\/2v\/jb\/gw2vjbiuhpdb05oixkczu7etju4.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<p>\u041e\u043a\u0440\u0443\u0433\u043b\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u043e \u043c\u0435\u0442\u0440\u0430 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">base = 1 gps_data['xs_transform_round'] = gps_data['xs_transform'].apply(lambda x: base * round(x \/ base)) accel_data['xs_transform_round'] = accel_data['xs_transform'].apply(lambda x: base * round(x \/ base))<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform_round', y='speed_kmh', data=gps_data, kind=&quot;line&quot;, aspect=2.5);<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qd\/pi\/f6\/qdpif6l3s8-plsmlzt1cy88prp4.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform_round', y='az', data=accel_data, kind=&quot;line&quot;, aspect=2.5);<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_a\/jm\/wc\/_ajmwcjdesprkg00cyirknxggy8.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"\u041e\u0446\u0435\u043d\u043a\u0430-\u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438\">3.3 \u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">gps_data['flow_Tanaka'] = density_Tanaka(gps_data.speed_kmh) * gps_data.speed_kmh gps_data['flow_Grindshilds'] = density_Grindshilds(gps_data.speed_kmh) * gps_data.speed_kmh<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\">sns.relplot(x='xs_transform_round', y='flow_Grindshilds', data=gps_data, aspect=2.5, kind='line', hue='direction');<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ru\/q0\/u9\/ruq0u9uini3_5mxtbrnt4lzxg_8.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<pre><code class=\"python\">cross = gps_data.query('-10 &lt; xs_transform &lt; 25')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\">mean_flow_Tanaka = cross.flow_Tanaka.mean() print(f&quot;\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0422\u0430\u043d\u0430\u043a\u0430 - {mean_flow_Tanaka:.1f} \u0430\u0432\u0442\/\u0447 \\ \u0438\u043b\u0438 {mean_flow_Tanaka \/ 60:.1f} \u0430\u0432\u0442\/\u043c\u0438\u043d&quot;)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0422\u0430\u043d\u0430\u043a\u0430 \u2014 1275.5 \u0430\u0432\u0442\/\u0447 \u0438\u043b\u0438 21.3 \u0430\u0432\u0442\/\u043c\u0438\u043d<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">mean_flow_Grindshilds = cross.flow_Grindshilds.mean() print(f&quot;\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430 - {mean_flow_Grindshilds:.1f} \u0430\u0432\u0442\/\u0447 \\ \u0438\u043b\u0438 {mean_flow_Grindshilds \/ 60:.1f} \u0430\u0432\u0442\/\u043c\u0438\u043d&quot;)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430 \u2014 660.0 \u0430\u0432\u0442\/\u0447 \u0438\u043b\u0438 11.0 \u0430\u0432\u0442\/\u043c\u0438\u043d<br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043d\u0430\u0448\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0432 700 \u0430\u0432\u0442.\/\u0447.<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">plt.plot(V1, density_Grindshilds(V1)*V1, label=&quot;\u041c\u043e\u0434\u0435\u043b\u044c \u0413\u0440\u0438\u043d\u0434\u0448\u0438\u043b\u0434\u0441\u0430&quot;) plt.xlabel(r'\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c $V$, \u043a\u043c\/\u0447') plt.ylabel(r'\u0418\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c $Q$, \u0430\u0432\u0442\/\u0447') plt.show()<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nv\/lb\/h1\/nvlbh1xmonjhdzkn0m0twbe32d4.png\" alt=\"png\"\/><\/p>\n<p>  <\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0435\u0441\u043b\u0438 \u043c\u044b \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043e 30 \u043a\u043c\/\u0447 \u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435, \u0432\u0432\u0435\u0434\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0440\u043e\u0433\u0438:<\/p>\n<p>  <\/p>\n<p><math>$$display$$P_{\u0436.\u043f.}=1500 \\cdot 0.93 \\cdot 0.98 \\cdot 0.8 \\cdot 1 \\cdot 1 = 1093.7 \u0430\u0432\u0442.\/\u0447 = 18.3 \u0430\u0432\u0442.\/\u043c\u0438\u043d$$display$$<\/math><\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u0432 \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0441\u0432\u0435\u0442\u0438\u043b \u0430\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/crusandr.livejournal.com\/127814.html\">&quot;\u041a\u0430\u043a \u043d\u0430\u0434\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0436\/\u0434 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u0432&quot;<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"\u0418\u0442\u043e\u0433\u0438\">4. \u0418\u0442\u043e\u0433\u0438<\/h2>\n<p>  <\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043d\u0435\u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10 \u043a\u043c\/\u0447, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0431\u043a\u0438. <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0443\u044e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u0432 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<\/div>\n<p> \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\/post\/523360\/\"> https:\/\/habr.com\/ru\/post\/523360\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/523360\/\">\n<p>\u0412 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043f\u043e\u0434\u043c\u043e\u0441\u043a\u043e\u0432\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043f\u043b\u043e\u0445\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0435\u0437\u0434. \u0412 \u0447\u0430\u0441 \u043f\u0438\u043a \u0432\u0441\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d, \u043d\u043e \u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438. \u041f\u0440\u043e\u0435\u0437\u0436\u0430\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437, \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u2014 \u043a\u0430\u043a\u0430\u044f \u0443 \u043d\u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c?<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ye\/ks\/vl\/yeksvloajfta6bdbtjhn7gof19k.jpeg\" alt=\"\u041f\u0435\u0440\u0435\u0435\u0437\u0434\"\/><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0443\u0431\u0438\u043c\u0441\u044f \u0432 \u043d\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u044b \u0438 \u0442\u0435\u043e\u0440\u0438\u044e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 GPS \u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Python \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\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-311426","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311426","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=311426"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311426\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=311426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=311426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=311426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}