Извлечение данных из графиков при помощи Tableau Web Data Connector (WDC) на примере анализа индекса страха и жадности (Fear and Greed Index)
30.10.2020
В процессе решения аналитических задач бизнес зачастую сталкивается с проблемой поиска достоверных источников данных: иногда исходные данные доступны лишь в специфичной структуре в файлах Excel, иногда их трудно извлечь из различных систем или сервисов, а иногда все гораздо хуже…
Если данные доступны в табличном виде в PDF, то их еще можно попробовать извлечь при помощи стандартного коннектора к PDF в Tableau, но что делать если единственный источник данных – график в формате картинки? В таком случае вы можете решить эту задачу при помощи WebPlotDigitizer Web Data Connector (WDC). WDC представляет собой веб-страницу с кодом на JavaScript, которая позволяет извлекать данные из различных источников и загружать их в Tableau. WebPlotDigitizer – WDC, разработанный Денисом Трескуновым, который позволяет автоматизировать процесс оцифровки графиков.
Давайте представим, что нам необходимо извлечь данные из исторического графика индекса страха и жадности с сайта CNN, который доступен внизу страницы. Мне не удалось найти способ выгрузить исторические данные при помощи API, поэтому придется оцифровывать картинку.
Для начала запустим Tableau Desktop и создадим новый источник данных Web Data Connector.
Затем в адресной строке открывшегося окна введем адрес WebPlotDigitizer: https://dtreskunov.github.io/webplotdigitizer-wdc/
Далее нажмём Enter. В результате страница обновится и появится интерфейс WDC с примером графика.
Затем перейдем в File -> Load Image в левом верхнем углу интерфейса коннектора и выберем нашу предварительно загруженную картинку с графиком.
После выбора картинки откроется меню с выбором типа графика, я в данном случае оставляю значение «2D (X-Y) Plot» и нажимаю кнопку «Align Axes».
Затем появляется подсказка о том, как именно и в какой последовательности необходимо разметить оси графика. Сначала необходимо отметить минимальную отсечку с подписью на оси X, далее максимальную отсечку с подписью на оси X, далее минимальную отсечку с подписью на оси Y, далее максимальную отсечку с подписью на оси Y. Нажимаем «Proceed».
При наведении курсора мыши на график можно увидеть, что в правой части экрана доступна лупа, позволяющая предельно точно выставить точку. Ставим точку X1 у отметки «2018» на месте зеленой точки на лупе как на скриншоте ниже.
Далее ставим точку X2 у отметки «2020» как на скриншоте ниже.
Затем ставим точку Y1 на отметке «20» по оси Y как на скриншоте ниже.
Далее ставим последнюю точку Y2 на отметке «100» по оси Y как на скриншоте ниже.
От точности установки опорных точек зависит точность оцифровки графика, поэтому не советую промахиваться 😉 Если вы сделали все правильно, то под лупой должна появиться кнопка «Complete!», нажимаем на нее.
В появившемся окне указываем значения точек, для дат используется формат YYYY/MM/DD. Так как в данном примере оси не логарифмические, здесь не стоит ставить галки в чекбоксах «Log Scale». После установки значений как на скриншоте ниже нажимаем на кнопку «OK» в нижней части окна.
Далее переходим к режиму разметки точек на графике. Под лупой расположено небольшое меню, позволяющее выбрать режим разметки (ручной или автоматический) и произвести разметку точек. Нажимаем на кнопку «Automatic Mode».
В данном режиме нам необходимо выбрать цвет линии на графике и настроить алгоритм извлечения точек. Для начала нажмем на пиктограмму с цветом чтобы указать цвет линии.
В открывшемся окне нажмем на кнопку «Color Picker».
Далее точно прицелимся и нажмем на серую линию на графике. Выбранный цвет должен стать серым.
Далее нажмем на кнопку «Done».
После этого нам необходимо настроить параметры алгоритма для разметки точек. Давайте для начала протестируем работу алгоритма со стандартными настройками, нажав на кнопку «Run» в нижней части окна.
Мы можем заметить, что почти весь график покрылся точками, включая легенды и подписи.
Давайте попробуем подобрать настройки «Distance», «ΔX» и «ΔY», используя алгоритм извлечения точек «Averaging Window». Для начала укажем значение «2» для параметров «ΔX» и «ΔY» и нажмем на кнопку «Run».
Мы можем заметить, что точек стало больше (3009 вместо 514), но легенды и подписи все еще покрыты точками. Пробуем установить значение «1» параметрам «Distance», «ΔX» и «ΔY» и снова нажимаем кнопку «Run».
Теперь оси графика не покрыты точками кроме единственной ошибочной точки на подписи «2018» на оси X. Воспользуемся прямоугольной маской для исключения лишней точки. Для этого в разделе «Mask» выберем инструмент «Box». Точки временно пропадут с графика чтобы мы могли выделить область, в которой присутствуют все желаемые значения на графике. Выделяем область как на скриншоте ниже.
Снова нажимаем на кнопку «Run» в нижней части экрана.
Теперь на графике расставлено примерно 2590 точек (в вашем случае количество точек может отличаться, это некритично). Если вы хотите экспортировать этот набор данных, то вы можете скопировать значения в окне предпросмотра, нажав на кнопку «View Data», расположенную рядом с кнопкой «Run».
Выйдем из окна предпросмотра, нажав на кнопку «Close», и в левом верхнем меню перейдем в пункт «Data -> Acquire Data».
Затем перейдем в «File -> Return to Tableau».
Tableau Desktop получит данные от WDC, при помощи нажатия на «Update Now» мы можем посмотреть полученные значения.
Теперь мы видим, что наши сведения о датах по непонятным причинам превратились в числа. Изменение типа данных этого поля приводит к ошибке, поэтому оставим это поле в формате Number (decimal), перейдем на лист «Sheet 1» и создадим новое вычисляемое поле «Date».
Опытным путем удалось вычислить, что значение поля даты «Default Dataset, X» — это дата в формате UNIX timestamp в миллисекундах. Чтобы сделать новое поле даты воспользуемся слудующей формулой:
DATEADD(‘second’,INT([Default Dataset, X] / 1000), #1970-01-01#)
Нажмем «OK», перетащим поле «Date» из панели «Tables» в панель Columns.
В контекстном меню пилюли YEAR(Date) выберем детализацию по дням.
Видим, что даты распознались корректно.
Затем в контекстном меню на поле «Default Dataset, Y» в панели «Tables» переименовываем поле со значением индекса Fear and Greed Index.
Переименованное поле со значением индекса переносим в панель «Rows».
В контекстном меню этого поля в панели «Rows» настраиваем агрегацию (среднее).
Таким образом получили непрерывный график как в оригинале с возможностью узнать точное значение индекса на дату.
Если дополнить полученный набор данных новым набором данных с дневными свечами тикера (например CRM (Salesforce Inc.)), то можно создать визуализацию для анализа зависимости стоимости акции и объёма торгов от настроения рынка.
Научиться создавать подобные отчеты и визуализации можно на онлайн-образовательной платформе Академия Аналитики. Там доступно несколько онлайн курсов посвященных Tableau, которые позволят научиться создавать отчеты с самых основ.
Итоги:
- При помощи WebPlotDigitizer можно быстро оцифровать графики – извлечь набор данных из точек на графике, а далее этот набор данных можно быстро импортировать в Tableau для дальнейшего анализа. Это удобно если самого набора данных нет, но график на основании этого набора данных есть. Пример из области бизнеса – оцифровка графиков из обзоров аналитических агентств для сравнения показателей вашей компании за период со среднеотраслевыми показателями за аналогичный период.
- На примере из области рынка ценных бумаг проанализировали зависимость стоимости акции и объёма торгов по тикеру CRM от индекса страха и жадности (Fear and Greed Index). Tableau позволяет просто и удобно решать задачи, связанные с анализом рынка ценных бумаг.
Автор: Артем Шевченко, АНАЛИТИКА ПЛЮС
Хотите узнать, как провести анализ и сделать отчеты быстро?
Нам доверяют: