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

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

В каждом отдельном 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 советов по эффективной визуализации данных (Data visualization)

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

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

# 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 советов по эффективной визуализации данных (Data visualization)

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

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

Мы также можем сопоставить одни и те же категории фруктов с числом и визуализировать их в виде точечной диаграммы. Предположим, у нас есть 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 советов по эффективной визуализации данных (Data visualization)

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

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

Совет № 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 советов по эффективной визуализации данных (Data visualization)

Совет № 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 советов по эффективной визуализации данных (Data visualization)

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

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

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 советов по эффективной визуализации данных (Data visualization)

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

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

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

Совет № 4: Добавляйте описание

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

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

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

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

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

Совет № 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 советов по эффективной визуализации данных (Data visualization)

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

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

Совет № 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 советов по эффективной визуализации данных (Data visualization)

Совет № 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
2
+1
5
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *