{"id":351249,"date":"2023-08-04T09:02:26","date_gmt":"2023-08-04T09:02:26","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=351249"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=351249","title":{"rendered":"<span>\u0428\u0438\u0440\u043e\u043a\u0430, \u043d\u0435\u043e\u0431\u044a\u044f\u0442\u043d\u0430, \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430: \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u043a\u0430\u0440\u0442\u0430 \u0420\u043e\u0441\u0441\u0438\u0438 \u0441 Plotly<\/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<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ca7\/68a\/507\/ca768a5076ca559565e4c755a7c1cec4.jpg\" width=\"974\" height=\"487\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca7\/68a\/507\/ca768a5076ca559565e4c755a7c1cec4.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>\u041d\u0430\u00a0\u0441\u0432\u044f\u0437\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a <a href=\"https:\/\/newtechaudit.ru\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 NTA<\/a> \u041c\u0430\u043a\u0441\u0438\u043c \u0410\u043b\u0451\u0448\u0438\u043d.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u00a0python \u043d\u0435\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430: \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Folium \u0438\u043b\u0438\u00a0Bokeh), \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u00ab\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445\u00bb \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a\u00a0\u043d\u0430\u00a0\u043b\u0430\u0434\u043e\u043d\u0438! <\/p>\n<p>\u041d\u043e\u00a0\u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u0430\u00a0\u0432\u00a0\u0441\u0435\u0442\u0438, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435, \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c? \u0412\u00a0\u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 Plotly \u0438 GeoPandas. \u041d\u043e\u00a0\u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0440\u044f\u0434 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442. \u0412\u00a0\u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0448\u0430\u0433 \u0437\u0430\u00a0\u0448\u0430\u0433\u043e\u043c \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0420\u043e\u0441\u0441\u0438\u0438 \u043f\u043e\u00a0\u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e Plotly, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u043c\u0441.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u043e\u0441\u0442\u0443<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"#%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%B5%D0%B6%D0%B4%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%81%D0%BB%D0%BE%D0%B9\" rel=\"noopener noreferrer nofollow\">\u0421\u043b\u043e\u0439-\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430 \u043a\u0430\u0440\u0442\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c mapFigure<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<p>\u0412\u00a0\u044d\u043f\u043e\u0445\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u0432\u0430\u0436\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0435\u00a0\u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u043b\u043e\u0442\u043d\u0435. \u041f\u043e\u0442\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0432\u00a0\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u0445.<\/p>\n<p><a href=\"https:\/\/plotly.com\/python\/\" rel=\"noopener noreferrer nofollow\">Plotly<\/a>\u00a0\u2014 \u043c\u043e\u0449\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u00a0Python, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u0430\u0440\u0442\u044b. \u041e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 Plotly \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e\u00a0\u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a Python, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a\u00a0Pandas \u0438 NumPy. \u0412\u00a0Plotly \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043a\u0430\u0440\u0442\u0430\u043c\u0438 (<a href=\"https:\/\/plotly.com\/python\/maps\/\" rel=\"noopener noreferrer nofollow\">\u0441\u043c. \u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/a>), \u043d\u043e\u00a0\u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c, \u043c\u043d\u0435\u00a0\u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0442\u0438\u043f\u0430 Pandas \u0438 NumPy \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 <a href=\"https:\/\/geopandas.org\/en\/stable\/\" rel=\"noopener noreferrer nofollow\">GeoPandas<\/a>. \u042d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u00a0\u0433\u0435\u043e\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u00a0Python \u0437\u0430\u00a0\u0441\u0447\u0451\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432\u00a0Pandas. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u0442\u0435\u00a0\u0436\u0435 \u043f\u0430\u043d\u0434\u044b, \u043d\u043e\u00a0\u0437\u043d\u0430\u044e\u0449\u0438\u0435 \u0442\u043e\u043b\u043a \u0432\u00a0\u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438. GeoPandas \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u00a0\u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Shapely.<\/p>\n<h2>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c<\/h2>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%B5%D0%B6%D0%B4%D0%B5\" id=\"\u043f\u0440\u0435\u0436\u0434\u0435\"><\/a><\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043b\u043e\u0439\u2011\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u00a0Plotly \u043a\u043b\u0430\u0441\u0441 <a href=\"https:\/\/plotly.com\/python\/reference\/layout\/geo\" rel=\"noopener noreferrer nofollow\">plotly.graph_objects.layout.Geo<\/a>, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u00a0\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u043a\u0430\u0440\u0442\u044b. <\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0441\u00a0\u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430; <\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0431\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f <a href=\"https:\/\/plotly.com\/python\/reference\/layout\/geo\/#layout-geo-scope\" rel=\"noopener noreferrer nofollow\">\u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439<\/a>: <em>\u00abafrica\u00bb, \u00abasia\u00bb, \u00abeurope\u00bb, \u00abnorth america\u00bb, \u00absouth america\u00bb, \u00abusa\u00bb, \u00abworld\u00bb; <\/em><\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u00ab\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445\u00bb \u0441\u0438\u0441\u0442\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0420\u043e\u0441\u0441\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0434\u043b\u044f\u00a0\u043c\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u00ad\u2011 \u0433\u043b\u0430\u0432\u043d\u044b\u0439. \u0418\u0437\u00a0\u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u0441\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0420\u043e\u0441\u0441\u0438\u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c\u00a0\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0435 \u0432\u0441\u0435\u0433\u043e \u043c\u0438\u0440\u0430. \u0417\u0434\u0435\u0441\u044c \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u043e\u0438 \u0434\u043b\u044f\u00a0\u0410\u0437\u0438\u0438, \u0415\u0432\u0440\u043e\u043f\u044b, \u043d\u043e\u00a0\u043d\u0430\u0448\u0430 \u0448\u0438\u0440\u043e\u043a\u0430\u044f \u0438 \u043d\u0435\u043e\u0431\u044a\u044f\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0451\u0440\u043b\u0430\u0441\u044c \u043d\u0430\u00a0\u043e\u0431\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0432\u0435\u0442\u0430. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u00a0Plotly \u043a\u0430\u0440\u0442\u044b \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0432\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (\u0448\u0438\u0440\u043e\u0442\u0430 \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u0430). \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 <a href=\"https:\/\/plotly.com\/python\/reference\/layout\/geo\/#layout-geo-projection\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438<\/a>, \u043d\u043e\u00a0\u043e\u043d\u0438 \u0434\u0430\u043b\u0435\u043a\u0438 \u043e\u0442\u00a0\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u043d\u0430\u00a0\u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438. \u041a\u043e\u0433\u0434\u0430\u00a0\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0435 \u0420\u043e\u0441\u0441\u0438\u0438, \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u043a\u0430\u043a\u00a0\u0432\u00a0\u043a\u043e\u043d\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0430\u0445.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u0430\u043b\u0435\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043e\u0431\u0430\u0432\u043b\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a. <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0447\u0435\u043a\u043f\u043e\u0438\u043d\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u043a\u0430\u0440\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0441\u043b\u043e\u044f-\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u043a\u0430\u0440\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c, \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0433\u043e\u0440\u043e\u0434\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h2>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p><a class=\"anchor\" name=\"%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\"><\/a><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b. \u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 GeoJSON. <\/p>\n<p>GeoJSON\u00a0\u2014 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f\u00a0\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0430\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430\u00a0\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u043a\u0430\u043a: <em>Point, LineString, Polygon, MultiPoint, MultiLineString \u0438 MultiPolygon<\/em>.<\/p>\n<p>\u0412\u00a0\u043c\u043e\u0451\u043c \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0421\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 (<a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/main\/data\/russia_regions.geojson\" rel=\"noopener noreferrer nofollow\">russia_regions.geojson<\/a>): \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430 2021\u00a0\u0433\u043e\u0434, \u0432\u0437\u044f\u0442\u044b \u0438\u0437 <a href=\"https:\/\/github.com\/timurkanaz\/Russia_geojson_OSM\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a>. \u0418\u043c\u0435\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u0435 \u0441\u00a0\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u00a0\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B0%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%83%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438<\/a> \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u00a0\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u043e\u0432 (<a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/main\/data\/russia_cities_population.parquet\" rel=\"noopener noreferrer nofollow\">russia_cities_population.parquet<\/a>): \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u0430, \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u0430, \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 (\u0432\u0437\u044f\u0442\u044b \u0438\u0437\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e <a href=\"https:\/\/github.com\/pensnarik\/russian-cities\" rel=\"noopener noreferrer nofollow\">\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430<\/a>).<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" id=\"\u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430\"><\/a><\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u044f \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432\u00a0Jupyter \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 <a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/main\/geodata_preparation.ipynb\" rel=\"noopener noreferrer nofollow\">geodata_preparation.ipynb<\/a>.<\/p>\n<h4>\u0418\u043c\u043f\u043e\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/h4>\n<p>\u0414\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 matplotlib \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0431\u043d\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"python\">import pandas as pd import numpy as np import matplotlib.pyplot as plt from tqdm import tqdm  import geopandas as gpd import shapely from shapely.ops import snap, unary_union from shapely.geometry.polygon import Polygon from shapely.geometry.multipolygon import MultiPolygon<\/code><\/pre>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"python\">gdf = gpd.read_file(\"data\/russia_regions.geojson\") gdf.info()             gdf.sample(4)<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>&lt;class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 85 entries, 0 to 84 Data columns (total 4 columns):  #   Column            Non-Null Count  Dtype    ---  ------            --------------  -----     0   region            85 non-null     object    1   federal_district  85 non-null     object    2   population        85 non-null     int64     3   geometry          85 non-null     geometry dtypes: geometry(1), int64(1), object(2) memory usage: 2.8+ KB<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cd7\/238\/bba\/cd7238bba8afa3b7130639456d43de74.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438\" width=\"1111\" height=\"213\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cd7\/238\/bba\/cd7238bba8afa3b7130639456d43de74.png\"\/><\/p>\n<div><figcaption><em>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431\u00a0\u043e\u0434\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446\u00a0\u2014 \u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0430 <em>geometry<\/em> GeoPandas \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u00a0\u043f\u0430\u043d\u0434\u0430\u0441\u043e\u0432\u0441\u043a\u0438\u0445. \u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 <em>Polygon <\/em>\u0438\u043b\u0438 <em>MultiPolygon<\/em>. \u0412\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c. \u0412\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041e\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 Polygon. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u0432\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430 \u0438\u043b\u0438\u00a0\u043f\u043e\u00a0\u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<h4>\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h4>\n<p>\u0421\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e GeoPandas \u043c\u043e\u0436\u043d\u043e \u0441\u00a0\u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u00a0\u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u0440\u0442\u0430 \u0432\u00a0\u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u043a\u0430\u043a\u00a0\u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u0432\u00a0\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435.<\/p>\n<pre><code class=\"python\">gdf.plot() plt.title('Default. Cylindric CRS');<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6f3\/391\/850\/6f339185040c0efda3c49ffb3785d5e0.png\" alt=\"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0432 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\" title=\"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0432 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\" width=\"536\" height=\"166\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f3\/391\/850\/6f339185040c0efda3c49ffb3785d5e0.png\"\/><\/p>\n<div><figcaption><em>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0432 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0433\u043b\u0430\u0437\u0430\u00a0\u2014 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u043e 180\u00a0\u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d\u043e\u043c \u043e\u0442\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u0427\u0443\u043a\u043e\u0442\u043a\u0438. \u0412\u0442\u043e\u0440\u0430\u044f\u00a0\u2014 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0438\u0437\u2011\u0437\u0430 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0448\u0443 \u0440\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043d\u0435\u0439 \u0438 \u043f\u043e\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0435\u0439 \u043a\u0430\u043a\u2011\u0442\u043e. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0418 \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e GeoPandas. <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 GeoPandas \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <a href=\"https:\/\/epsg.org\/home.html\" rel=\"noopener noreferrer nofollow\">EPSG<\/a>, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0\u043d\u0438\u043c\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u00a0\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1024\u00a0\u0434\u043e 32\u00a0767. \u0422\u0430\u043a\u0436\u0435 \u0441\u044e\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442\u0441\u0447\u0451\u0442\u0430 <a href=\"https:\/\/www.esri.com\/en-us\/home\" rel=\"noopener noreferrer nofollow\">ESRI<\/a>. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0432\u00a0\u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0448\u0438\u0440\u043e\u0442\u044b \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u044b \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u0434 EPSG:4326.<\/p>\n<p>\u042f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0438 \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0451\u043b \u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0420\u043e\u0441\u0441\u0438\u044e \u0441\u043d\u043e\u0432\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u0434\u044b EPSG \u0438\u043b\u0438\u00a0ESRI \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/epsg.io\/\" rel=\"noopener noreferrer nofollow\">epsg.io<\/a>. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 4\u00a0\u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<pre><code class=\"python\">crss = ['EPSG:3576', 'EPSG:5940', 'ESRI:102027', 'EPSG:32646'] fig = plt.figure() for i, crs in enumerate(crss):     ax = fig.add_subplot(2, 2, i+1)     gdf.to_crs(crs).plot(ax=ax)     ax.set_title(crs) plt.tight_layout() plt.show()<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e45\/62b\/84f\/e4562b84fe079f7fa6f410d410b03ee7.png\" alt=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043e\u0442\u0441\u0447\u0451\u0442\u0430\" title=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043e\u0442\u0441\u0447\u0451\u0442\u0430\" width=\"856\" height=\"566\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e45\/62b\/84f\/e4562b84fe079f7fa6f410d410b03ee7.png\"\/><\/p>\n<div><figcaption><em>\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043e\u0442\u0441\u0447\u0451\u0442\u0430<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a\u00a0\u0438\u0437\u00a0\u043a\u043e\u043d\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u0430\u0440\u0442! \u0415\u0451 \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044e. <\/p>\n<pre><code class=\"python\">gdf = gdf.to_crs('EPSG:32646')<\/code><\/pre>\n<p>\u041f\u043e\u00a0\u0433\u043e\u0440\u044f\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u0440\u0430\u0437\u0434\u0440\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0427\u0443\u043a\u043e\u0442\u043a\u0438 \u0432\u00a0\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u0435\u0433\u0443 \u043f\u043e\u00a0\u0446\u0438\u043a\u043b\u0443 \u043f\u043e\u00a0\u0432\u0441\u0435\u043c \u043f\u0430\u0440\u0430\u043c \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044e \u0438\u0445 \u0441\u00a0\u0434\u043e\u043f\u0443\u0441\u043a\u043e\u043c \u0432 100\u00a0\u0435\u0434\u0438\u043d\u0438\u0446 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <em>.snap(). <\/em>\u041f\u043e\u0441\u0442\u0440\u043e\u044e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0434\u043e\u00a0\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">CHUK = '\u0427\u0443\u043a\u043e\u0442\u0441\u043a\u0438\u0439 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043e\u043a\u0440\u0443\u0433'  gdf.loc[gdf.region == CHUK].plot(figsize=(6,6), facecolor=\"none\") plt.show()  # \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044b\u0445 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0427\u0443\u043a\u043e\u0442\u043a\u0438 new_chuk = [] chuk_geoms = gdf.loc[gdf.region == CHUK, 'geometry'].values[0].geoms  # \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u043c \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043c\u0435\u043d\u0435\u0435 100 \u0435\u0434\u0438\u043d\u0438\u0446 for i, g in enumerate(chuk_geoms):     new_g = g     for j in range(len(chuk_geoms)):         new_g = snap(new_g, chuk_geoms[j], 100)     new_chuk.append(new_g) new_chuk = unary_union(MultiPolygon(new_chuk)) gdf.loc[gdf.region == CHUK, 'geometry'] = new_chuk  gdf.loc[gdf.region == CHUK].plot(figsize=(6,6), facecolor=\"none\") plt.show();<\/code><\/pre>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/194\/2ec\/e56\/1942ece56addbb72c6d75b0f36b1c437.png\" alt=\"\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0427\u0443\u043a\u043e\u0442\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\" title=\"\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0427\u0443\u043a\u043e\u0442\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\" width=\"472\" height=\"286\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/194\/2ec\/e56\/1942ece56addbb72c6d75b0f36b1c437.png\"\/><\/p>\n<div><figcaption><em>\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0427\u0443\u043a\u043e\u0442\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/em><\/figcaption><\/div>\n<\/figure>\n<h4>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438<\/h4>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u0430\u0440\u0442 \u2013 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0427\u0435\u043c \u00ab\u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0435\u0439\u00bb \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u0435\u043c \u0434\u043e\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0430. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u0435 Plotly, \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0442\u043e\u0447\u0435\u043a \u043c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e. \u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e: \u0443\u043f\u0440\u043e\u0449\u0430\u0442\u044c! \u0412\u0435\u0434\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043a\u0430\u0440\u0442\u043e\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u00ab\u043b\u0430\u0433\u0430\u0435\u0442\u00bb. \u0414\u0430 \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043d\u043e\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <em>.simplify()<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>tolerance, <\/em>\u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0423\u043f\u0440\u043e\u0449\u0443 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0434\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0432 500 \u0435\u0434\u0438\u043d\u0438\u0446.<\/p>\n<pre><code class=\"python\">i = 61 # \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c tol = 500 print(f\"\u0422\u043e\u0447\u0435\u043a {shapely.get_num_coordinates(gdf.geometry[i])}\")  display(gdf.geometry[i]) print(f'\u0422\u043e\u0447\u0435\u043a {shapely.get_num_coordinates(gdf.geometry[i].simplify(tol))}')  display(gdf.geometry[i].simplify(tol))<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3f3\/9a0\/665\/3f39a06652fc692c9b2a889478084c09.png\" alt=\"\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0438 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438\" title=\"\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0438 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438\" width=\"641\" height=\"293\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3f3\/9a0\/665\/3f39a06652fc692c9b2a889478084c09.png\"\/><\/p>\n<div><figcaption><em>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0438 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u043e\u0441\u044c \u0432 30\u00a0\u0440\u0430\u0437. \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u043b\u0430, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0438 \u043f\u043e\u0434\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0443\u0442. \u041d\u0435\u00a0\u0432\u043e\u00a0\u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043e\u00a0\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u043d\u043e\u00a0\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0432\u00a0\u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0432\u0441\u0435\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u043e\u0434\u0443\u043b\u044c tqdm \u0434\u043b\u044f\u00a0\u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">def prepare_regions(gdf, area_thr=100e6, simplify_tol=500):     \"\"\"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e          - \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0441 \u0434\u043e\u043f\u0443\u0441\u043a\u043e\u043c simplify_tol     - \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0441 \u043f\u043b\u043e\u0449\u0430\u0434\u044c\u044e \u043c\u0435\u043d\u0435\u0435 area_thr     \"\"\"     gdf_ = gdf.copy()          # \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043b\u044f \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043f\u043e \u043f\u043b\u043e\u0449\u0430\u0434\u0438     gdf_['area'] = gdf_.geometry.apply(lambda x: x.area)      # \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b     tqdm.pandas(desc='\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432')     gdf_.geometry = gdf_.geometry.progress_apply(lambda geometry:          MultiPolygon([p for p in geometry.geoms if p.area > area_thr])              if type(geometry) == MultiPolygon else geometry     )          # \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438     gdf_.geometry = gdf_.geometry.simplify(simplify_tol)          geoms = gdf_.geometry.values     pbar = tqdm(enumerate(geoms), total=len(geoms))     pbar.set_description_str('\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0441\u043b\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f')     # \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0447\u0430\u0449\u0438\u043c \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430\u043c \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b     for i, g in pbar:         g1 = g         for g2 in geoms:             if g1.distance(g2) &lt; 100:                 g1 = snap(g1, g2, 800)         geoms[i] = g1     gdf_.geometry = geoms          # \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u043f\u043b\u043e\u0449\u0430\u0434\u0438     gdf_ = gdf_.sort_values(by='area', ascending=False).reset_index(drop=True)           return gdf_.drop(columns=['area'])<\/code><\/pre>\n<p><em>prepare_regions<\/em> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043a\u043e\u0434\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 <em>gdf,<\/em> \u043f\u043e\u0440\u043e\u0433 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 <em>area_thr<\/em> \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 <em>simplify_tol.<\/em> \u041f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 <em>area_thr<\/em> \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b:<\/p>\n<ul>\n<li>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043b\u044f \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043f\u043e \u043f\u043b\u043e\u0449\u0430\u0434\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0430\u043c\u044b\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0410\u0434\u044b\u0433\u0435\u044e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435 \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0441\u043a\u043e\u0433\u043e \u043a\u0440\u0430\u044f, \u0442\u043e \u043e\u043d\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043c \u0437\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u2013 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430, \u0438\u0445 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0423\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u0441\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0431\u044b\u043b\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u00ab\u0434\u044b\u0440\u00bb.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c\u00a0\u2014 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0448\u044d\u0439\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f Plotly. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 GeoJSON \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0441\u043b\u043e\u044f\u0445 \u0442\u0438\u043f\u0430 <em>go.layout.Geo<\/em>, \u043e\u0442\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <em>go.Scatter,<\/em> \u0430\u00a0\u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 x \u0438 y. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u2011\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <em>geom2shape<\/em>.<\/p>\n<pre><code class=\"python\">def geom2shape(g):     \"\"\"\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0432 plotly-readable \u0448\u044d\u0439\u043f\u044b              \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 Polygon \u0438\u043b\u0438 MultiPolygon \u0438\u0437 geopandas,      \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 pd.Series \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 x \u0438 y     \"\"\"     # \u0415\u0441\u043b\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043e\u043b\u0438\u0433\u043e\u043d, \u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u043b\u0438\u0433\u043e\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044f \u0438\u0445 None'\u0430\u043c\u0438     if type(g) == MultiPolygon:         x, y = np.array([[], []])         for poly in g.geoms:             x_, y_ = poly.exterior.coords.xy             x, y = (np.append(x, x_), np.append(y, y_))             x, y = (np.append(x, None), np.append(y, None))         x, y = x[:-1], y[:-1]     # \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b     elif type(g) == Polygon:               x, y = np.array(g.exterior.coords.xy)     # \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b     else:         x, y = np.array([[], []])     return pd.Series([x,y])<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>None<\/em>. \u0422\u0430\u043a plotly \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0439 \u043a\u043e\u043d\u0442\u0443\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0435\u0434\u0438\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c. \u041d\u0435\u00a0\u0431\u0430\u0433, \u0430\u00a0\u0444\u0438\u0447\u0430! \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u00a0\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0443, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"python\"># \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438    regions = prepare_regions(gdf) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0432 \u0448\u0435\u0439\u043f\u044b    regions[['x','y']] = regions.geometry.progress_apply(geom2shape) # \u0417\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u0434\u0438\u0441\u043a    regions.to_parquet('data\/russia_regions.parquet')<\/code><\/pre>\n<h2>\u0421\u043b\u043e\u0439-\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430 \u043a\u0430\u0440\u0442\u044b<\/h2>\n<p><a class=\"anchor\" name=\"%D1%81%D0%BB%D0%BE%D0%B9\" id=\"\u0441\u043b\u043e\u0439\"><\/a><\/p>\n<p>\u0412\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u043e\u0439\u2011\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0443 \u0434\u043b\u044f\u00a0\u043a\u0430\u0440\u0442\u044b. \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0443 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <em>mapFigure<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u043a\u043b\u0430\u0441\u0441\u0430 \u0444\u0438\u0433\u0443\u0440\u044b Plotly\u00a0\u2014 <em>go.Figure. <\/em>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e \u043f\u043e\u0434\u043c\u043e\u0434\u0443\u043b\u044c <em>plotly.graph_objects<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0444\u0438\u0433\u0443\u0440. \u0412\u00a0\u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f <a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/fc2a80c1304ed9ad87a8b773ab9b40bc2688efc7\/map_figure.py\" rel=\"noopener noreferrer nofollow\">map_figure.py<\/a>. \u041f\u043e\u043c\u0438\u043c\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <em>mapFigure <\/em>\u0432\u00a0\u043d\u0451\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>convert_crs <\/em>\u0434\u043b\u044f\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u00a0\u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 <em>x_arr<\/em>, <em>y_arr<\/em> \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e. \u041e\u043d\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0435. \u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0\u0443 <em>go.Figure<\/em> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041d\u043e\u00a0\u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0430\u00a0\u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043a\u0430\u0440\u0442\u043e\u0439, \u043a\u0430\u043a\u00a0\u0441\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u043c <em>go.Figure<\/em>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">'''\u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0441\u043b\u043e\u044f \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438'''  import pandas as pd import geopandas as gpd import plotly.graph_objects as go from shapely.geometry import Point  REGIONS = pd.read_parquet(\"data\/russia_regions.parquet\")  def convert_crs(x_arr, y_arr, to_crs='EPSG:32646', from_crs=\"EPSG:4326\"):     \"\"\"\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 x_arr \u0438 y_arr     \u0438\u0437 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0442\u0441\u0447\u0451\u0442\u0430 from_crs \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 to_crs     \"\"\"     data = [Point(x,y) for x,y in zip(x_arr, y_arr)]     pts = gpd.GeoSeries(data, from_crs).to_crs(to_crs)          return pts.x, pts.y  class mapFigure(go.Figure):     \"\"\" \u0428\u0430\u0431\u043b\u043e\u043d \u0444\u0438\u0433\u0443\u0440\u044b \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438     \"\"\"     def __init__(self, # \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b plotly         data=None, layout=None, frames=None, skip_invalid=False,          **kwargs # \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b (\u0441\u043c. \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043a plotly.graph_objects.Figure())     ):         # \u0441\u043e\u0437\u0434\u0430\u0451\u043c plotl\u0443 \u0444\u0438\u0433\u0443\u0440\u0443 \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438         super().__init__(data, layout, frames, skip_invalid, **kwargs)          # \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432         for i, r in REGIONS.iterrows():             self.add_trace(go.Scatter(x=r.x, y=r.y,                                       name=r.region,                                       text=r.region,                                       hoverinfo=\"text\",                                       line_color='grey',                                       fill='toself',                                       line_width=1,                                       fillcolor='lightblue',                                       showlegend=False             ))                  # \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043e\u0441\u0438, \u0443\u0440\u0430\u0432\u043d\u044f\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043f\u043e \u043e\u0441\u044f\u043c         self.update_xaxes(visible=False)         self.update_yaxes(visible=False, scaleanchor=\"x\", scaleratio=1)          # \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u0440\u0442\u0430 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0444\u0438\u0433\u0443\u0440\u044b         self.update_layout(showlegend=False, dragmode='pan',                            width=800, height=450,                             margin={'l': 10, 'b': 10, 't': 10, 'r': 10}) <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0432\u00a0\u043c\u0435\u0442\u043e\u0434\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430. \u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0431\u043b\u043e\u043a \u0441\u00a0\u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432. \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u043e\u00a0\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u043d\u0430\u00a0\u0444\u0438\u0433\u0443\u0440\u0443 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b. \u041f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><em>x,y\u00a0\u2014 <\/em>\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u0448\u044d\u0439\u043f\u044b \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>name \u2014<\/em> \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p><em>text\u00a0\u2014 <\/em>\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u0438\u00a0\u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0430\u00a0\u043e\u0431\u044a\u0435\u043a\u0442;<\/p>\n<\/li>\n<li>\n<p><em>hoverinfo \u2011<\/em> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u00a0\u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438. \u0412\u00a0\u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <em>text;<\/em><\/p>\n<\/li>\n<li>\n<p><em>line_color, line_width\u00a0\u2014 <\/em>\u0446\u0432\u0435\u0442 \u0438 \u0448\u0438\u0440\u0438\u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446;<\/p>\n<\/li>\n<li>\n<p><em>fill\u00a0\u2014 <\/em>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u00a0\u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c; \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u00abtoself\u00bb \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u043e\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u00a0\u0441\u0432\u043e\u0438\u0445 \u0433\u0440\u0430\u043d\u0438\u0446;<\/p>\n<\/li>\n<li>\n<p><em>fillcolor\u00a0\u2014 <\/em>\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0446\u0432\u0435\u0442\u0430 \u0437\u0430\u043b\u0438\u0432\u043a\u0438; <\/p>\n<\/li>\n<li>\n<p><em>showlegend \u2014<\/em> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u00a0\u043b\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>name<\/em> \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u043e\u043d\u0443 \u043d\u0430\u00a0\u0441\u043b\u043e\u0435 \u043a\u0430\u0440\u0442\u044b, \u0435\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0412\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0431\u043b\u043e\u043a\u0435 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c.<\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c mapFigure<\/h2>\n<p><a class=\"anchor\" name=\"%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\" id=\"\u0440\u0430\u0431\u043e\u0442\u0430\"><\/a><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432\u00a0Jupyter \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 <a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/fc2a80c1304ed9ad87a8b773ab9b40bc2688efc7\/russia_map.ipynb\" rel=\"noopener noreferrer nofollow\">russia_map.ipynb<\/a>.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u044e \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u044b.<\/p>\n<pre><code class=\"python\">from map_figure import mapFigure, convert_crs  import plotly.graph_objects as go import plotly.express as px import pandas as pd<\/code><\/pre>\n<h4>\u0412\u0438\u0434 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u044e \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u0430\u0440\u0442\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e \u0435\u0451.<\/p>\n<pre><code class=\"python\">russia_map = mapFigure() russia_map.show()<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ade\/3ae\/3e5\/ade3ae3e551dbadfe459543672d1ecac.png\" alt=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\" title=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\" width=\"991\" height=\"596\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ade\/3ae\/3e5\/ade3ae3e551dbadfe459543672d1ecac.png\"\/><\/p>\n<div><figcaption><em>\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 Plotly go.Figure c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u0444\u0438\u0433\u0443\u0440\u0435, \u0437\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0418\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u0430 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430. \u041f\u0440\u0438\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430. \u0422\u0430\u043a \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0432\u00a0\u043c\u043e\u0451\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0438 \u0438\u0445 \u043a\u043e\u043d\u0442\u0443\u0440\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <em>name<\/em> \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0444\u0438\u0433\u0443\u0440\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445. <\/p>\n<h4>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f<\/h4>\n<p>\u0412\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u044e \u0446\u0432\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0443 \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u00a0\u043d\u0451\u043c, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u0430 \u0432\u043e\u00a0\u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0435. \u0426\u0432\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u0430. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u0440\u0435\u0441\u0435\u0442\u044b \u043f\u0430\u043b\u0438\u0442\u0440 \u0438\u0437 <em>px.colors.qualitative.<\/em><\/p>\n<pre><code class=\"python\">import pandas as pd import plotly.express as px  regions = pd.read_parquet(\"data\/russia_regions.parquet\") fo_list = list(regions['federal_district'].unique()) colors = px.colors.qualitative.Pastel1  for i, r in regions.iterrows():     popul_text = f\"\u041d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435: &lt;b>{r.population:_} &lt;\/b>\".replace('_', ' ')     text = f'&lt;b>{r.region}&lt;\/b>&lt;br>{r.federal_district} \u0424\u041e&lt;br>{popul_text}'     russia_map.update_traces(selector=dict(name=r.region),         text=text,         fillcolor=colors[fo_list.index(r.federal_district)]) russia_map.show()<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c17\/346\/2a8\/c173462a89b81cb2d16754eddbf6d950.png\" alt=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0433\u0430\u043c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430\" title=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0433\u0430\u043c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430\" width=\"991\" height=\"590\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c17\/346\/2a8\/c173462a89b81cb2d16754eddbf6d950.png\"\/><\/p>\n<div><figcaption><em>\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0433\u0430\u043c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430<\/em><\/figcaption><\/div>\n<\/figure>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u0442\u043e\u0447\u043a\u0438 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0443, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.<\/p>\n<pre><code class=\"python\">df = pd.read_parquet(\"data\/russia_cities_population.parquet\") df.sample(4)<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/936\/d8d\/57a\/936d8d57a3c46eb0122ad2deeba42d63.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438\" width=\"835\" height=\"142\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/936\/d8d\/57a\/936d8d57a3c46eb0122ad2deeba42d63.png\"\/><\/p>\n<div><figcaption><em>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u00a0\u0437\u0430\u0431\u044b\u0432\u0430\u044e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0432\u00a0\u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>convert_crs<\/em>. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u00a0\u0444\u0438\u0433\u0443\u0440\u0443 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a\u00a0\u044f \u0434\u0435\u043b\u0430\u043b\u00a0\u0431\u044b \u044d\u0442\u043e \u0432\u00a0go.<em>Figure<\/em>.<\/p>\n<pre><code class=\"python\"># \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u043a\u0430\u0440\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 df['x'], df['y'] = convert_crs(df.lon, df.lat)  # \u043f\u0430\u043b\u0438\u0442\u0440\u0430 \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0442\u043e\u0447\u0435\u043a cities_palette = {fd: px.colors.qualitative.Dark2_r[i] for i, fd in enumerate(df.federal_district.unique())}  # \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u0444\u0438\u0433\u0443\u0440\u0443 russia_map.add_trace(go.Scatter(     x=df.x, y=df.y, name='\u0433\u043e\u0440\u043e\u0434\u0430',     text=\"&lt;b>\"+df.city+\"&lt;\/b>&lt;br>\u041d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435 &lt;b>\"+df.population.astype('str')+\"&lt;\/b>\",     hoverinfo=\"text\", showlegend=False, mode='markers',     marker_size=df.population\/1e4, marker_sizemode='area', marker_sizemin=3,     marker_color=df.federal_district.map(cities_palette) ))  russia_map.show()<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ce9\/050\/e3e\/ce9050e3eb08d5b25228ca49b893ba32.png\" alt=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432\" title=\"\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432\" width=\"986\" height=\"590\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce9\/050\/e3e\/ce9050e3eb08d5b25228ca49b893ba32.png\"\/><\/p>\n<div><figcaption><em>\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u0431\u043b\u0438\u0436\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/462\/fdc\/be2\/462fdcbe2605a7aace891461054cdcab.png\" alt=\"\u041f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432\" title=\"\u041f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432\" width=\"990\" height=\"594\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/462\/fdc\/be2\/462fdcbe2605a7aace891461054cdcab.png\"\/><\/p>\n<div><figcaption><em>\u041f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u043a\u00a0\u0432\u0438\u0434\u043d\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0438\u0447\u0435\u043c \u043d\u0435\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0Plotly.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<p>\u0418\u0442\u0430\u043a, \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0431\u0435\u0437\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c,\u00a0\u2014 \u043d\u0435\u00a0\u043c\u0438\u0444, \u0430\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0\u043f\u043e\u043c\u0438\u043c\u043e \u0433\u0440\u0430\u043d\u0438\u0446 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u043d\u044b\u0435 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (\u0440\u0435\u043a\u0438, \u043e\u0437\u0451\u0440\u0430) \u0433\u043e\u0440\u043e\u0434\u0430, \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0412\u00a0\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0435\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0\u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043e\u00a0\u0443\u0440\u043e\u0432\u043d\u044f \u0443\u043b\u0438\u0446, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432\u00a0GeoJSON \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0414\u0430, \u0432\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u0430, \u043d\u043e\u00a0\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0442\u044c. \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0434\u0445\u043e\u0434 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438, \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e Plotly \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u0441\u00a0\u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u043e\u00a0\u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0435\u0437\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u0430\u0440\u0442\u0443 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0434\u043b\u044f\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u043e\u043d\u043b\u0430\u0439\u043d\u2011\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430\u00a0\u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435! \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0438 \u0438\u0434\u0435\u044f\u043c \u043f\u043e\u00a0\u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e.<\/p>\n<\/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\/752406\/\"> https:\/\/habr.com\/ru\/articles\/752406\/<\/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<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>\u041d\u0430\u00a0\u0441\u0432\u044f\u0437\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a <a href=\"https:\/\/newtechaudit.ru\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 NTA<\/a> \u041c\u0430\u043a\u0441\u0438\u043c \u0410\u043b\u0451\u0448\u0438\u043d.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u00a0python \u043d\u0435\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430: \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Folium \u0438\u043b\u0438\u00a0Bokeh), \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u00ab\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445\u00bb \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a\u00a0\u043d\u0430\u00a0\u043b\u0430\u0434\u043e\u043d\u0438! <\/p>\n<p>\u041d\u043e\u00a0\u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u0430\u00a0\u0432\u00a0\u0441\u0435\u0442\u0438, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435, \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c? \u0412\u00a0\u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 Plotly \u0438 GeoPandas. \u041d\u043e\u00a0\u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0440\u044f\u0434 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442. \u0412\u00a0\u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0448\u0430\u0433 \u0437\u0430\u00a0\u0448\u0430\u0433\u043e\u043c \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0420\u043e\u0441\u0441\u0438\u0438 \u043f\u043e\u00a0\u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e Plotly, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437\u00a0\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u043c\u0441.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u043e\u0441\u0442\u0443<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"#%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%B5%D0%B6%D0%B4%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%81%D0%BB%D0%BE%D0%B9\" rel=\"noopener noreferrer nofollow\">\u0421\u043b\u043e\u0439-\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430 \u043a\u0430\u0440\u0442\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c mapFigure<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\">\u043d\u0438\u0435&#187;><\/a><\/p>\n<p>\u0412\u00a0\u044d\u043f\u043e\u0445\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u0432\u0430\u0436\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0435\u00a0\u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u043b\u043e\u0442\u043d\u0435. \u041f\u043e\u0442\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0432\u00a0\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u0445.<\/p>\n<p><a href=\"https:\/\/plotly.com\/python\/\" rel=\"noopener noreferrer nofollow\">Plotly<\/a>\u00a0\u2014 \u043c\u043e\u0449\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u00a0Python, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u0430\u0440\u0442\u044b. \u041e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 Plotly \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e\u00a0\u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a Python, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a\u00a0Pandas \u0438 NumPy. \u0412\u00a0Plotly \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043a\u0430\u0440\u0442\u0430\u043c\u0438 (<a href=\"https:\/\/plotly.com\/python\/maps\/\" rel=\"noopener noreferrer nofollow\">\u0441\u043c. \u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/a>), \u043d\u043e\u00a0\u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c, \u043c\u043d\u0435\u00a0\u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0442\u0438\u043f\u0430 Pandas \u0438 NumPy \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 <a href=\"https:\/\/geopandas.org\/en\/stable\/\" rel=\"noopener noreferrer nofollow\">GeoPandas<\/a>. \u042d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u00a0\u0433\u0435\u043e\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u00a0Python \u0437\u0430\u00a0\u0441\u0447\u0451\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432\u00a0Pandas. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u0442\u0435\u00a0\u0436\u0435 \u043f\u0430\u043d\u0434\u044b, \u043d\u043e\u00a0\u0437\u043d\u0430\u044e\u0449\u0438\u0435 \u0442\u043e\u043b\u043a \u0432\u00a0\u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438. GeoPandas \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u00a0\u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Shapely.<\/p>\n<h2>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c<\/h2>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%B5%D0%B6%D0%B4%D0%B5\" id=\"\u043f\u0440\u0435\u0436\u0434\u0435\">\u0434\u0435&#187;><\/a><\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043b\u043e\u0439\u2011\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u00a0Plotly \u043a\u043b\u0430\u0441\u0441 <a href=\"https:\/\/plotly.com\/python\/reference\/layout\/geo\" rel=\"noopener noreferrer nofollow\">plotly.graph_objects.layout.Geo<\/a>, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u00a0\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u043a\u0430\u0440\u0442\u044b. <\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0441\u00a0\u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430; <\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0431\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f <a href=\"https:\/\/plotly.com\/python\/reference\/layout\/geo\/#layout-geo-scope\" rel=\"noopener noreferrer nofollow\">\u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439<\/a>: <em>\u00abafrica\u00bb, \u00abasia\u00bb, \u00abeurope\u00bb, \u00abnorth america\u00bb, \u00absouth america\u00bb, \u00abusa\u00bb, \u00abworld\u00bb; <\/em><\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u00ab\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445\u00bb \u0441\u0438\u0441\u0442\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0420\u043e\u0441\u0441\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0434\u043b\u044f\u00a0\u043c\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u00ad\u2011 \u0433\u043b\u0430\u0432\u043d\u044b\u0439. \u0418\u0437\u00a0\u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u0441\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0420\u043e\u0441\u0441\u0438\u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c\u00a0\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0435 \u0432\u0441\u0435\u0433\u043e \u043c\u0438\u0440\u0430. \u0417\u0434\u0435\u0441\u044c \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u043e\u0438 \u0434\u043b\u044f\u00a0\u0410\u0437\u0438\u0438, \u0415\u0432\u0440\u043e\u043f\u044b, \u043d\u043e\u00a0\u043d\u0430\u0448\u0430 \u0448\u0438\u0440\u043e\u043a\u0430\u044f \u0438 \u043d\u0435\u043e\u0431\u044a\u044f\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0451\u0440\u043b\u0430\u0441\u044c \u043d\u0430\u00a0\u043e\u0431\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0432\u0435\u0442\u0430. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u00a0Plotly \u043a\u0430\u0440\u0442\u044b \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0432\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (\u0448\u0438\u0440\u043e\u0442\u0430 \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u0430). \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 <a href=\"https:\/\/plotly.com\/python\/reference\/layout\/geo\/#layout-geo-projection\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438<\/a>, \u043d\u043e\u00a0\u043e\u043d\u0438 \u0434\u0430\u043b\u0435\u043a\u0438 \u043e\u0442\u00a0\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u043d\u0430\u00a0\u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438. \u041a\u043e\u0433\u0434\u0430\u00a0\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0435 \u0420\u043e\u0441\u0441\u0438\u0438, \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u043a\u0430\u043a\u00a0\u0432\u00a0\u043a\u043e\u043d\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0430\u0445.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u0430\u043b\u0435\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043e\u0431\u0430\u0432\u043b\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a. <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0447\u0435\u043a\u043f\u043e\u0438\u043d\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u043a\u0430\u0440\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0441\u043b\u043e\u044f-\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u043a\u0430\u0440\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c, \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0433\u043e\u0440\u043e\u0434\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h2>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p><a class=\"anchor\" name=\"%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\">\u043d\u0438\u0435&#187;><\/a><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b. \u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 GeoJSON. <\/p>\n<p>GeoJSON\u00a0\u2014 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f\u00a0\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0430\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430\u00a0\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u043a\u0430\u043a: <em>Point, LineString, Polygon, MultiPoint, MultiLineString \u0438 MultiPolygon<\/em>.<\/p>\n<p>\u0412\u00a0\u043c\u043e\u0451\u043c \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0421\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 (<a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/main\/data\/russia_regions.geojson\" rel=\"noopener noreferrer nofollow\">russia_regions.geojson<\/a>): \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430 2021\u00a0\u0433\u043e\u0434, \u0432\u0437\u044f\u0442\u044b \u0438\u0437 <a href=\"https:\/\/github.com\/timurkanaz\/Russia_geojson_OSM\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a>. \u0418\u043c\u0435\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u0435 \u0441\u00a0\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u00a0\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B0%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%83%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438<\/a> \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u00a0\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u043e\u0432 (<a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/main\/data\/russia_cities_population.parquet\" rel=\"noopener noreferrer nofollow\">russia_cities_population.parquet<\/a>): \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u0430, \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u0430, \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 (\u0432\u0437\u044f\u0442\u044b \u0438\u0437\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e <a href=\"https:\/\/github.com\/pensnarik\/russian-cities\" rel=\"noopener noreferrer nofollow\">\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430<\/a>).<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" id=\"\u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430\">\u0430\u0431\u043e\u0442\u043a\u0430&#187;<\/a><\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u044f \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432\u00a0Jupyter \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 <a href=\"https:\/\/github.com\/hairymax\/offline_russia_plotly\/blob\/main\/geodata_preparation.ipynb\" rel=\"noopener noreferrer nofollow\">geodata_preparation.ipynb<\/a>.<\/p>\n<h4>\u0418\u043c\u043f\u043e\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/h4>\n<p>\u0414\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 matplotlib \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0431\u043d\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"python\">import pandas as pd import numpy as np import matplotlib.pyplot as plt from tqdm import tqdm  import geopandas as gpd import shapely from shapely.ops import snap, unary_union from shapely.geometry.polygon import Polygon from shapely.geometry.multipolygon import MultiPolygon<\/code><\/pre>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"python\">gdf = gpd.read_file(\"data\/russia_regions.geojson\") gdf.info()             gdf.sample(4)<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>&lt;class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 85 entries, 0 to 84 Data columns (total 4 columns):  #   Column            Non-Null Count  Dtype    ---  ------            --------------  -----     0   region            85 non-null     object    1   federal_district  85 non-null     object    2   population        85 non-null     int64     3   geometry          85 non-null     geometry dtypes: geometry(1), int64(1), object(2) memory usage: 2.8+ KB<\/code><\/pre>\n<figure class=\"full-width\">\n<div><figcaption><em>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431\u00a0\u043e\u0434\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446\u00a0\u2014 \u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0430 <em>geometry<\/em> GeoPandas \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u00a0\u043f\u0430\u043d\u0434\u0430\u0441\u043e\u0432\u0441\u043a\u0438\u0445. \u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 <em>Polygon <\/em>\u0438\u043b\u0438 <em>MultiPolygon<\/em>. \u0412\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c. \u0412\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041e\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 Polygon. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u0432\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430 \u0438\u043b\u0438\u00a0\u043f\u043e\u00a0\u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<h4>\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h4>\n<p>\u0421\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e GeoPandas \u043c\u043e\u0436\u043d\u043e \u0441\u00a0\u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u00a0\u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u0440\u0442\u0430 \u0432\u00a0\u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u043a\u0430\u043a\u00a0\u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u0432\u00a0\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435.<\/p>\n<pre><code class=\"python\">gdf.plot() plt.title('Default. Cylindric CRS');<\/code><\/pre>\n<figure class=\"full-width\">\n<div><figcaption><em>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0432 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0433\u043b\u0430\u0437\u0430\u00a0\u2014 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u043e 180\u00a0\u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d\u043e\u043c \u043e\u0442\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u0427\u0443\u043a\u043e\u0442\u043a\u0438. \u0412\u0442\u043e\u0440\u0430\u044f\u00a0\u2014 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0438\u0437\u2011\u0437\u0430 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0448\u0443 \u0440\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043d\u0435\u0439 \u0438 \u043f\u043e\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0435\u0439 \u043a\u0430\u043a\u2011\u0442\u043e. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0418 \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e GeoPandas. <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 GeoPandas \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <a href=\"https:\/\/epsg.org\/home.html\" rel=\"noopener noreferrer nofollow\">EPSG<\/a>, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0\u043d\u0438\u043c\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u00a0\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1024\u00a0\u0434\u043e 32\u00a0767. \u0422\u0430\u043a\u0436\u0435 \u0441\u044e\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442\u0441\u0447\u0451\u0442\u0430 <a href=\"https:\/\/www.esri.com\/en-us\/home\" rel=\"noopener noreferrer nofollow\">ESRI<\/a>. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0432\u00a0\u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0448\u0438\u0440\u043e\u0442\u044b \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u044b \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u0434 EPSG:4326.<\/p>\n<p>\u042f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u0438 \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0451\u043b \u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0420\u043e\u0441\u0441\u0438\u044e \u0441\u043d\u043e\u0432\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u0434\u044b EPSG \u0438\u043b\u0438\u00a0ESRI \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/epsg.io\/\" rel=\"noopener noreferrer nofollow\">epsg.io<\/a>. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 4\u00a0\u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<pre><code class=\"python\">crss = ['EPSG:3576', 'EPSG:5940', 'ESRI:102027', 'EPSG:32646'] fig = plt.figure() for i, crs in enumerate(crss):     ax = fig.add_subplot(2, 2, i+1)     gdf.to_crs(crs).plot(ax=ax)     ax.set_title(crs) plt.tight_layout() plt.show()<\/code><\/pre>\n<figure class=\"full-width\">\n<div><figcaption><em>\u0412\u0438\u0434 \u043a\u0430\u0440\u0442\u044b \u0420\u043e\u0441\u0441\u0438\u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043e\u0442\u0441\u0447\u0451\u0442\u0430<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a\u00a0\u0438\u0437\u00a0\u043a\u043e\u043d\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u0430\u0440\u0442! \u0415\u0451 \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044e. <\/p>\n<pre><code class=\"python\">gdf = gdf.to_crs('EPSG:32646')<\/code><\/pre>\n<p>\u041f\u043e\u00a0\u0433\u043e\u0440\u044f\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u0440\u0430\u0437\u0434\u0440\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0427\u0443\u043a\u043e\u0442\u043a\u0438 \u0432\u00a0\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u0435\u0433\u0443 \u043f\u043e\u00a0\u0446\u0438\u043a\u043b\u0443 \u043f\u043e\u00a0\u0432\u0441\u0435\u043c \u043f\u0430\u0440\u0430\u043c \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044e \u0438\u0445 \u0441\u00a0\u0434\u043e\u043f\u0443\u0441\u043a\u043e\u043c \u0432 100\u00a0\u0435\u0434\u0438\u043d\u0438\u0446 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <em>.snap(). <\/em>\u041f\u043e\u0441\u0442\u0440\u043e\u044e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0434\u043e\u00a0\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">CHUK = '\u0427\u0443\u043a\u043e\u0442\u0441\u043a\u0438\u0439 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043e\u043a\u0440\u0443\u0433'  gdf.loc[gdf.region == CHUK].plot(figsize=(6,6), facecolor=\"none\") plt.show()  # \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044b\u0445 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0427\u0443\u043a\u043e\u0442\u043a\u0438 new_chuk = [] chuk_geoms = gdf.loc[gdf.region == CHUK, 'geometry'].values[0].geoms  # \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u043c \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043c\u0435\u043d\u0435\u0435 100 \u0435\u0434\u0438\u043d\u0438\u0446 for i, g in enumerate(chuk_geoms):     new_g = g     for j in range(len(chuk_geoms)):         new_g = snap(new_g, chuk_geoms[j], 100)     new_chuk.append(new_g) new_chuk = unary_union(MultiPolygon(new_chuk)) gdf.loc[gdf.region == CHUK, 'geometry'] = new_chuk  gdf.loc[gdf.region == CHUK].plot(figsize=(6,6), facecolor=\"none\") plt.show();<\/code><\/pre>\n<figure class=\"\">\n<div><figcaption><em>\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0427\u0443\u043a\u043e\u0442\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/em><\/figcaption><\/div>\n<\/figure>\n<h4>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438<\/h4>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u0430\u0440\u0442 \u2013 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0427\u0435\u043c \u00ab\u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0435\u0439\u00bb \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u0435\u043c \u0434\u043e\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0430. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u0435 Plotly, \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0442\u043e\u0447\u0435\u043a \u043c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e. \u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e: \u0443\u043f\u0440\u043e\u0449\u0430\u0442\u044c! \u0412\u0435\u0434\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043a\u0430\u0440\u0442\u043e\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u00ab\u043b\u0430\u0433\u0430\u0435\u0442\u00bb. \u0414\u0430 \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043d\u043e\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <em>.simplify()<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>tolerance, <\/em>\u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0423\u043f\u0440\u043e\u0449\u0443 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0434\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0432 500 \u0435\u0434\u0438\u043d\u0438\u0446.<\/p>\n<pre><code class=\"python\">i = 61 # \u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c tol = 500 print(f\"\u0422\u043e\u0447\u0435\u043a<\/code><\/pre>\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-351249","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/351249","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=351249"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/351249\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=351249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=351249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=351249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}