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

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

Что такое графики дождевых облаков?

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

В этой статье мы узнаем, как использовать и реализовать такие типы графиков в Python с помощью библиотек numpy и matplotlib.

Загрузка набора данных

Для простоты в этом примере мы создадим два случайных распределения в заданном диапазоне значений.

Давайте импортируем необходимые библиотеки

# Imports
import numpy as np
import matplotlib.pyplot as plt

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

# Generate random distribution of integers between 0-10 as the first feature
x1 = np.random.choice([0,1,2,3,4,5,6,7,8,9,10], p=[0.01, 0.01, 0.15, 0.19, 0.05, 0.11, 0.2, 0.16, 0.10, 0.01, 0.01], size=(500))

# Apply random noise on each sample so they don't overlap on the x-axis in scatter plot
idxs = np.arange(len(x1))
out = x1.astype(float)
out.flat[idxs] += np.random.uniform(low=-1, high=1, size=len(idxs))
x1 = out

# Generate random distribution of integers between 6-17 as the second feature
x2 = np.random.choice([6,7,8,9,10,11,12,13,14,15,16,17], p=[0.01, 0.01, 0.15, 0.23, 0.14, 0.06, 0.05, 0.10, 0.12, 0.11, 0.01, 0.01], size=(500))

# Apply random noise on each sample so they don't overlap on the y-axis in scatter plot
idxs = np.arange(len(x2))
out = x2.astype(float)
out.flat[idxs] += np.random.uniform(low=-1, high=1, size=len(idxs))
x2 = out

# Combine features in a list
data_x = [x1, x2]

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

Визуализация данных

fig, ax = plt.subplots(figsize=(8, 4))

# Create a list of colors for the boxplots based on the number of features you have
boxplots_colors = ['yellowgreen', 'olivedrab']

# Boxplot data
bp = ax.boxplot(data_x, patch_artist = True, vert = False)

# Change to the desired color and add transparency
for patch, color in zip(bp['boxes'], boxplots_colors):
    patch.set_facecolor(color)
    patch.set_alpha(0.4)

# Create a list of colors for the violin plots based on the number of features you have
violin_colors = ['thistle', 'orchid']

# Violinplot data
vp = ax.violinplot(data_x, points=500, 
               showmeans=False, showextrema=False, showmedians=False, vert=False)

for idx, b in enumerate(vp['bodies']):
    # Get the center of the plot
    m = np.mean(b.get_paths()[0].vertices[:, 0])
    # Modify it so we only see the upper half of the violin plot
    b.get_paths()[0].vertices[:, 1] = np.clip(b.get_paths()[0].vertices[:, 1], idx+1, idx+2)
    # Change to the desired color
    b.set_color(violin_colors[idx])

# Create a list of colors for the scatter plots based on the number of features you have
scatter_colors = ['tomato', 'darksalmon']

# Scatterplot data
for idx, features in enumerate(data_x):
    # Add jitter effect so the features do not overlap on the y-axis
    y = np.full(len(features), idx + .8)
    idxs = np.arange(len(y))
    out = y.astype(float)
    out.flat[idxs] += np.random.uniform(low=-.05, high=.05, size=len(idxs))
    y = out
    plt.scatter(features, y, s=.3, c=scatter_colors[idx])

plt.yticks(np.arange(1,3,1), ['Feature 1', 'Feature 2'])  # Set text labels.
plt.xlabel('Values')
plt.title("Raincloud plot")
plt.show()

Результатом приведенного выше фрагмента кода будет следующий график:

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

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

Обо мне

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

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

Рекомендации

[1] Аллен М., Поджиали Д., Уитакер К. et al. График дождевых облаков: мультиплатформенный инструмент для надежной визуализации данных (2019 г.) https://wellcomeopenresearch.org/articles/4 -63/в2