Мощный метод визуализации данных, который состоит из комбинации скрипичных, точечных и коробчатых диаграмм.
В отдельности каждый из вышеупомянутых методов визуализации имеет свои преимущества и недостатки. Но что, если бы мы могли объединить их вместе и получить более надежный метод визуализации данных, а именно графики дождевых облаков?
Что такое графики дождевых облаков?
Графики дождевых облаков — это более надежная и интуитивно понятная форма визуализации данных. Как я упоминал ранее, они представляют собой сочетание нескольких методов, которые в совокупности дают отличный обзор большинства статистики и шаблонов, которые нам нужно знать о наших наблюдениях в наборе данных. .
В этой статье мы узнаем, как использовать и реализовать такие типы графиков в 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