수많은 기능을 가진 데이터 세트가 있으므로 상관 관계 매트릭스를 분석하는 것이 매우 어려워졌습니다. dataframe.corr()
팬더 라이브러리의 함수를 사용하여 얻은 상관 행렬을 플로팅하고 싶습니다 . 이 행렬을 플롯하기 위해 팬더 라이브러리에서 제공하는 내장 함수가 있습니까?
답변
다음 pyplot.matshow()
에서 사용할 수 있습니다 matplotlib
.
import matplotlib.pyplot as plt
plt.matshow(dataframe.corr())
plt.show()
편집하다:
주석에는 축 눈금 레이블을 변경하는 방법에 대한 요청이있었습니다. 다음은 더 큰 그림 크기로 그려지고 데이터 프레임과 일치하는 축 레이블과 색상 눈금을 해석하는 색상 막대 범례가있는 디럭스 버전입니다.
레이블의 크기와 회전을 조정하는 방법을 포함하고 있으며 색상 막대와 기본 그림의 높이가 같은 그림 비율을 사용하고 있습니다.
f = plt.figure(figsize=(19, 15))
plt.matshow(df.corr(), fignum=f.number)
plt.xticks(range(df.shape[1]), df.columns, fontsize=14, rotation=45)
plt.yticks(range(df.shape[1]), df.columns, fontsize=14)
cb = plt.colorbar()
cb.ax.tick_params(labelsize=14)
plt.title('Correlation Matrix', fontsize=16);
답변
주요 목표가 플롯 자체를 생성하는 대신 상관 관계 매트릭스를 시각화하는 것이라면 편리한 pandas
스타일링 옵션 은 실행 가능한 기본 제공 솔루션입니다.
import pandas as pd
import numpy as np
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
corr = df.corr()
corr.style.background_gradient(cmap='coolwarm')
# 'RdBu_r' & 'BrBG' are other good diverging colormaps
JupyterLab Notebook과 같이 HTML 렌더링을 지원하는 백엔드에 있어야합니다. (어두운 배경의 자동 밝은 텍스트는 기존 PR 버전이며 최신 릴리스 버전 인 pandas
0.23이 아닙니다 .)
스타일링
자릿수 정밀도를 쉽게 제한 할 수 있습니다.
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
또는 주석이없는 행렬을 선호하는 경우 숫자를 모두 제거하십시오.
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
스타일링 문서에는 마우스 포인터가 놓인 셀의 표시를 변경하는 방법과 같은 고급 스타일의 지침도 포함되어 있습니다. 출력을 저장하려면 render()
메서드 를 추가하여 HTML을 반환 한 다음 파일에 작성하거나 덜 공식적인 목적으로 스크린 샷을 찍을 수 있습니다.
시간 비교
내 테스트에서 10×10 매트릭스 보다 style.background_gradient()
4x 빠르고 plt.matshow()
120x 빠릅니다 sns.heatmap()
. 불행히도 그것은 잘 확장되지 않습니다 plt.matshow()
: 두 개는 100×100 행렬의 경우 거의 같은 시간이 걸리고 plt.matshow()
1000×1000 행렬의 경우 10 배 빠릅니다.
절약
양식화 된 데이터 프레임을 저장하는 몇 가지 방법이 있습니다.
- 메소드를 추가하여 HTML을 리턴 한
render()
후 출력을 파일에 작성하십시오. - 메소드
.xslx
를 추가하여 조건부 서식이 있는 파일로 저장하십시오to_excel()
. - 비트 맵을 저장하기 위해 imgkit과 결합
- 덜 공식적인 목적으로 스크린 샷을 만듭니다.
팬더 업데이트> = 0.24
을 설정 axis=None
하면 열 또는 행당이 아니라 전체 행렬을 기반으로 색상을 계산할 수 있습니다.
corr.style.background_gradient(cmap='coolwarm', axis=None)
답변
이 함수를 사용하면 상관 행렬의 변수 이름도 표시됩니다.
def plot_corr(df,size=10):
'''Function plots a graphical correlation matrix for each pair of columns in the dataframe.
Input:
df: pandas DataFrame
size: vertical and horizontal size of the plot'''
corr = df.corr()
fig, ax = plt.subplots(figsize=(size, size))
ax.matshow(corr)
plt.xticks(range(len(corr.columns)), corr.columns);
plt.yticks(range(len(corr.columns)), corr.columns);
답변
시본의 히트 맵 버전 :
import seaborn as sns
corr = dataframe.corr()
sns.heatmap(corr,
xticklabels=corr.columns.values,
yticklabels=corr.columns.values)
답변
seaborn에서 열지도를 그리거나 pandas에서 산란 행렬을 그려서 피처 간의 관계를 관찰 할 수 있습니다.
분산 매트릭스 :
pd.scatter_matrix(dataframe, alpha = 0.3, figsize = (14,8), diagonal = 'kde');
각 기능의 왜도를 시각화하려면 seaborn 쌍 그림을 사용하십시오.
sns.pairplot(dataframe)
Sns 히트 맵 :
import seaborn as sns
f, ax = pl.subplots(figsize=(10, 8))
corr = dataframe.corr()
sns.heatmap(corr, mask=np.zeros_like(corr, dtype=np.bool), cmap=sns.diverging_palette(220, 10, as_cmap=True),
square=True, ax=ax)
출력은 기능의 상관 맵이됩니다. 즉 아래 예를 참조하십시오.
식료품과 세제의 상관 관계가 높습니다. 비슷하게:
높은 상관 관계를 가진 Pdoducts :
- 식료품 및 세제.
중간 상관 관계가있는 제품 :
- 우유와 식료품
- 우유와 세제 _ 종이
상관 관계가 낮은 제품 :
- 우유와 델리
- 냉동 및 신선한.
- 냉동 및 델리.
Pairplots에서 : pairplots 또는 scatter matrix에서 동일한 관계 집합을 관찰 할 수 있습니다. 그러나 이것들로부터 우리는 데이터가 정상적으로 분포되어 있는지 아닌지를 말할 수 있습니다.
참고 : 위의 데이터는 히트 맵을 그리는 데 사용되는 데이터에서 가져온 것과 동일한 그래프입니다.
답변
matplotlib에서 imshow () 메소드를 사용할 수 있습니다
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.imshow(X.corr(), cmap=plt.cm.Reds, interpolation='nearest')
plt.colorbar()
tick_marks = [i for i in range(len(X.columns))]
plt.xticks(tick_marks, X.columns, rotation='vertical')
plt.yticks(tick_marks, X.columns)
plt.show()
답변
데이터 프레임 인 경우 df
간단하게 사용할 수 있습니다.
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(15, 10))
sns.heatmap(df.corr(), annot=True)