Добавление драмы к вашим визуализациям данных

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

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

Пришло время перейти от «просто визуализации» к «визуальному повествованию». Готовы вывести свою игру визуализации данных Python на новый уровень?

Займемся взломом!

Прием 1: использование метафор в визуализации

Давайте превратим наши данные о продажах в потрясающий рассвет, представляющий «новый рассвет» для бизнеса. Мы можем сделать это, используя метод fill_between matplotlib для создания эффекта градиента:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

# Sales data as a rising sun
sales_data = np.random.randint(100, 200, 50).tolist()
sales_data.sort()
fig, ax = plt.subplots()
ax.plot(sales_data, color='black')
# Create a gradient effect for the sunrise
for i in range(len(sales_data)):
    ax.fill_between(range(i, i+2), 0, sales_data[i:i+2], color=plt.get_cmap('YlOrRd')(i*5))
plt.title('Sales Data: A New Dawn')
plt.xlabel('Time')
plt.ylabel('Sales')
plt.show()

Это создает поразительный эффект восхода солнца:

И помогает превратить ваши скучные данные о продажах в красивое повествование о росте и новых начинаниях.

Хитрость 2: овладение искусством приостановки в визуализации данных

Мы собираемся превратить обычный линейный график в эмоциональные американские горки. Вместо того, чтобы просто раскрывать цену акций, мы заставим аудиторию предвидеть максимумы и минимумы. Мы можем добиться этого, используя функцию FuncAnimation из matplotlib.animation:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
# A suspenseful reveal of a stock price
stock_price = np.random.randint(50, 100, 50)
fig, ax = plt.subplots()
line, = ax.plot(stock_price, color='red')
def update(num, line):
    line.set_data(np.arange(num), stock_price[:num])
    return line,
ani = animation.FuncAnimation(fig, update, frames=len(stock_price), fargs=[line], repeat=False)
plt.title('Stock Price Reveal')
plt.xlabel('Time')
plt.ylabel('Price')
plt.show()

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

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

Хитрость 3: Эмоционально заряженные цветовые схемы

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

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Sales data with emotionally-charged colors
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
sales_data = np.random.randint(50, 100, 12)
# Convert to DataFrame
df = pd.DataFrame(sales_data.reshape(-1, len(months)), 
                  columns=months)
# Create a heatmap
sns.heatmap(df, cmap='coolwarm', annot=True)
plt.title('Sales Data with Emotionally-Charged Colors')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()

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

Вы либо бежите ГОРЯЧИМ (красный), либо ХОЛОДНЫМ (синий). В любом случае, между ними есть драматические контрасты.

Прием 4: Сравнение парето-фронта — игра меняет правила игры

Вы когда-нибудь слышали о принципе Парето? Это концепция, названная в честь итальянского экономиста Вильфредо Парето, согласно которой примерно 80% следствий возникают из-за 20% причин. При визуализации данных мы можем использовать этот принцип для демонстрации «лучших» вариантов, где «лучший» — это субъективный термин, основанный на рассматриваемых вами переменных.

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

Вот как вы можете создать такой график со списком стратегий, а затем для демонстрации с некоторыми случайными затратами и связанными с ними увеличениями продаж. И, наконец, диаграмма рассеяния с цветовой кодировкой и аннотациями:

import matplotlib.pyplot as plt
import numpy as np

# Marketing strategies
strategies = ['SEO', 'Email', 'Affiliate', 'PPC', 'Content', 'Social', 'Display', 'Direct', 'Referral', 'PR']

# Cost and sales increase for each strategy
cost = np.random.randint(1000, 5000, 10)
sales_increase = np.random.randint(500, 2000, 10)

# Pareto front
pareto_front = sales_increase - cost
pareto_front_sorted = np.argsort(pareto_front)

plt.figure(figsize=(10,6))
plt.scatter(cost, sales_increase, c=pareto_front, cmap='viridis', s=100)
plt.colorbar(label='Pareto Front')
plt.xlabel('Cost')
plt.ylabel('Sales Increase')
for i, txt in enumerate(strategies):
    plt.annotate(txt, (cost[i], sales_increase[i]))
plt.title('Pareto Front Comparison of Marketing Strategies')
plt.show()

И получившийся график:

В этой визуализации цвет каждой точки представляет значение фронта Парето, т. е. увеличение продаж за вычетом затрат. Стратегии с наивысшими значениями являются нашими «лучшими» вариантами в соответствии с принципом Парето.

Этот сюжет не только обеспечивает четкое сравнение, но и его яркие цвета и стратегические аннотации делают его запоминающимся.

Поговорите о рассказывании историй с данными!

Прием 5: Использование интерактивности для персонализированных историй

Давайте поднимем нашу точечную диаграмму до трехмерного интерактивного графика, предоставив нашей аудитории возможность навигации и изучения данных:

import plotly.express as px

# Interactive 3D scatter plot
df = px.data.iris()
fig = px.scatter_3d(df, x='sepal_width', y='sepal_length', z='petal_length', color='species', 
                    size='petal_length', hover_data=['petal_width'])
fig.show()

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

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

Завершение…

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

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

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

В конце концов, мы не просто вычисляем цифры — мы рассказчики, и наше средство — это данные.

Приятного повествования!

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

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

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .