Статьи

Как извлечь точки данных из диаграммы

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

Я мотивирую эту идею простой диаграммой слайдов, которые я видел на недавней конференции PGConfSV с основной презентацией. Меня интересовали данные тестов ( в данном случае для CitusDB ), но я уверен, что они заняты, и я еще не связался с ними об этом. Поэтому я посмотрел на YouTube видео с основным докладом, остановил его во время показа слайда и сделал снимок экрана.

Результаты тестирования CitusDB

Я хотел бы использовать универсальный закон масштабируемости, чтобы проанализировать диаграмму слева и оценить, насколько массово параллельная обработка CitusDB сериализуется. Я не эксперт в этом, но я считаю, что он использует узел PostgreSQL с плагином в качестве планировщика запросов и маршрутизатора, отправляет запросы в сегменты, содержащие данные, и объединяет результаты, чтобы вернуть их клиенту. Это довольно стандартная обработка рассеяния. Одним из главных ограничивающих факторов для такой системы обычно является планирование запросов и объединение результатов. Сколько всего времени выполнения занимает? Закон Универсальной Масштабируемости может помочь понять это. Но чтобы проанализировать систему, сначала мне нужны ее данные.

Посмотрим как это получить.

Делать это трудным путем

Я собираюсь показать вам два сложных способа сделать это и предложить несколько более простых способов.

Одним из них является использование любого программного обеспечения для редактирования фотографий и линейки или функции обрезки, чтобы оценить центр пикселей точек на графике. Например, вот снимок экрана перетаскивания из нижнего левого угла изображения в нижний левый угол диаграммы, чтобы получить точку XY для пересечения осей X и Y диаграммы. Я использую стандартную программу для редактирования изображений Mac здесь, Preview:

Использование предварительного просмотра для оценки баллов

Результат X = 326, Y = 183. Сделайте это несколько раз для всех точек на графике, а затем поместите результаты в электронную таблицу, вычтите исходные значения X и Y из всех точек и нормализуйте их относительно известных точек на осях диаграммы (которые вы также должны измерить), и вы получил ваши результаты. Вот скриншот таблицы, которую я сделал для этого. Точки, которые я измерил, выделены зеленым, а результаты — фиолетовым:

Электронная таблица для расчета результатов

Вы можете скачать электронную таблицу, если хотите посмотреть ее. Из контекста диаграммы совершенно ясно, что значения X на самом деле должны быть 1, 5, 10 и 20, так что это легко исправить. Используя эту технику, я оцениваю баллы следующим образом:

 1   36250
 5  110000
10  195000
20  313750

Аналогичная техника заключается в использовании Desmos . Вы можете вставить изображение, установить его размеры равными количеству пикселей, затем создать таблицу и использовать меню передач, чтобы включить перетаскивание точек таблицы, включив 4-позиционные маркеры. Затем выровняйте точки по точкам диаграммы, и вы сможете считывать значения из таблицы так же, как и в приложении Preview:

Использование Desmos

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

Проще

Зачем использовать такие жесткие методы? Я верю, что трудные пути все еще ценны, чтобы знать о них. Прежде всего, когда вы делаете это, вы хорошо понимаете математику и настраиваетесь на то, над чем работаете (или я, по крайней мере). Во-вторых, иногда, когда диаграммы искажаются, скажем, из-за перспективы камеры, вы должны оценить, где точки будут падать, если перекос был исправлен.

Тем не менее, есть несколько инструментов, которые проще в использовании и дают хорошие результаты. При поиске в Интернете я нашел Engauge , Data Thief и http://di8itapp.com/ . Но лучший из всех, что я нашел, — это бесплатный онлайн -дигитайзер для веб-сюжета , который работает в браузере и дает довольно хорошие результаты для меня. Это позволяет очень точно контролировать размещение точек. Извлеченные точки:

 0.995104673   32858.00211
 5.070422535  108307.8542
10.07535128   196097.94
20.17810302   312738.7098

Конечно, X-точки должны быть установлены на 1, 5, 10 и 20, как и раньше.

В качестве бонуса это приложение интегрируется с Plotly и может автоматически отправлять полученные данные туда для анализа. Plotly — это инструмент, о котором я раньше не знал. Я нашел это довольно хорошим для этого типа анализа и смог быстро провести регрессию против USL и оценить коэффициент сериализации в 4% и коэффициент перекрестных помех в 0, что очень реалистично для такого типа системы в моем опыте :

Plotly

Это было легко! Возможно, проще, чем использовать RStudio.

Выводы

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

Если вам интересно узнать об анализе CitusDB и о том, что значит для него коэффициент сериализации (сигма) около 4%, прочитайте мое введение в Закон об универсальной масштабируемости . Если вы похожи на меня, вам будет интересно, что такая модель существует. (Упражнение для читателя: какого максимального ускорения должен достичь CitusDB при добавлении в него большего количества узлов?)