<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Михаила Озорнина: заметки с тегом таймсерии</title>
<link>https://mikeozornin.ru/blog/tags/taymserii/</link>
<description>Главная · Блог · Работы ·</description>
<author>Михаил Озорнин</author>
<language>ru</language>
<generator>E2 (v3798; Aegea)</generator>

<itunes:owner>
<itunes:name>Михаил Озорнин</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Главная · Блог · Работы ·</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Как делать подписи для таймсерий</title>
<guid isPermaLink="false">91</guid>
<link>https://mikeozornin.ru/blog/all/how-to-label-timeseries/</link>
<pubDate>Mon, 04 Jun 2018 02:21:35 +0300</pubDate>
<author>Михаил Озорнин</author>
<comments>https://mikeozornin.ru/blog/all/how-to-label-timeseries/</comments>
<description>
&lt;p class="lead"&gt;Таймсерии — графики, где что-то зависит от времени обычно. В посте я расскажу, как делать на них подписи. Это улучшенная версия статьи из наших внутренних дизайнерских гайдлайнов, поэтому тут может встретиться неожиданная категоричность.&lt;/p&gt;
&lt;h2&gt;В чем проблема&lt;/h2&gt;
&lt;p&gt;Если не следить за подписями, то программа или библиотека расставит отметки автоматически. Скорей всего она поделит интервал на равные промежутки и может получиться плохо. Вот скриншот временной оси графика, обратите внимание, что показано только время:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-0@2x.png" width="651" height="53" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Библиотека отрисовки почему-то решила не подписывать даты и подписала только время. На самом деле пеньки &lt;i&gt;3:00 21 мая, 15:00 23 мая, 3:00 26 мая, 15:00 28 мая, 3:00 31 мая, 15:00 2 июня.&lt;/i&gt; Понять это из подписей почти невозможно.&lt;/p&gt;
&lt;p&gt;Я перерисую скриншот, чтобы можно было менять и иллюстрировать:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-0-2@2x.png" width="520" height="52" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Первое, что нужно сделать — всегда писать даты:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-1@2x.png" width="520" height="52" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Стало понятно, но тоже плохо. Пеньки получились неудобные, читать их неудобно. Все потому, что программа поделила ось на равные промежутки и подписала их. В данном случае число отсчетов не совпало с числом дней, поэтому программа выбрала промежутками не целые дни.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-2@2x.png" width="520" height="60" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Пурпурные линии — границы дней&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В посте я расскажу что с этим всем делать.&lt;/p&gt;
&lt;h2&gt;Общие правила&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Подписи отметок соотносятся с масштабом. При показе данных за год показывать время с точностью до минут не имеет смысла.&lt;/li&gt;
&lt;li&gt;Всегда выбирается максимально детальный разумный масштаб. Если без проблем указывается с точностью до дней, то не надо укрупнять отметки до 5-дневных просто так.&lt;/li&gt;
&lt;li&gt;Отметки должны быть регулярны. Разный шаг не позволит удобно прикинуть промежуточное значение. Если регулярные метки не получаются, то основную часть отметок лучше сделать регулярными, а нерегулярные остатки сложить к одному из концов интервала.&lt;/li&gt;
&lt;li&gt;Смысловые отметки лучше несмысловых. Отметка &lt;i&gt;22:12&lt;/i&gt; — странно, &lt;i&gt;22:30&lt;/i&gt; — норм. Вряд ли имеет смысл использовать что-то, не попадающее в этот список:&lt;br /&gt;
&lt;i&gt;1, 5, 10, 15, 30 секунд,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;1, 5, 10, 15, 30 минут,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;1, 2, 4, 6, 12, 24 часов,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;1, 2, 5, 10, 15 дней,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;1, 2 недели (если нужны именно календарные недели),&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;1, 2, 3, 6 месяцев,&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;1, 2 года, 5, 10 лет.&lt;/i&gt;&lt;br /&gt;
Дробными числами, не подходящими под указанные выше, допустимо подписывать только начало и конец.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Информативность&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Дублировать одно и то же — плохо. Не надо писать у отметок так: &lt;i&gt;01.01.2015, 01.02.2015, 01.03.2015, 01.05.2015.&lt;/i&gt; Но и &lt;i&gt;01.01, 01.02, 01.03, 01.05&lt;/i&gt; тоже плохо (см. следующий пункт). Кстати, кто-нибудь заметил, что я пропустил апрель?&lt;/li&gt;
&lt;li&gt;Для дат лучше всего использовать формат &lt;i&gt;1 мая, 2 июня, 13 ноя&lt;/i&gt;. Месяцы сокращаются до трех букв без точки (кроме мая, июня и июля), ведущий ноль у числа не пишется.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-6@2x.png" width="509" height="98" alt="" /&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Если год на отметках повторяется, то лучше подписать его у первой отметки этого года, а у следующих не подписывать. Год стоит продублировать у крайних отметок, чтобы было проще понять, какая это дата.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-5@2x.png" width="507" height="120" alt="" /&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Секунды у времени не пишутся, если не сказано обратного — &lt;i&gt;22:12&lt;/i&gt;. Любое время, кроме полуночи лучше писать без ведущих нулей: &lt;i&gt;6:25, 9:13, 12:56,&lt;/i&gt; но &lt;i&gt;00:00&lt;/i&gt;. Для секунд, там где они нужны, допускается писать только секунды: &lt;i&gt;10:55, :56, :57, :58, :59, 11:00, :01, :02.&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Оформление&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Если отметок много и они переносятся в две строки, лучше снизить число отметок, а не переносить.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-7@2x.png" width="507" height="112" alt="" /&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Текст подписи выравнивает по центру, сама подпись — по пеньку.&lt;/li&gt;
&lt;li&gt;Между отметками должен быть минимальный отступ в 16 пк, если отступ будет меньше, то отметки слипнутся.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Края интервала&lt;/h2&gt;
&lt;p&gt;Когда левая и правая границы важны, нужно подписать эти отметки явно. Скорей всего для этого придется убрать подписи у ближайших отметок: отметки &lt;i&gt;6:00&lt;/i&gt; (между &lt;i&gt;3:52&lt;/i&gt; и &lt;i&gt;8:00&lt;/i&gt;) и &lt;i&gt;2:00&lt;/i&gt; (между &lt;i&gt;00:00&lt;/i&gt; и &lt;i&gt;3:12&lt;/i&gt;) как бы должны быть, но не влезли:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-first-and-last-1@2x.png" width="527" height="57" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Если явно задана только левая, а правая — &lt;i&gt;сейчас&lt;/i&gt;, то правую можно не подписывать:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-first-and-last-2@2x.png" width="527" height="57" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Если края не принципиальны, то можно не подписывать оба конца:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-first-and-last-3@2x.png" width="527" height="57" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Примеры&lt;/h2&gt;
&lt;p&gt;Примеры того, что получится, если воспользоваться рекомендациями:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-examples-200@2x.png" width="500" height="615" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-examples-480@2x.png" width="845" height="615" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-examples-1600@2x.png" width="2000" height="774" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Если применить все рекомендации к примеру из начала поста, то получится как-то так:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/timeseries-post-8@2x.png" width="524" height="284" alt="" /&gt;
&lt;/div&gt;
&lt;div class="post-summary"&gt;&lt;div class="post-summary__text"&gt;&lt;p&gt;Выводы простые: не доверяйте программе ставить отметки как получится, скорей всего получится плохо.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
</item>

