8 советов по эффективной визуализации данных

8 советов по эффективной визуализации данных

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

Основные вопросы обсуждения, по-видимому, касаются того, как лучше всего подготовить наш набор данных для моделирования, какие функции нам нужно спроектировать и включить в наше обучение, какую технику машинного обучения мы попробуем в первую очередь и как мы собираемся её оценивать?

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

В каждом отдельном Data Science-проекте участвуют как минимум 2 стороны: техническая (т. е. ученый(и)) и нетехническая (заинтересованная сторона может быть каким-либо менеджером или руководителем высшего звена).

Мы должны помнить, что основная цель науки о данных — повысить ценность бизнеса. Большинство людей не понимают данные. Мы должны показать их.

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

По моему многолетнему опыту, я вижу, чего в этой области не хватает профессионалам, особенно тем, кто работает на младших должностях (включая меня!).

Создание отличных визуализаций данных — это отдельный навык. Легко иметь визуализацию данных, которая вызывает больше путаницы, чем ясности.

В этом посте мы обсудим 8 советов о том, как создать красивую, интерпретируемую и эффективную визуализацию данных.

Совет № 1: Выберите правильный тип диаграммы

Безусловно, самым трудным навыком для освоения является интуиция, позволяющая выбрать правильный тип визуализации для использования.

У нас есть гистограммы, линейные диаграммы, круговые диаграммы, точечные диаграммы, тепловые карты и скрипичные диаграммы— и это лишь некоторые из них. Очень легко заблудиться и почувствовать себя подавленным.

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

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

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

# Example data data = {'apples': 10, 'bananas': 5, 'oranges': 7}

Давайте исследуем, как различные типы диаграмм передают смысл.

Во всех случаях нам потребуется импортировать следующие пакеты:

import matplotlib.pyplot as plt import pandas as pd

Гистограмма

# Bar chart plt.bar(data.keys(), data.values()) plt.title('Fruit Sales') plt.xlabel('Fruit') plt.ylabel('Number of Sales') plt.show()
8 советов по эффективной визуализации данных

Гистограмма отлично показывает значения по категориям (в нашем случае по видам фруктов). Эта диаграмма ясно показывает, что самыми продаваемыми фруктами были яблоки, а наименее продаваемыми — бананы.

Линейный график

# Line chart df = pd.DataFrame(data, index=[0]) df.plot.line() plt.title('Fruit Sales') plt.xlabel('Fruit') plt.ylabel('Number of Sales') plt.show()
8 советов по эффективной визуализации данных

Если мы попытаемся визуализировать те же данные в виде линейного графика, мы получим то же, что и выше — пустой график. Линейный график обычно используется для отображения тенденции во времени. Следовательно, нам потребуется отслеживать какую-то «движущуюся» переменную. В этом случае это могут быть продажи в месяц за несколько разных месяцев.

Точечная диаграмма

Мы также можем сопоставить одни и те же категории фруктов с числом и визуализировать их в виде точечной диаграммы. Предположим, у нас есть 5 категорий и соответствующие им значения.

# Scatter plot x = [1, 2, 3, 4, 5] y = [10, 5, 8, 3, 6] plt.scatter(x, y) plt.title('Data Points') plt.xlabel('X') plt.ylabel('Y') plt.show()
8 советов по эффективной визуализации данных

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

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

Совет № 2: Эффективно используйте цвет

Я не могу не подчеркнуть этого — цвет — ваш лучший друг в визуализации.

Используйте цвета, чтобы выделить основные (или интересные) выводы.

Используйте цвета для разделения групп.

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

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

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

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

Вспомните пример с гистограммой, который мы показывали ранее. Давайте оживим её некоторыми цветами.

import matplotlib.pyplot as plt import pandas as pd data = {'apples': 10, 'bananas': 5, 'oranges': 7} # create a figure with two subplots fig, axs = plt.subplots(ncols=2, figsize=(10, 4)) # plot the first chart on the left subplot axs[0].bar(data.keys(), data.values()) axs[0].set_title('Fruit Sales') axs[0].set_xlabel('Fruit') axs[0].set_ylabel('Number of Sales') # Custom color palette colors = ['#C5283D', '#E9724C', '#FFC857'] # plot the second chart on the right subplot axs[1].bar(data.keys(), data.values(), color=colors) axs[1].set_title('Fruit Sales') axs[1].set_xlabel('Fruit') axs[1].set_ylabel('Number of Sales') # adjust the spacing between the subplots fig.tight_layout() # show the plot plt.show()
8 советов по эффективной визуализации данных

Совет № 3: Будьте проще

Как и в большинстве вещей в жизни: чем проще, тем лучше!

Не включайте в сюжет ненужные элементы или стили, если они не добавляют ценности.

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

Дополнительные вещи будут служить только одной цели: отвлекать вашу аудиторию.

Предположим, есть набор данных, содержащий общие продажи трёх разных продуктов — A, B и C. Мы хотим создать диаграмму, чтобы показать тенденции продаж с течением времени:

