Есть у меня друг-наркоман. Принимает дозу соц. сетей внутриглазно каждую секунду, пока не спит или работает.

Симптомы

  • "Это по работе"
  • "Да не сижу я в соц. сетях так часто"
  • "Нет времени" в ответ на "Давай чет делать"
  • "Я стал сидеть реже, чем раньше" (заменив одну сеть на другую)
  • "И вообще вы все врети, статистика не верна"

Конечно, вылечить такого пациента указанием ему на проблему невозможно, но моя жопа горела вместо его, когда я видел как уходит его жизнь и все же решил показать наглядно, как это выглядит


Инструментарий

  • Python 3 + telegram-tracker на GitHub для сбора данных
  • СмекалОчка или знание какого-то ЯП, чтобы превратить полученные данные в .csv формат
  • Google Data Studio (инфо) для визуализации (бэзплатно!1)

Сбор данных

Копируем репозиторий для отслеживания
git clone https://github.com/gentoo-root/telegram-tracker.git

В папке settings создаем файл keys.py и вставляем в него

API_ID = 123456
API_HASH = '1234567890abcdef1234567890abcdef'

Заменить значения на данные отсюда (нужно создать приложение)

В главной папке репозитория выполняем
python3 -m track '+380991234567'
Вас попросит ввести еще свой номер, код подтверждения из Telegram и пароль двухфакторной аутенфикации (если включена). Я параноик, поэтому делал все с фейкового аккаунта

Теперь ждем денек-второй, пока данные наберутся. Выглядеть будут как-то так:

~2020-12-21 @ 06:50:07: User went online.
=2020-12-21 @ 06:50:21: User went offline.
=2020-12-21 @ 06:51:48: User went offline after being online for short time.

Превращение в csv

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

Я гавнокодер и написал свой конвертер на модифицированном Lua прямо внутри одной игры, так что он будет тебе мало чем полезен, но держи:

чем воняет?

Выглядеть сформированный лог будет вот так:

Визуализация

Заходим на сайт GDS, создаем новый отчет, выбираем источник данных "Загрузка файла", заливаем наш csv файл

Дальше добавляем диаграммы

Настраиваем

Таблица с тепловой картой

  • Категория "Параметр": кликаем на календарик возле даты, выбираем Тип -> Дата и время -> Час. Важно сделать это именно в "Параметр", а не "Параметр: диапазон дат"
  • Показатель: session_time. Название: входов в сеть, Агрегирование: количество. Еще "Добавить показатель" снова session_time. Название: Время в сети, Агрегирование: сумма, Тип: число -> Продолжительность

Столбчатая диаграмма

  • Параметр: снова делаем Час
  • Показатель: сумма session_time, Тип: продолжительность
  • Сортировка: по возрастанию date_start.

В "Стиль" этой диаграммы надо указать 24 столбца

Диаграмма динамических рядов

  • Параметр: снова Час
  • Показатель: сумма session_time, название "Накопительно часов", тип Продолжительность, расчет скользящего показателя: Суммирование

Сводка

Вроде ничего сложного после предыдущих пунктов. Просто в агреггировании для session_time выбираем "Медиана" и "Максимальное значение"

Получится вот такое чудо:

Сортировку по часам приходится делать в режиме просмотра отчета вручную, потому что для самой таблицы почему-то у меня не получается прописать сортировку по полю даты 

Улучшения

В моем варианте анализируется один единственный день. В GDS можно добавить выборку по датам и сделать, чтобы анализировать можно было хоть целый месяц, хоть отдельные дни

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

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