У меня есть набор данных с огромным количеством функций, поэтому анализ матрицы корреляции стал очень трудным. Я хочу построить корреляционную матрицу, которую мы получаем, используя dataframe.corr()
функцию из библиотеки панд. Есть ли встроенная функция, предоставляемая библиотекой панд для построения этой матрицы?
212
Ответы:
Вы можете использовать
pyplot.matshow()
отmatplotlib
:Редактировать:
В комментариях был запрос как поменять метки оси. Вот роскошная версия, которая нарисована на большем размере фигуры, имеет метки осей, соответствующие рамке данных, и легенду цветовой шкалы для интерпретации цветовой шкалы.
Я включаю, как отрегулировать размер и вращение надписей, и я использую пропорции, чтобы цветовая полоса и основная фигура выглядели одинаково.
источник
AttributeError: 'module' object has no attribute 'matshow'
import matplotlib.pyplot as plt
?Если вашей главной целью является визуализация матрицы корреляции, а не создание графика как такового, удобные
pandas
варианты стилей являются жизнеспособным встроенным решением:Обратите внимание, что это должно быть в бэкэнде, поддерживающем рендеринг HTML, таком как Блокнот JupyterLab. (Автоматический светлый текст на темном фоне взят из существующего PR, а не из последней выпущенной версии,
pandas
0.23).стайлинг
Вы можете легко ограничить точность цифр:
Или вообще избавьтесь от цифр, если вы предпочитаете матрицу без аннотаций:
Документация по стилю также содержит инструкции по более сложным стилям, например, как изменить отображение ячейки, над которой находится указатель мыши. Чтобы сохранить вывод, вы можете вернуть HTML, добавив
render()
метод, а затем записать его в файл (или просто сделать снимок экрана для менее формальных целей).Сравнение времени
В моем тестировании он
style.background_gradient()
был в 4 раза быстрееplt.matshow()
и в 120 раз быстрее, чемsns.heatmap()
с матрицей 10х10. К сожалению, она не масштабируется так же хорошоplt.matshow()
: обе матрицы занимают примерно одинаковое время для матрицы 100x100 иplt.matshow()
в 10 раз быстрее для матрицы 1000x1000.Сохранение
Есть несколько возможных способов сохранить стилизованный фрейм данных:
render()
метод, а затем запишите результат в файл..xslx
файл с условным форматированием, добавивto_excel()
метод.Обновление для панд> = 0,24
Установив
axis=None
, теперь можно вычислять цвета на основе всей матрицы, а не на столбец или на строку:источник
import seaborn as sns corr = df.corr() cm = sns.light_palette("green", as_cmap=True) cm = sns.diverging_palette(220, 20, sep=20, as_cmap=True) corr.style.background_gradient(cmap=cm).set_precision(2)
corr.style.background_gradient(cmap='coolwarm')
. В настоящее время нет способа центрировать карту по конкретному значению, что может быть хорошей идеей для расходящихся карт.Попробуйте эту функцию, которая также отображает имена переменных для матрицы корреляции:
источник
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')
если вы хотите вертикальную ориентацию имен столбцов по оси хplt.tight_layout()
может также быть полезным для длинных имен столбцов.Тепловая карта Seaborn:
источник
Вы можете наблюдать взаимосвязь между объектами, либо рисуя тепловую карту из морских пятен или матрицу рассеяния из панд.
Матрица рассеяния:
Если вы хотите визуализировать и асимметрию каждой функции - используйте парные участки морского происхождения.
Тепловая карта Sns:
Результатом будет карта корреляции объектов. то есть см. пример ниже.
Корреляция между продуктом и моющими средствами высока. Так же:
Продукты с высокой корреляцией:Из парных графиков: Вы можете наблюдать тот же набор отношений из парных графиков или матрицы рассеяния. Но из этого мы можем сказать, являются ли данные нормально распределенными или нет.
Примечание. Выше приведен тот же график, взятый из данных, которые используются для построения тепловой карты.
источник
from matplotlib import pyplot as pl
Вы можете использовать метод imshow () из matplotlib
источник
Если вы используете dataframe,
df
вы можете просто использовать:источник
Графика statmodels также дает хороший вид на матрицу корреляции
источник
Для полноты, самое простое из известных мне решений с seaborn на конец 2019 года, если кто-то использует Jupyter :
источник
Наряду с другими методами также хорошо иметь парный график, который даст график рассеяния для всех случаев:
источник
Матрица корреляции формы, в моем случае zdf - это датафрейм, который мне нужен для выполнения матрицы корреляции.
Тогда мы можем сделать скриншот. или конвертировать HTML в файл изображения.
источник