import matplotlib.pyplot as plt import numpy as np # Generate some fake data months = np.arange(1, 7) sales_a = np.array([100, 120, 90, 110, 130, 95]) sales_b = np.array([80, 90, 100, 110, 120, 130]) sales_c = np.array([70, 80, 90, 100, 110, 120]) # Create the chart fig, axs = plt.subplots(3, sharex=True, sharey=True) axs[0].plot(months, sales_a, color='red') axs[0].set_title('Product A') axs[1].plot(months, sales_b, color='green') axs[1].set_title('Product B') axs[2].plot(months, sales_c, color='blue') axs[2].set_title('Product C') fig.suptitle('Sales by Product') plt.show()
8 советов по эффективной визуализации данных

Вышеупомянутое выполняет свою работу, но довольно плохо. У нас есть несколько диаграмм, каждая со своим масштабом, заголовком и цветом. Трудно следить и сравнивать.

Давайте немного упростим это, не так ли?

import matplotlib.pyplot as plt import numpy as np # Generate some fake data months = np.arange(1, 7) sales_a = np.array([100, 120, 90, 110, 130, 95]) sales_b = np.array([80, 90, 100, 110, 120, 130]) sales_c = np.array([70, 80, 90, 100, 110, 120]) # Create the chart plt.plot(months, sales_a, color='red', label='Product A') plt.plot(months, sales_b, color='green', label='Product B') plt.plot(months, sales_c, color='blue', label='Product C') plt.title('Sales by Product') plt.legend() plt.show()
8 советов по эффективной визуализации данных

Гораздо лучше, нет?

Теперь мы можем легко сравнить тенденции друг с другом.

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

Совет № 4: Обеспечьте контекст

Я не могу не упомянуть этого — предоставьте контекст!

Удивительно, сколько графиков, которые я регулярно вижу, не имеют названия или маркированных осей. Ваша аудитория не умеет читать мысли. Пусть они знают, что они видят!

При необходимости добавляйте метки, заголовки, легенды, источники данных и аннотации.

Вот пример плохого сюжета без контекста (слева) и отличного сюжета с контекстом (справа).

8 советов по эффективной визуализации данных

Совет № 5: Используйте пропорциональное представление

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

Будьте осторожны с искажением ваших данных.

Например, рассмотрим приведённую ниже диаграмму:

import matplotlib.pyplot as plt import pandas as pd # Example data data = {'apples': 10, 'bananas': 5, 'oranges': 7} # First chart: bar chart with proportional representation and inconsistent y-axis plt.subplot(1, 2, 1) plt.bar(data.keys(), data.values()) plt.ylim(0, 500) plt.title('Fruit Sales') plt.xlabel('Fruit') plt.ylabel('Quantity Sold') # Second chart: bar chart with proportional representation and consistent y-axis plt.subplot(1, 2, 2) plt.bar(data.keys(), data.values()) plt.ylim(0, 12) plt.title('Fruit Sales') plt.xlabel('Fruit') plt.ylabel('Quantity Sold') # Adjust the spacing between the charts plt.subplots_adjust(wspace=0.3) # Display the charts plt.show()
8 советов по эффективной визуализации данных

Разница между двумя диаграммами видна невооружённым глазом. Левая показана полностью вне масштаба, что очень затрудняет оценку и сравнение графиков.

Правая диаграмма, с другой стороны, ясно показывает различия.

Совет № 6: Расскажите историю

Мы должны постараться сделать схему максимально понятной.

Мы также должны постараться сделать график максимально интересным.

Отличные графики передают прямое сообщение. Они выбирают интересное наблюдение или озарение и рассказывают о нём. Диаграмма должна использоваться в качестве средства поддержки претензии.

import matplotlib.pyplot as plt import pandas as pd # Example data year = [2015, 2016, 2017, 2018, 2019, 2020] sales = [100, 150, 200, 180, 250, 300] # Line chart with a narrative plt.plot(year, sales) plt.title('Sales Growth') plt.xlabel('Year') plt.ylabel('Number of Sales') plt.text(2016.5, 160, 'First year of rapid growth') plt.text(2018.2, 195, 'Sales decline due to recession') plt.text(2019.7, 265, 'Sales pick up after the recession') plt.show()
8 советов по эффективной визуализации данных

Совет № 7: Учитывайте свою аудиторию

Сюжет должен служить интересам аудитории.

Сюжет должен помочь вашей аудитории быстрее прийти к собственным выводам.

У разных зрителей разные аппетиты.

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

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

Аудитория будет влиять на наш сюжет. Нам нужно использовать концепции и язык, который знает и понимает наша аудитория.

Совет № 8: Сделайте данные интерактивными

Иногда наши данные сложны по своей природе, и единственный способ сделать их понятными для нашей аудитории — сделать их интерактивными.

Это позволило бы нашей аудитории вручную исследовать данные и делать собственные выводы.

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

Plotly — отличный инструмент для создания интерактивных графиков.

import plotly.graph_objs as go import numpy as np # Generate random data x = np.random.rand(100) y = np.random.rand(100) # Create a Plotly trace object trace = go.Scatter( x = x, y = y, mode = 'markers' ) # Create a Plotly layout object layout = go.Layout( title = 'Interactive Scatter Plot', xaxis = dict(title = 'X Axis'), yaxis = dict(title = 'Y Axis'), hovermode = 'closest' ) # Create a Plotly figure object that combines the trace and layout fig = go.Figure(data=[trace], layout=layout) # Display the interactive plot in the Jupyter Notebook fig.show()

Заключение

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

Следуя этим 8 советам, вы сможете создавать более качественные визуализации, которые помогут эффективно и чётко передать ваши выводы.

1
Начать дискуссию