<item>
<title>Что делать с масштабом временных рядов</title>
<guid isPermaLink="false">75</guid>
<link>https://mikeozornin.ru/blog/all/time-series-scale/</link>
<pubDate>Wed, 24 Jan 2018 11:18:34 +0300</pubDate>
<author>Михаил Озорнин</author>
<comments>https://mikeozornin.ru/blog/all/time-series-scale/</comments>
<description>
&lt;p&gt;Хочу рассказать про один способ отображения временных рядов (time series — графиков, где ось абсцисс — время).&lt;/p&gt;
&lt;p&gt;Например, есть такой график:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-1@2x.png" width="614" height="114" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Представим, что нам нужно отслеживать состояние какой-то сложной системы со многими параметрами: загрузкой ЦПУ, сетью, трафиком и чем-то ещё. В этом случае графики должны помогать нам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;замечать выбросы, отличающиеся от нормального поведения системы: &lt;i&gt;какая-то аномальная загрузка ЦП в датацентре Амстердама, большой исходящий трафик в Сингапуре;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;отмечать какие-то паттерны: &lt;i&gt;в датацентрах какая-то периодическая дисковая активность в середине дня;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;видеть при этом каждый из параметров: &lt;i&gt;здесь наблюдается плавный рост, а потом резкое падение — сработало масштабирование нагрузки, а во втором случае рост был быстрый, системы масштабирования не успели отреагировать;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;сравнивать параметры между собой: &lt;i&gt;серверы в Сингапуре почти всегда загружены, а в Европе простаивают, не дотягивают и трети сингапурских;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;aside class="aside-margin-right"&gt;&lt;span class="related-title"&gt;&lt;a href="https://bureau.ru/bb/soviet/20150407/"&gt;Мы решили объединить эти значения в один график&lt;/a&gt; — совет бюро, в котором рассказывается почему не надо накладывать графики друг на друга&lt;/span&gt;&lt;/aside&gt;&lt;/p&gt;
&lt;p&gt;Чтобы сравнить много графиков, проще всего сложить их в стопку (иногда накладывают их друг на друга на одной оси, но так делать не надо). Чтобы все они влезли, нам придется изменить вертикальный масштаб:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-2@2x.png" width="614" height="112" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Если графиков будет много, то получится нечитаемая каша:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/series.png" width="1970" height="1112" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Масштаб графиков по высоте стал совсем плохой: попробуйте заметить здесь те самые выбросы и отклонения и проследите взаимосвязи между параметрами. Невозможно, да.&lt;/p&gt;
&lt;p&gt;Сейчас я немного изменю график, чтобы показать, как можно компенсировать эти проблемы.&lt;/p&gt;
&lt;p&gt;Исходный график:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-1@2x.png" width="614" height="114" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Сначала поделим наш график по оси ординат на несколько групп:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-3@2x.png" width="614" height="114" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;aside class="aside-margin-right"&gt;&lt;span class="related-title"&gt;&lt;a href="http://colorbrewer2.org"&gt;Color Brewer&lt;/a&gt; — специальный инструмент для составления цветовых шкал&lt;/span&gt;&lt;/aside&gt;&lt;/p&gt;
&lt;p&gt;Потом раскрасим их по возрастанию значения:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-4@2x.png" width="614" height="114" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;И сложим их одну на другую:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-5@2x.png" width="614" height="114" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Весь процесс (гифка):&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-total@2x.gif" width="614" height="114" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;И как раз такие графики можно снова сложить стопкой:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/series-colored.png" width="1968" height="1164" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Такой график отлично показывает наличие пиков и нулей: пики — яркие, нули — пустоты. Кроме этого он не портит вертикальный масштаб: не сжимает его и не растягивает.&lt;br /&gt;
&lt;small&gt;&lt;a href="https://ilyabirman.ru/meanwhile/all/vertical-scale/"&gt;Оптимальный вертикальный масштаб графика, Илья Бирман&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;И с нашими ожиданиями от графика стало все лучше, вот с этими:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;замечать выбросы, отличающиеся от нормального поведения системы,&lt;/li&gt;
&lt;li&gt;отмечать какие-то паттерны,&lt;/li&gt;
&lt;li&gt;видеть при этом каждый из параметров,&lt;/li&gt;
&lt;li&gt;сравнивать параметры между собой.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ещё раз было-стало:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1970" data-ratio="1.7715827338129"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/series.png" width="1970" height="1112" alt="" /&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/series-colored.png" width="1968" height="1164" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Программировать с нуля такую штуку не придется: компания Square, делающая терминалы для приема оплаты с банковских карт, разработала библиотеку для такой визуализации.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;a href="http://square.github.io/cubism/" class="e2-text-picture-link"&gt;
&lt;img src="https://mikeozornin.ru/blog/pictures/cubism-js@2x.png" width="985" height="458" alt="" /&gt;
&lt;/a&gt;&lt;div class="e2-text-caption"&gt;&lt;a href="http://square.github.io/cubism/"&gt;http://square.github.io/cubism/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ссылки по теме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.perceptualedge.com/articles/visual_business_intelligence/time_on_the_horizon.pdf"&gt;Time on the Horizon, Stephen Few и Perceptual Edge, PDF&lt;/a&gt; Оригинальная статья, по которой я писал пост&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bureau.ru/bb/soviet/20150407/"&gt;Мы решили объединить эти значения в один график&lt;/a&gt; Совет бюро, в котором рассказывается почему не надо накладывать графики друг на друга&lt;/li&gt;
&lt;li&gt;&lt;a href="http://colorbrewer2.org"&gt;Color Brewer&lt;/a&gt; Специальный инструмент для составления цветовых шкал&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ilyabirman.ru/meanwhile/all/vertical-scale/"&gt;Оптимальный вертикальный масштаб графика, Илья Бирман&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>


</channel>
</rss>