«От направления к науке о данных», Джордж Сейф,Сердце Машины собрано,Участие: Компьютерщик AI, Лю Сяокунь.
Тепловая карта, 2D-карта плотности, карта паутины и дендрограмма — вы использовали все эти методы визуализации?
Визуализация данныхнаука о данныхилимашинное обучениеочень важная часть проекта. Часто вам нужно провести исследовательскую работу в начале проекта.анализ данных(EDA), чтобы получить некоторое представление о данных, а создание визуализаций действительно может сделать задачу анализа более ясной и легкой для понимания, особенно для крупномасштабных многомерных наборов данных. Ближе к концу проекта также важно представить конечный результат в ясной, лаконичной и убедительной форме, чтобы ваша аудитория (обычно не технические клиенты) могла понять.
Читатели, возможно, читали мою предыдущую статью «5 быстрых и простых визуализаций данных в Python с кодом», в которой я представил 5 основных методов визуализации данных: точечная диаграмма, линейный график, гистограмма, гистограмма и блок-диаграмма. Это простые, но мощные визуализации, которые позволяют получить представление о вашем наборе данных. В этой статье мы увидим еще 4 способа визуализации данных! Эти методы более подробно описаны в этой статье, и их можно использовать после прочтения основных методов в предыдущей статье для извлечения более подробной информации из данных.
Тепловая карта
Тепловая карта — это матричное представление данных, в котором значение каждого элемента матрицы представлено цветом. Разные цвета представляют разные значения, и два или два признака, которые необходимо сравнить, связаны между собой индексом матрицы. Тепловые карты отлично подходят для демонстрации взаимосвязи между несколькими переменными характеристик, потому что вы можете определить размер матричного элемента в этом месте непосредственно по цвету. Вы также можете увидеть, как каждое отношение сравнивается с другими отношениями в наборе данных, просмотрев другие точки на тепловой карте. Цвет настолько интуитивно понятен, что дает нам очень простой способ интерпретации данных.
Теперь давайте посмотрим на код реализации. По сравнению с «matplotlib», «морской» можно использовать для рисования более сложной графики, обычно для этого требуется больше компонентов, таких как несколько цветов, графики или переменных. "matplotlib" может использоваться для отображения графики, "NumPy"можно использовать для генерации данных, а "панды" можно использовать для обработки данных! Графика — это просто простая функция «морского происхождения».
# Importing libs
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Create a random dataset
data = pd.DataFrame(np.random.random((10,6)), columns=["Iron Man","Captain America","Black Widow","Thor","Hulk", "Hawkeye"])
print(data)
# Plot the heatmap
heatmap_plot = sns.heatmap(data, center=0, cmap='gist_ncar')
plt.show()
2D-карта плотности
Двухмерный график плотности представляет собой интуитивно понятное расширение одномерной версии графика плотности, которое имеет преимущество перед одномерной версией, поскольку позволяет увидеть распределение вероятностей двух переменных. Например, на двухмерном графике плотности ниже тиковая диаграмма справа показывает вероятность каждой точки в цвете. Место, где наши данные имеют наибольшую вероятность (то есть место, где точки данных наиболее сконцентрированы), кажется, имеет размер около 0,5 и скорость = 1,4. Как вы уже знаете, 2D-карта плотности очень полезна для быстрого определения того, где наши данные наиболее сконцентрированы с двумя переменными, а не только с одной переменной, как 1D-карта плотности. Когда у вас есть две переменные, которые очень важны для выходных данных, и вы хотите понять, как они взаимодействуют при распределении выходных данных, просмотр данных с двумерным графиком плотности очень полезен.
В очередной раз оказывается, что кодить с помощью "сиборн" очень удобно! На этот раз мы создадим асимметричное распределение, чтобы сделать результаты визуализации данных более интересными. Вы можете настроить большинство дополнительных параметров, чтобы сделать визуализацию более четкой.
# Importing libs
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import skewnorm
# Create the data
speed = skewnorm.rvs(4, size=50)
size = skewnorm.rvs(4, size=50)
# Create and shor the 2D Density plot
ax = sns.kdeplot(speed, size, cmap="Reds", shade=False, bw=.15, cbar=True)
ax.set(xlabel='speed', ylabel='size')
plt.show()
иллюстрация паутины
Паучьи графики — один из лучших способов показать отношения «один ко многим». Другими словами, вы можете отображать и просматривать значения нескольких переменных, связанных с переменной или категорией. На графике паутины значение одной переменной по отношению к другой ясно и очевидно, потому что в определенном направлении покрываемая площадь и длина от центра становятся больше. Если вы хотите увидеть, как различные классы объектов описываются этими переменными, вы можете построить их рядом друг с другом. В приведенной ниже таблице легко сравнить различные атрибуты Мстителей и увидеть, в чем заключаются их сильные стороны! (Обратите внимание, что эти цифры случайны, у меня нет предубеждений против Мстителей.)
Здесь мы можем напрямую использовать «matplotlib» вместо «морской» для создания визуализации. Нам нужно, чтобы каждый атрибут был равномерно распределен по окружности. Мы установим метки для каждого угла, а затем нанесем значение в виде точки, расстояние от центра которой зависит от ее значения/размера. Наконец, для ясности мы будем использовать полупрозрачный цвет, чтобы заполнить область, ограниченную линиями, соединяющими точки атрибутов.
# Import libs
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# Get the data
df=pd.read_csv("avengers_data.csv")
print(df)
"""
# Name Attack Defense Speed Range Health
0 1 Iron Man 83 80 75 70 70
1 2 Captain America 60 62 63 80 80
2 3 Thor 80 82 83 100 100
3 3 Hulk 80 100 67 44 92
4 4 Black Widow 52 43 60 50 65
5 5 Hawkeye 58 64 58 80 65
"""
# Get the data for Iron Man
labels=np.array(["Attack","Defense","Speed","Range","Health"])
stats=df.loc[0,labels].values
# Make some calculations for the plot
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))
# Plot stuff
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, labels)
ax.set_title([df.loc[0,"Name"]])
ax.grid(True)
plt.show()
Дерево
Мы используем древовидные диаграммы с начальной школы! Дендрограммы естественны и интуитивно понятны, что облегчает их интерпретацию. Узлы, которые связаны напрямую, тесно связаны, в то время как узлы с несколькими соединениями менее похожи. В визуализациях ниже я построил древовидную карту небольшого набора данных игр про покемонов на основе статистики Kaggle (здоровье, атака, защита, специальная атака, специальная защита, скорость).
Следовательно, статистически наиболее подходящие покемоны будут тесно связаны друг с другом. Например, в верхней части графика Arbor и Snapbills напрямую связаны, и если мы посмотрим на данные, у Arberles общий балл 438, а у Snapbills — 442, что довольно близко! Но если мы посмотрим на Ладу, то увидим, что у нее общий балл 413, что сильно отличается от Аберкромби и Остроклюва, поэтому в дендрограмме они разделены! Когда мы продвигаемся вверх по дереву, покемоны в зеленой группе больше похожи друг на друга, чем на любого покемона в красной группе, хотя прямой зеленой связи нет.
Для дендрограммы нам действительно нужно использовать «Scipy», чтобы нарисовать ее! Прочитав данные в наборе данных, мы удалим строковый столбец. Это сделано только для того, чтобы сделать визуализацию более интуитивной и понятной, но на практике преобразование этих строк в категориальные переменные дает лучшие результаты и сравнения. Мы также устанавливаем индекс фрейма данных, чтобы иметь возможность использовать его надлежащим образом в качестве столбца, ссылающегося на каждый узел. Последнее, что мне нужно сказать вам, это то, что для вычисления и рисования дендрограммы в «Scipy» требуется всего лишь простая строка кода.
# Import libs
import pandas as pd
from matplotlib import pyplot as plt
from scipy.cluster import hierarchy
import numpy as np
# Read in the dataset
# Drop any fields that are strings
# Only get the first 40 because this dataset is big
df = pd.read_csv('Pokemon.csv')
df = df.set_index('Name')
del df.index.name
df = df.drop(["Type 1", "Type 2", "Legendary"], axis=1)
df = df.head(n=40)
# Calculate the distance between each sample
Z = hierarchy.linkage(df, 'ward')
# Orientation our tree
hierarchy.dendrogram(Z, orientation="left", labels=df.index)
plt.show()
Исходная ссылка: https://towardsdatascience.com/4-more-quick-and-easy-data-visualizations-in-python-with-code-da9030ab3429