Gleb72442 Опубликовано 11 марта Поделиться Опубликовано 11 марта 25 минут назад, Infeer10 сказал: Вот такую табличку, чем-то похожую на путевой лист, теперь можно сделать по каждому маршруту: покопался по сайту, но не смог найти (или у меня как раз не открывается тот раздел, где расписания маршрутов) илья, поделись, как и откуда собираешь информацию? Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 11 марта Поделиться Опубликовано 11 марта (изменено) Нужны вот эти пять таблиц (укажу их номер в базе данных для удобства): Расписание рейсов (60661) — собственно, сами расписания, где указан код рейса в формате: код маршрута_код рейса_выход, и указано время, код остановки и порядковый номер остановки Остановки (60662)— здесь есть карта остановок, опять же важен код Маршруты (60664) — здесь просто указаны маршруты, но важен их код (который, кстати, указан в адресе ссылки расписания маршрута на t.mos.ru) Рейсы маршрутов (60665) — здесь просто можно посмотреть рейсы маршрутов Календарь маршрутов (60666) — здесь указана принадлежность рейсов дням недели и дата начала и формальная дата окончания действия расписания К сожалению, всё неотсортированно и записано в кодах. И лучше скачать таблицы по кнопке "экспорт", потому что сайт их не выдерживает И, как пример, если вручную хочется посмотреть всё про маршрут, например, 175: Смотрим код маршрута в таблице (60664) или на сайте — это 106 Переходим в расписания (60661), сортируем от А до Я, чтобы было удобнее, и видим формат: 106_3125711_1_701. 106 — код маршрута, 3125711 — код расписания, 1_701 — выход (1-й 701-го рейса) Чтобы понять к чему относится код расписания, смотрим таблицу (60666), сортируем от А до Я и по поиску находим, что 3125711 — код для рейсов по субботам и воскресеньям. Справа можно посмотреть дату начала действия и окончания (формального). Ну и возвращаемся в таблицу (60661), смотрим порядковый номер остановки и время. Если непонятно, что за остановка по коду, то смотрим таблицу (60662). Если просто нужно посмотреть количество выходов, то смотрим таблицу (60665). Изменено 11 марта пользователем Infeer10 2 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 11 марта Поделиться Опубликовано 11 марта А, нашёл один недостаток: у таблицы с расписанием больше миллиона столбцов, и Excel не читает дальше. Может, кто-то знает, как можно решить? Ссылка на комментарий Поделиться на другие сайты Поделиться
Gleb72442 Опубликовано 11 марта Поделиться Опубликовано 11 марта 11 минут назад, Infeer10 сказал: А, нашёл один недостаток: у таблицы с расписанием больше миллиона столбцов, и Excel не читает дальше. Может, кто-то знает, как можно решить? она настолько тяжелая, что на мой ноутбук не скачивается совсем, а на сайте даже не загружается, выдает ошибку Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 11 марта Поделиться Опубликовано 11 марта Только что, Gleb72442 сказал: она настолько тяжелая, что на мой ноутбук не скачивается совсем, а на сайте даже не загружается, выдает ошибку Да, я минут 5 перезагружал сайт, пока, наконец, не началась загрузка) Ссылка на комментарий Поделиться на другие сайты Поделиться
Любезный Опубликовано 11 марта Поделиться Опубликовано 11 марта 18 минут назад, Infeer10 сказал: Может, кто-то знает, как можно решить? Не использовать ёксель. Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 11 марта Поделиться Опубликовано 11 марта Только что, Любезный сказал: Не использовать ёксель. А что сможет прочитать настолько огромную таблицу? Ссылка на комментарий Поделиться на другие сайты Поделиться
Любезный Опубликовано 11 марта Поделиться Опубликовано 11 марта В ёкселе ведь есть ограничение на число столбцов. Нужна спецсофтина для чтения баз данных. Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 11 марта Поделиться Опубликовано 11 марта А вот вопрос, каждый выход должен соответствовать одной машине? Я думал, так и есть, и можно быстро посчитать выходы, но, например, на 27 (автобусном) в будни есть 201 и 702 рейсы, то есть, по идее, две машины, хотя и по реестру, и я всегда наблюдал только одну машину. Или на 1 (автобусном) 301, 302, 703, 704, 705, 706 рейсы, но и по реестру и по наблюдениям машин всегда было 5. У обоих этих маршрутов расписание уехало за пределы таблицы, поэтому понять сложно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Trotil Опубликовано 11 марта Поделиться Опубликовано 11 марта 1 час назад, Infeer10 сказал: А вот вопрос, каждый выход должен соответствовать одной машине? Я думал, так и есть, и можно быстро посчитать выходы, но, например, на 27 (автобусном) в будни есть 201 и 702 рейсы, то есть, по идее, две машины, хотя и по реестру, и я всегда наблюдал только одну машину. Или на 1 (автобусном) 301, 302, 703, 704, 705, 706 рейсы, но и по реестру и по наблюдениям машин всегда было 5. У обоих этих маршрутов расписание уехало за пределы таблицы, поэтому понять сложно. Илья, на 27 автобусном есть днём интервал 40 минут. Конечно, там два выхода. Или на утренний рейс 7:14 даётся полтора часа, в это время второй выход начинает работу в 8:13... Ссылка на комментарий Поделиться на другие сайты Поделиться
Антикарг Опубликовано 11 марта Поделиться Опубликовано 11 марта 4 минуты назад, Trotil сказал: на 27 автобусном есть днём интервал 40 минут. Этот призрак еще существует? Ссылка на комментарий Поделиться на другие сайты Поделиться
Аккорд1970 Опубликовано 11 марта Поделиться Опубликовано 11 марта Существует. Наряду с другими, и посконными, и новосделанными. Это старый призрак, наш, родной. Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 11 марта Поделиться Опубликовано 11 марта А вот, к примеру, маршрут "магистральных" интервалов: В общем, надеюсь, что такое можно будет делать автоматически) Ссылка на комментарий Поделиться на другие сайты Поделиться
Trotil Опубликовано 12 марта Поделиться Опубликовано 12 марта (изменено) Здесь я распишу тезисно, как можно работать с этими данными через СУБД sqlite3. Инструкция будет в виде практического примера поиска расписания по реальному номеру маршрута, инструкцию вы при желании сможете адаптировать под другие задачи поиска. Про автоматизацию будет сказано ниже. Вам понадобятся: DB Browser отсюда: https://sqlitebrowser.org/dl/ Расширение text.dll отсюда: https://github.com/nalgeon/sqlean/releases/tag/0.21.10 (документация: https://antonz.ru/sqlean-text/ ) Этап 1: подготовительный - загружаем данные csv на ПК по ссылкам Ильи - если нет нужных данных csv, их можно сконвертировать из xlsx в csv с помощью сервиса: https://convertio.co/ru/xlsx-csv/ В DB Browser: - создать новую БД - загрузить csv в БД (файл - импорт), "имена столбцов в первой строке" - ДА, и изменить разделитель на ";" (для csv с сайта data.mos.ru) для нашего примера понадобится загрузить data-60661-2024-02-08.csv и data-60664-2024-03-01.csv - загружаем расширение text.dll в DB Browser (инструменты - загрузить расширение - text.dll) В базе данных сцеплены id маршрута, id расписания, номер рейса и номер выхода в одну строку. Для удобства поиска их надо расцепить, для этого мы создадим новые столбцы: alter table "data-60661-2024-02-08" add column route_id text as ( case when trip_id like '%_%' then text_split(trip_id, "_", 1) else trip_id end ); Этот sql-запрос нужно выполнять во вкладке SQL. После этого во вкладке "данные" для таблицы data-60661-2024-02-08 появится дополнительный столбец route_id. Это виртуальный столбец, который генерируется "на лету", используя данные столбца trip_id. Размер БД от этой операции не увеличивается. Функция text_split(str, sep, n) бьет строку по разделителю и возвращает n-ю часть. Ещё замечание - имена таблиц содержат символ "-", поэтому в запросах имена приходится обрамлять кавычками. Если переименовать имена без "-", двойные кавычки можно не писать. Аналогично можно вычленить и добавить столбцы service_id, num_trip, vyhod. Для ускорения по полю route_id можно создать индекс, но можно и не создавать, если вы не знаете, что это такое и как это делать. Базу данных можно сохранить на диск, чтобы не проделывать эти шаги каждый раз. Этап 2: улучшаем человекочитаемость данных В таблице data-60661-2024-02-08 маршруты заданы через id, исправим это. Объединим таблицы data-60661-2024-02-08 и data-60664-2024-03-01 следующим запросом: select * from "data-60661-2024-02-08" join "data-60664-2024-03-01" on "data-60661-2024-02-08".route_id = "data-60664-2024-03-01".route_id или скопируем результат этого запроса в отдельную таблицу, синтаксис: CREATE TABLE name_newtable AS SELECT ... create table copied AS select * from "data-60661-2024-02-08" join "data-60664-2024-03-01" on "data-60661-2024-02-08".route_id = "data-60664-2024-03-01".route_id where "data-60664-2024-03-01".route_short_name = "с962" (в примере строкой where мы дополнительно ограничили выборку маршрутом "c962") Для дальнейшего поиска в DB Browser`e результат лучше скопировать в отдельную таблицу. Этот метод добавляеь столбец route_short_name, по которому можно дополнительно фильтровать данные, см. далее. Этап 3. поиск информации и просмотр информации в DB Browser`e DB Browser имеет такую удобную фичу, как фильтры. Фильтры поддерживают регулярные выражения. С помощью фильтров можно быстро достать только нужные данные и отфильтровать ненужные и результат тут же отобразится в браузере DB. Для примера, я в таблице data-60661-2024-02-08 поставил два фильтра: на stop_sequence установил "=1" (два символа без кавычек) - начальная остановка на trip_id: /^107_.*702$/ символы ^,$ - начало и конец строки комбинация .* - любая последовательность посередине, которая игнорируется после id я поставил _, чтобы не захватить 1071, 1072 и т.д. 107 - это id маршрута 27, результат - DB Browser отобразил 7 рейсов выхода 702 маршрута 27: Результат на скриншоте: Это очень гибкая и наглядная система. Для повышения читаемости колонки в DB Browser можно сортировать. После того, как вы объедините таблицы на этапе 2, фильтровать данные станет ещё проще. Необязательно использовать такие сложные регулярки. Но я бы не рекомендовал объединять всё, так как такая таблица будет занимать несколько десятков гигабайт и работать очень медленно. Строго говоря, это неправильный метод работы, а правильный и профессиональный - через написание запросов select с условиями where и сортировкой order by. Но он требует навыков. Этап 4, автоматизация. К сожалению, этот этап объёмный и его описание нельзя вместить в один пост, и у меня сейчас нет времени сделать такую автоматизацию самостоятельно. Но если коротко, это проще всего сделать на python или на perl. Нужно подготовить базу данных (этапы 1,2) и дополнительные колонки с помощью DB Browser, (дополнительные таблицы не создавать), сохранить, затем написать скрипт на питоне, который: - подключится к этой подготовленной БД - сделает нужные выборки select - выведет в файл / на экран информацию в виде простой html страницы - закроет соединение (в сети есть достаточно подробные учебные руководства по подобной тематике на русском языке). sqlite поддерживает агрегирующие функции, поэтому просто будет посчитать кол-во рейсов, среднее время работы, продолжительность обедов, максимальное число остановок и прочую любознательную статистику. Изменено 12 марта пользователем Trotil 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Димон С. Опубликовано 12 марта Поделиться Опубликовано 12 марта 15 часов назад, Infeer10 сказал: А что сможет прочитать настолько огромную таблицу? Из мелкомягкого - аксес. Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 12 марта Поделиться Опубликовано 12 марта (изменено) Гм, мне кажется, или есть какая-то несправедливость? Вот в примере ниже рейс 707: за рулём примерно 9,5 часов (с учётом дороги в/из парк(а)), почти 5 часов отдых А рейс 301: у одного водителя за рулём 8,5 часов (с дорогой из парка), при этом отдых всего около 2 часов Изменено 12 марта пользователем Infeer10 Ссылка на комментарий Поделиться на другие сайты Поделиться
житель москвы Опубликовано 12 марта Поделиться Опубликовано 12 марта 1 минуту назад, Infeer10 сказал: Гм, мне кажется, или есть какая-то несправедливость? Вот в примере ниже рейс 707: за рулём примерно 9,5 часов (с учётом дороги в/из парк(а)), почти 5 часов отдых А рейс 301: за рулём 8,5 часов (с дорогой из парка), при этом отдых всего около 2 часов Ну дык, как правило, водители ротируются с выхода на выход. И так и должно быть. Несколько выходов, с утра до ночи, и несколько дополнительных с упором на пиковый вывоз. В Подмосковье на жирных маршрутах очень много где так. По Подмосковью я с такими простынями работаю уже под десять лет, и в целом система-то везде в стране одинаковая. Ссылка на комментарий Поделиться на другие сайты Поделиться
Паштет Опубликовано 13 марта Поделиться Опубликовано 13 марта Не соглашусь. Время обеда больше времени круга с запасом (правда не знаю насколько выполняется расписание), так что вполне мог кружок один сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Диспетчер Опубликовано 13 марта Поделиться Опубликовано 13 марта 15 часов назад, Infeer10 сказал: Гм, мне кажется, или есть какая-то несправедливость? Вот в примере ниже рейс 707: за рулём примерно 9,5 часов (с учётом дороги в/из парк(а)), почти 5 часов отдых А рейс 301: у одного водителя за рулём 8,5 часов (с дорогой из парка), при этом отдых всего около 2 часов Раньше на трёхсменке на 8,5-9,5 часов работы вообще мог один обед в 30 минут быть, а сейчас два обеда суммарно около двух часов или более двух часов. Если 301-му сделать дольше продолжительность отдыха, он просто не успеет сделать все рейсы. Что касается 707 выхода, если ему сократить продолжительность отдыха, он последний рейс сделает в межпиковое время, а в вечерний час-пик работать будет некому. Для водителя это может быть неудобно, но для пассажиров лучше так. На транспорте применяется понятие разделения смены на части. Это один из примеров такого разделения. 9 часов назад, Паштет сказал: Не соглашусь. Время обеда больше времени круга с запасом (правда не знаю насколько выполняется расписание), так что вполне мог кружок один сделать. Сделать то он может. Только придётся или какой-то из последующих кругов отменять, или продолжительность рабочего дня выйдет за максимально допустимую. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 14 марта Поделиться Опубликовано 14 марта Кстати, в таблицах нет специальных рейсов, только основные. Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 14 марта Поделиться Опубликовано 14 марта (изменено) У всех таблиц, кроме расписания рейсов и самих рейсов, вышло обновление. Изменено 14 марта пользователем Infeer10 Ссылка на комментарий Поделиться на другие сайты Поделиться
М.Михаил Опубликовано 14 марта Поделиться Опубликовано 14 марта В 11.03.2024 в 15:48, Infeer10 сказал: Нужны вот эти пять таблиц (укажу их номер в базе данных для удобства): Расписание рейсов (60661) — собственно, сами расписания, где указан код рейса в формате: код маршрута_код рейса_выход, и указано время, код остановки и порядковый номер остановки Остановки (60662)— здесь есть карта остановок, опять же важен код Маршруты (60664) — здесь просто указаны маршруты, но важен их код (который, кстати, указан в адресе ссылки расписания маршрута на t.mos.ru) Рейсы маршрутов (60665) — здесь просто можно посмотреть рейсы маршрутов Календарь маршрутов (60666) — здесь указана принадлежность рейсов дням недели и дата начала и формальная дата окончания действия расписания К сожалению, всё неотсортированно и записано в кодах. И лучше скачать таблицы по кнопке "экспорт", потому что сайт их не выдерживает И, как пример, если вручную хочется посмотреть всё про маршрут, например, 175: Смотрим код маршрута в таблице (60664) или на сайте — это 106 Переходим в расписания (60661), сортируем от А до Я, чтобы было удобнее, и видим формат: 106_3125711_1_701. 106 — код маршрута, 3125711 — код расписания, 1_701 — выход (1-й 701-го рейса) Чтобы понять к чему относится код расписания, смотрим таблицу (60666), сортируем от А до Я и по поиску находим, что 3125711 — код для рейсов по субботам и воскресеньям. Справа можно посмотреть дату начала действия и окончания (формального). Ну и возвращаемся в таблицу (60661), смотрим порядковый номер остановки и время. Если непонятно, что за остановка по коду, то смотрим таблицу (60662). Если просто нужно посмотреть количество выходов, то смотрим таблицу (60665). А оно вообще работает? Полчаса попыток через мобилу и iPad - либо пустая страница, либо 404 ошибка Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 14 марта Поделиться Опубликовано 14 марта Только что, М.Михаил сказал: А оно вообще работает? Полчаса попыток через мобилу и iPad - либо пустая страница, либо 404 ошибка Мобильные устройства точно не потянет, только скачать на компьютер. Ссылка на комментарий Поделиться на другие сайты Поделиться
М.Михаил Опубликовано 14 марта Поделиться Опубликовано 14 марта (изменено) Понял, жаль. Тогда попробую утром, если он оживет спустя полгода😅 Изменено 14 марта пользователем М.Михаил Ссылка на комментарий Поделиться на другие сайты Поделиться
М.Михаил Опубликовано 15 марта Поделиться Опубликовано 15 марта у меня даже комп отказывается это открывать примерно за это же время😅. ну и фиг с ними, хотя и интересно было бы глянуть пару маршрутов. Ссылка на комментарий Поделиться на другие сайты Поделиться
IGreshnikov Опубликовано 15 марта Поделиться Опубликовано 15 марта есть ли какие-то боты/программы, оповещающие об изменении выпуска и интервалов на маршрутах? ещё давно видел скриншот из телеги, где был именно такой бот, но найти его так и не смог Ссылка на комментарий Поделиться на другие сайты Поделиться
Касым Опубликовано 15 марта Поделиться Опубликовано 15 марта (изменено) 6 минут назад, IGreshnikov сказал: есть ли какие-то боты/программы, оповещающие об изменении выпуска и интервалов на маршрутах? ещё давно видел скриншот из телеги, где был именно такой бот, но найти его так и не смог Учитывая, как некоторые участники форума раскусили эту базу уже, разложив её на атомы, то написание бота для них - это дело одного дня, если мы все попросим )))) Изменено 15 марта пользователем Касым 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 23 марта Поделиться Опубликовано 23 марта (изменено) 100: 100/74 —> 142/103, из районных в магистральные 460: 28/0, 681: 32/0 —> 0 660: 82/52 —> 50/43, из районных в социальные Изменено 23 марта пользователем Infeer10 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Gleb72442 Опубликовано 23 марта Поделиться Опубликовано 23 марта 13 минут назад, Infeer10 сказал: 100: 100/74 —> 142/103, из районных в магистральные 460: 28/0, 681: 32/0 —> 0 660: 82/52 —> 50/43, из районных в социальные а на сотке кто работает? остался частник? Ссылка на комментарий Поделиться на другие сайты Поделиться
Infeer10 Опубликовано 23 марта Поделиться Опубликовано 23 марта Только что, Gleb72442 сказал: а на сотке кто работает? остался частник? Да, машины с 660, я его не случайно написал. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти