Перейти к содержанию

Trotil

Постоянные участники
  • Постов

    4814
  • Зарегистрирован

  • Посещение

  • Победитель дней

    7

Сообщения, опубликованные Trotil

  1. Только что, Dozenazer сказал:

    Это кто вообще, т. е. что за маршрут?

    Мега-экспресс, с остановками "Нововатутинский проспект", "м. Прокшино", "м. Филатов Луг". Всё.

    Лучше бы этот маршрут объединить с с18 и пустить по новой дороге вдоль Кленовых Аллей.

  2. В ЯТ в последнее время долгое ожидание машины - бывает и 5-10 минут, при этом стоимость поездки они не снижают.

    Я иногда пользуюсь этим сервисом, когда очень спешу, но оно стало "дорого" и "долго". И поэтому я порой отказываюсь, не забывая указывать причину отказа - "слишком долго ждать".

    10 минут - я за это время дождусь автобуса, на который опоздал, или вообще проеду часть пути или ещё что.

    Так что для коротких поездок (до 10 км) ЯТ стало совсем неадекватным сервисом. На длинные ещё терпимо и по стоимости более-менее нормально выходит.

    • Like 1
  3. А это составы, которые с утра колбасило:

     

    https://rasp.yandex.ru/thread/R_7539x7540_9601675_g24_4?departure_from=2024-04-22+11%3A49%3A00&station_from=2000006&station_to=9600881

     

    Здесь задержка на полчаса на Марьиной Роще на полчаса в 11:30

    Затем рассосалось, но те поезда, которые попали в замес, нагнать своё время уже не смогли за день.

    А 6816 поезд не мцд-шный, он в 11:30 был совсем в другом месте

     

    ЖДНАЯ - АПР 10:36 - 12:36 (задержки 3-5 минут, считай вовремя) , от Апрелевки отправился тоже вовремя (в 12:47)

    ЖДНАЯ - АПР 10:56 - 12:56 (прибыл с опозданием в 21 мин) - далее этот состав пускают по графику следующего состава, т.е. на 20 мин позже и так целый день.  Рейс "18:27" - это он и есть.

    следующий состав ездил с опозданием в 10-15 минут

    а ещё следующий практически в своё графиковое время.

     

  4. 26 минут назад, МИгИ сказал:

    ну у 111к у "ДК МГУ" всё-таки остановка была не одна, а немного разнесённая - своя к разным конечным. Равно как и у других таких маршрутов.

    А сейчас предлагается именно одна остановка с ориентиром на табло - возможны инциденты)))

    Раньше никаких электронных маршрутоуказателей не было - поэтому делали разнесённые остановки.

     

    Ещё пример - 37 / 837  в Бирюлёве-Западном, но там тоже разнесённые (а раньше - по разную сторону от шоссе, насколько я помню, на территории к/ст)

  5. 23 часа назад, Infeer10 сказал:

    Вообще интересно, сколько человек берут, и насколько можно ничего не уметь) Я бы, может, попробовался аналитиком, но, поскольку, реального опыта и знания программ нет, то явно буду в минусе перед остальными.

    Хотя по некоторым изменениям маршрутов есть вопросы к профессионализму того, кто уже там работает)

    Если вдруг устроишься, всяко будет полезнее тех профнепригодных, которые ставили маршрутную скорость 10 км/ч на e10 на всём протяжении маршрута.

    • Like 4
  6. вообще-то это вредительство!

     

    и люди им пользовались, небольшой поток был, это те, которым 26 не подходил. Я в том числе.

     

    "на отменяемом участке пользуйтесь 26" - только пересадки в районе пересечения с Профсоюзной с трамвая на автобус нет.

    "Автобусы будут ходить чаще" - чаще, чем 315? Не верю!

     

    • Like 1
  7. Здесь я распишу тезисно, как можно работать с этими данными через СУБД 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:

    Результат на скриншоте:

     

    27_702.PNG.1fd1aac452a642c2c4dbf2646e3e6769.PNG

     

    Это очень гибкая и наглядная система. Для повышения читаемости колонки в DB Browser можно сортировать.

    После того, как вы объедините таблицы на этапе 2, фильтровать данные станет ещё проще. Необязательно использовать такие сложные регулярки.

    Но я бы не рекомендовал объединять всё, так как такая таблица будет занимать несколько десятков гигабайт и работать очень медленно.

    Строго говоря, это неправильный метод работы, а правильный и профессиональный - через написание запросов select с условиями where и сортировкой order by. Но он требует навыков.

     

    Этап 4, автоматизация.

    К сожалению, этот этап объёмный и его описание нельзя вместить в один пост, и у меня сейчас нет времени сделать такую автоматизацию самостоятельно. Но если коротко, это проще всего сделать на python или на perl.

    Нужно подготовить базу данных (этапы 1,2) и дополнительные колонки с помощью DB Browser, (дополнительные таблицы не создавать), сохранить, затем написать скрипт на питоне, который:

    - подключится к этой подготовленной БД

    - сделает нужные выборки select

    - выведет в файл / на экран информацию в виде простой html страницы

    - закроет соединение

    (в сети есть достаточно подробные учебные руководства по подобной тематике на русском языке).

     

    sqlite поддерживает агрегирующие функции, поэтому просто будет посчитать кол-во рейсов, среднее время работы, продолжительность обедов, максимальное число остановок и прочую любознательную статистику.

    • Thanks 2
  8. 1 час назад, Infeer10 сказал:

    А вот вопрос, каждый выход должен соответствовать одной машине? Я думал, так и есть, и можно быстро посчитать выходы, но, например, на 27 (автобусном) в будни есть 201 и 702 рейсы, то есть, по идее, две машины, хотя и по реестру, и я всегда наблюдал только одну машину. Или на 1 (автобусном) 301, 302, 703, 704, 705, 706 рейсы, но и по реестру и по наблюдениям машин всегда было 5. У обоих этих маршрутов расписание уехало за пределы таблицы, поэтому понять сложно.

    Илья, на 27 автобусном есть днём интервал 40 минут. Конечно, там два выхода.

    Или на утренний рейс 7:14 даётся полтора часа, в это время второй выход начинает работу в 8:13...

  9. 16 минут назад, Mixalblch сказал:

    Здравница, Дачное, Вязёмы ... миксер мне в глаза. От Тучков до Можайска пылесосит всё подряд. На..., но главное зачем?!

    Это скопированные графики текущих электричек до Можайска, курсирующих по 6 марта.

  10. Насчёт невывоза - был какой-то слёт велосипедистов далее Можайска и они там в субботу утром пересаживались на вязьминскую. Так вот, им 4 вагонов не хватило, пара людей с велосипедами (!) грузилось в кабину машинистов.

×
×
  • Создать...

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.