{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог Михаила Озорнина: заметки с тегом таймсерии",
    "_rss_description": "Главная · Блог · Работы ·",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/mikeozornin.ru\/blog\/tags\/taymserii\/",
    "feed_url": "https:\/\/mikeozornin.ru\/blog\/tags\/taymserii\/json\/",
    "icon": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384",
    "author": {
        "name": "Михаил Озорнин",
        "url": "https:\/\/mikeozornin.ru\/blog\/",
        "avatar": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384"
    },
    "items": [
        {
            "id": "91",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/how-to-label-timeseries\/",
            "title": "Как делать подписи для таймсерий",
            "content_html": "<p class=\"lead\">Таймсерии — графики, где что-то зависит от времени обычно. В посте я расскажу, как делать на них подписи. Это улучшенная версия статьи из наших внутренних дизайнерских гайдлайнов, поэтому тут может встретиться неожиданная категоричность.<\/p>\n<h2>В чем проблема<\/h2>\n<p>Если не следить за подписями, то программа или библиотека расставит отметки автоматически. Скорей всего она поделит интервал на равные промежутки и может получиться плохо. Вот скриншот временной оси графика, обратите внимание, что показано только время:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-0@2x.png\" width=\"651\" height=\"53\" alt=\"\" \/>\n<\/div>\n<p>Библиотека отрисовки почему-то решила не подписывать даты и подписала только время. На самом деле пеньки <i>3:00 21 мая, 15:00 23 мая, 3:00 26 мая, 15:00 28 мая, 3:00 31 мая, 15:00 2 июня.<\/i> Понять это из подписей почти невозможно.<\/p>\n<p>Я перерисую скриншот, чтобы можно было менять и иллюстрировать:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-0-2@2x.png\" width=\"520\" height=\"52\" alt=\"\" \/>\n<\/div>\n<p>Первое, что нужно сделать — всегда писать даты:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-1@2x.png\" width=\"520\" height=\"52\" alt=\"\" \/>\n<\/div>\n<p>Стало понятно, но тоже плохо. Пеньки получились неудобные, читать их неудобно. Все потому, что программа поделила ось на равные промежутки и подписала их. В данном случае число отсчетов не совпало с числом дней, поэтому программа выбрала промежутками не целые дни.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-2@2x.png\" width=\"520\" height=\"60\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Пурпурные линии — границы дней<\/div>\n<\/div>\n<p>В посте я расскажу что с этим всем делать.<\/p>\n<h2>Общие правила<\/h2>\n<ol start=\"1\">\n<li>Подписи отметок соотносятся с масштабом. При показе данных за год показывать время с точностью до минут не имеет смысла.<\/li>\n<li>Всегда выбирается максимально детальный разумный масштаб. Если без проблем указывается с точностью до дней, то не надо укрупнять отметки до 5-дневных просто так.<\/li>\n<li>Отметки должны быть регулярны. Разный шаг не позволит удобно прикинуть промежуточное значение. Если регулярные метки не получаются, то основную часть отметок лучше сделать регулярными, а нерегулярные остатки сложить к одному из концов интервала.<\/li>\n<li>Смысловые отметки лучше несмысловых. Отметка <i>22:12<\/i> — странно, <i>22:30<\/i> — норм. Вряд ли имеет смысл использовать что-то, не попадающее в этот список:<br \/>\n<i>1, 5, 10, 15, 30 секунд,<\/i><br \/>\n<i>1, 5, 10, 15, 30 минут,<\/i><br \/>\n<i>1, 2, 4, 6, 12, 24 часов,<\/i><br \/>\n<i>1, 2, 5, 10, 15 дней,<\/i><br \/>\n<i>1, 2 недели (если нужны именно календарные недели),<\/i><br \/>\n<i>1, 2, 3, 6 месяцев,<\/i><br \/>\n<i>1, 2 года, 5, 10 лет.<\/i><br \/>\nДробными числами, не подходящими под указанные выше, допустимо подписывать только начало и конец.<\/li>\n<\/ol>\n<h2>Информативность<\/h2>\n<ol start=\"1\">\n<li>Дублировать одно и то же — плохо. Не надо писать у отметок так: <i>01.01.2015, 01.02.2015, 01.03.2015, 01.05.2015.<\/i> Но и <i>01.01, 01.02, 01.03, 01.05<\/i> тоже плохо (см. следующий пункт). Кстати, кто-нибудь заметил, что я пропустил апрель?<\/li>\n<li>Для дат лучше всего использовать формат <i>1 мая, 2 июня, 13 ноя<\/i>. Месяцы сокращаются до трех букв без точки (кроме мая, июня и июля), ведущий ноль у числа не пишется.<\/li>\n<\/ol>\n<blockquote>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-6@2x.png\" width=\"509\" height=\"98\" alt=\"\" \/>\n<\/div>\n<\/blockquote>\n<ol start=\"3\">\n<li>Если год на отметках повторяется, то лучше подписать его у первой отметки этого года, а у следующих не подписывать. Год стоит продублировать у крайних отметок, чтобы было проще понять, какая это дата.<\/li>\n<\/ol>\n<blockquote>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-5@2x.png\" width=\"507\" height=\"120\" alt=\"\" \/>\n<\/div>\n<\/blockquote>\n<ol start=\"4\">\n<li>Секунды у времени не пишутся, если не сказано обратного — <i>22:12<\/i>. Любое время, кроме полуночи лучше писать без ведущих нулей: <i>6:25, 9:13, 12:56,<\/i> но <i>00:00<\/i>. Для секунд, там где они нужны, допускается писать только секунды: <i>10:55, :56, :57, :58, :59, 11:00, :01, :02.<\/i><\/li>\n<\/ol>\n<h2>Оформление<\/h2>\n<ol start=\"1\">\n<li>Если отметок много и они переносятся в две строки, лучше снизить число отметок, а не переносить.<\/li>\n<\/ol>\n<blockquote>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-7@2x.png\" width=\"507\" height=\"112\" alt=\"\" \/>\n<\/div>\n<\/blockquote>\n<ol start=\"2\">\n<li>Текст подписи выравнивает по центру, сама подпись — по пеньку.<\/li>\n<li>Между отметками должен быть минимальный отступ в 16 пк, если отступ будет меньше, то отметки слипнутся.<\/li>\n<\/ol>\n<h2>Края интервала<\/h2>\n<p>Когда левая и правая границы важны, нужно подписать эти отметки явно. Скорей всего для этого придется убрать подписи у ближайших отметок: отметки <i>6:00<\/i> (между <i>3:52<\/i> и <i>8:00<\/i>) и <i>2:00<\/i> (между <i>00:00<\/i> и <i>3:12<\/i>) как бы должны быть, но не влезли:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-first-and-last-1@2x.png\" width=\"527\" height=\"57\" alt=\"\" \/>\n<\/div>\n<p>Если явно задана только левая, а правая — <i>сейчас<\/i>, то правую можно не подписывать:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-first-and-last-2@2x.png\" width=\"527\" height=\"57\" alt=\"\" \/>\n<\/div>\n<p>Если края не принципиальны, то можно не подписывать оба конца:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-first-and-last-3@2x.png\" width=\"527\" height=\"57\" alt=\"\" \/>\n<\/div>\n<h2>Примеры<\/h2>\n<p>Примеры того, что получится, если воспользоваться рекомендациями:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-examples-200@2x.png\" width=\"500\" height=\"615\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-examples-480@2x.png\" width=\"845\" height=\"615\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-examples-1600@2x.png\" width=\"2000\" height=\"774\" alt=\"\" \/>\n<\/div>\n<p>Если применить все рекомендации к примеру из начала поста, то получится как-то так:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-8@2x.png\" width=\"524\" height=\"284\" alt=\"\" \/>\n<\/div>\n<div class=\"post-summary\"><div class=\"post-summary__text\"><p>Выводы простые: не доверяйте программе ставить отметки как получится, скорей всего получится плохо.<\/p>\n<\/div><\/div>",
            "date_published": "2018-06-04T02:21:35+03:00",
            "date_modified": "2018-12-16T00:47:03+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-3@2x.png",
            "_date_published_rfc2822": "Mon, 04 Jun 2018 02:21:35 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "91",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-3@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-4@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-0@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-0-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-6@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-5@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-7@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-first-and-last-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-first-and-last-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-first-and-last-3@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-examples-200@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-examples-480@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-examples-1600@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/timeseries-post-8@2x.png"
                ]
            }
        },
        {
            "id": "75",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/time-series-scale\/",
            "title": "Что делать с масштабом временных рядов",
            "content_html": "<p>Хочу рассказать про один способ отображения временных рядов (time series — графиков, где ось абсцисс — время).<\/p>\n<p>Например, есть такой график:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-1@2x.png\" width=\"614\" height=\"114\" alt=\"\" \/>\n<\/div>\n<p>Представим, что нам нужно отслеживать состояние какой-то сложной системы со многими параметрами: загрузкой ЦПУ, сетью, трафиком и чем-то ещё. В этом случае графики должны помогать нам:<\/p>\n<ul>\n<li>замечать выбросы, отличающиеся от нормального поведения системы: <i>какая-то аномальная загрузка ЦП в датацентре Амстердама, большой исходящий трафик в Сингапуре;<\/i><\/li>\n<li>отмечать какие-то паттерны: <i>в датацентрах какая-то периодическая дисковая активность в середине дня;<\/i><\/li>\n<li>видеть при этом каждый из параметров: <i>здесь наблюдается плавный рост, а потом резкое падение — сработало масштабирование нагрузки, а во втором случае рост был быстрый, системы масштабирования не успели отреагировать;<\/i><\/li>\n<li>сравнивать параметры между собой: <i>серверы в Сингапуре почти всегда загружены, а в Европе простаивают, не дотягивают и трети сингапурских;<\/i><\/li>\n<\/ul>\n<p><aside class=\"aside-margin-right\"><span class=\"related-title\"><a href=\"https:\/\/bureau.ru\/bb\/soviet\/20150407\/\">Мы решили объединить эти значения в один график<\/a> — совет бюро, в котором рассказывается почему не надо накладывать графики друг на друга<\/span><\/aside><\/p>\n<p>Чтобы сравнить много графиков, проще всего сложить их в стопку (иногда накладывают их друг на друга на одной оси, но так делать не надо). Чтобы все они влезли, нам придется изменить вертикальный масштаб:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-2@2x.png\" width=\"614\" height=\"112\" alt=\"\" \/>\n<\/div>\n<p>Если графиков будет много, то получится нечитаемая каша:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/series.png\" width=\"1970\" height=\"1112\" alt=\"\" \/>\n<\/div>\n<p>Масштаб графиков по высоте стал совсем плохой: попробуйте заметить здесь те самые выбросы и отклонения и проследите взаимосвязи между параметрами. Невозможно, да.<\/p>\n<p>Сейчас я немного изменю график, чтобы показать, как можно компенсировать эти проблемы.<\/p>\n<p>Исходный график:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-1@2x.png\" width=\"614\" height=\"114\" alt=\"\" \/>\n<\/div>\n<p>Сначала поделим наш график по оси ординат на несколько групп:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-3@2x.png\" width=\"614\" height=\"114\" alt=\"\" \/>\n<\/div>\n<p><aside class=\"aside-margin-right\"><span class=\"related-title\"><a href=\"http:\/\/colorbrewer2.org\">Color Brewer<\/a> — специальный инструмент для составления цветовых шкал<\/span><\/aside><\/p>\n<p>Потом раскрасим их по возрастанию значения:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-4@2x.png\" width=\"614\" height=\"114\" alt=\"\" \/>\n<\/div>\n<p>И сложим их одну на другую:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-5@2x.png\" width=\"614\" height=\"114\" alt=\"\" \/>\n<\/div>\n<p>Весь процесс (гифка):<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-total@2x.gif\" width=\"614\" height=\"114\" alt=\"\" \/>\n<\/div>\n<p>И как раз такие графики можно снова сложить стопкой:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/series-colored.png\" width=\"1968\" height=\"1164\" alt=\"\" \/>\n<\/div>\n<p>Такой график отлично показывает наличие пиков и нулей: пики — яркие, нули — пустоты. Кроме этого он не портит вертикальный масштаб: не сжимает его и не растягивает.<br \/>\n<small><a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/vertical-scale\/\">Оптимальный вертикальный масштаб графика, Илья Бирман<\/a><\/small><\/p>\n<p>И с нашими ожиданиями от графика стало все лучше, вот с этими:<\/p>\n<ul>\n<li>замечать выбросы, отличающиеся от нормального поведения системы,<\/li>\n<li>отмечать какие-то паттерны,<\/li>\n<li>видеть при этом каждый из параметров,<\/li>\n<li>сравнивать параметры между собой.<\/li>\n<\/ul>\n<p>Ещё раз было-стало:<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1970\" data-ratio=\"1.7715827338129\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/series.png\" width=\"1970\" height=\"1112\" alt=\"\" \/>\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/series-colored.png\" width=\"1968\" height=\"1164\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>Программировать с нуля такую штуку не придется: компания Square, делающая терминалы для приема оплаты с банковских карт, разработала библиотеку для такой визуализации.<\/p>\n<div class=\"e2-text-picture\">\n<a href=\"http:\/\/square.github.io\/cubism\/\" class=\"e2-text-picture-link\">\n<img src=\"https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-js@2x.png\" width=\"985\" height=\"458\" alt=\"\" \/>\n<\/a><div class=\"e2-text-caption\"><a href=\"http:\/\/square.github.io\/cubism\/\">http:\/\/square.github.io\/cubism\/<\/a><\/div>\n<\/div>\n<p>Ссылки по теме:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.perceptualedge.com\/articles\/visual_business_intelligence\/time_on_the_horizon.pdf\">Time on the Horizon, Stephen Few и Perceptual Edge, PDF<\/a> Оригинальная статья, по которой я писал пост<\/li>\n<li><a href=\"https:\/\/bureau.ru\/bb\/soviet\/20150407\/\">Мы решили объединить эти значения в один график<\/a> Совет бюро, в котором рассказывается почему не надо накладывать графики друг на друга<\/li>\n<li><a href=\"http:\/\/colorbrewer2.org\">Color Brewer<\/a> Специальный инструмент для составления цветовых шкал<\/li>\n<li><a href=\"https:\/\/ilyabirman.ru\/meanwhile\/all\/vertical-scale\/\">Оптимальный вертикальный масштаб графика, Илья Бирман<\/a><\/li>\n<\/ul>\n",
            "date_published": "2018-01-24T11:18:34+03:00",
            "date_modified": "2024-01-07T10:18:14+03:00",
            "image": "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-1@2x.png",
            "_date_published_rfc2822": "Wed, 24 Jan 2018 11:18:34 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "75",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [
                    "system\/library\/jquery\/jquery.js",
                    "system\/library\/fotorama\/fotorama.css",
                    "system\/library\/fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-1@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-2@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/series.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-3@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-4@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-5@2x.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-total@2x.gif",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/series-colored.png",
                    "https:\/\/mikeozornin.ru\/blog\/pictures\/cubism-js@2x.png"
                ]
            }
        }
    ],
    "_e2_version": 3798,
    "_e2_ua_string": "E2 (v3798; Aegea)"
}