Задачка на деление. Как разделить город на зоны доставки

90006a2786c15de5f62488ce91492f91

Дано: клиентская база, содержащая адреса доставки первичных бухгалтерских документов, которые нужно ежемесячно развозить поездом-самолетом-курьером. Клиенты — все организации, работающие на территории Самарской области.

Необходимо успеть доставить все документы, да ещё в короткий срок. Почта, курьерская доставка, электронные каналы — все в игре. Самару и другие города доверим курьерской компании, удаленные районы — Почте России, а самых крупных клиентов по Самаре не доверим никому, кроме штатного курьера.

Как распределить адреса доставки, чтобы не гонять курьера с одной части города до другой? Нужно сгруппировать адреса по районам!

Задача: необходимо разделить клиентскую базу на зоны доставки, чтобы можно было делать выборки по районам доставки. При этом будет удобно оформлять путевые листы на каждый день: сегодня курьер едет в Куйбышевский район, завтра в Промышленный, а послезавтра — в Красноглинский. Проблема в том, что в клиентской базе такого признака нет (по крайней мере, пока).
Варианты решения:  

1. Вомьмем выборку самых крупных клиентов с адресами и загрузим данные о них на gooogle-карту. Визуально сгруппируем адреса по районам и составим путевые листы. Недостаткок метода: трудоемкость — каждый раз приходится загружать на карту большое количество адресов, и вручную определять район (вернее, зону доставки).

2. Каждый адрес содержит в себе индекс почтового отделения. Предположим, что каждый адрес можно пропустить через сервис определения района города (например, dadata.ru) и записать результат в отдельном атрибуте клиентской базы («район») для каждого контрагента. Тогда путевой лист можно составлять по выбранному району. Недостаток метода: через сервис нужнопропустить каждый из адресов (как правило, это стоит денег). Далее каждый новый адрес так же необходимо будет соотностить с районом (это дополнительная операция, требующая времени).

3. Предпололим, что можно определить район города с помощью сопоставления адреса с почтовым отделением. Выделим из каждого адреса почтовый индекс, и сопоставим его с районом почтового отделения. Назовем этот метод «Группировкой с производной».

Подготовительная работа — найти адреса почтовых отделений в Самаре. Воспользуемся поиском «почтовые отделения Самары» переходим на сайт naitiko.ru/companies/pochta_rossii/samara содержащий список отделений с адресами в одной таблице. Для каждого почтового отделения определяем район города (спасибо dadata.ru). Дальше — дело техники: сопоставляем почтовый индекс каждого контрагента с индексом почтового отделения. Используя функцию Excel «ВПР», получаем район города для каждого клиента.

PS
В процесс определения районов узнал, что почтовое отделение 443006 обслуживает только один дом — тот, в котором оно находится. Но это не обычный дом. Это здание правительства Самарской области («Белый дом») по адресу Молодогвардейская 210.

3 адреса почтовых отделений dadata не смог правильно распознать. Это стало понятно после сравнения исходного почтового индекса в адресе отделения с индексом, определенным dadata. Вот эти адреса:
443072 г. Самара Московское шоссе д. 13/43 (в 2ГИС указывается так: Московское шоссе 18 км, 13)
443085 г. Самара Центральная улица д. 11 (в 2ГИС адрес указывается так: Центральная (Совхоз Кряж), 11)
443961 г. Самара Льва Толстого — д. 135 (в этом здании располагается Самарский МСЦ — магистральный сортировочный центр — то есть не обычное почтовое отделение; при этом само здание, в котором находятся и другие организации, относится к почтовому отделению 443030). В адресах организаций этот индекс фигурировать не будет.

© Habrahabr.ru