본문 바로가기
공부 목록/IT & 프로그래밍

iris 데이터의 상관관계를 파이썬에서 heatmap으로 그려보기

by 독학박사 2023. 5. 26.

목차


     Heatmap은 데이터를 시각화하기 위해 사용되는 효과적인 방법 중 하나입니다. 주로 행렬 형태의 데이터를 시각적으로 나타내어 각 항목의 상대적인 크기나 중요도를 시각적으로 이해하기 쉽게 해 줍니다. Heatmap은 색상을 사용하여 데이터의 패턴, 트렌드, 상관관계 등을 파악할 수 있도록 도와줍니다. 오늘은 heatmap을 언제 사용하는지 알아보고, iris 데이터 셋 불러오기와 heatmap을 그려보는 것까지 정리해 보겠습니다.

     

     

    파이썬 상관관계 heatmap 그리기
    파이썬 상관관계 heatmap 그리기

     

    1. 어떠한 경우에 heatmap을 사용하는가?

    Heatmap은 데이터의 밀집도를 색상으로 나타내기 때문에 시각적으로 직관적인 표현을 제공합니다. 이를 통해 데이터에서 숨겨진 패턴이나 경향성을 발견하고, 결정을 내리는 데 도움을 줄 수 있습니다.

     

    데이터 분석 및 시각화:

     Heatmap은 특정 변수나 차원에 따른 데이터 패턴을 보여줄 수 있습니다. 예를 들어, 열 차원은 시간, 행 차원은 특정 요소를 나타낼 수 있으며, 각 셀은 해당 시간과 특정 요소에 대한 값을 나타냅니다. 이를 통해 데이터 세트에서 특정 패턴이나 트렌드를 식별하거나 변수 간의 상관관계를 시각화할 수 있습니다.

     

    온도, 날씨, 지리 정보 시각화: 

    Heatmap은 지리적 데이터를 시각화하는 데 특히 유용합니다. 예를 들어, 지도상에서 특정 지역의 온도, 강수량, 인구 밀도 등을 색상으로 표시하여 해당 지역의 특성을 한눈에 파악할 수 있습니다.

     

    웹사이트 및 사용자 동작 분석: 

    웹사이트 트래픽, 클릭, 마우스 이동 등의 사용자 동작 데이터를 heatmap으로 표시하여 웹사이트의 핫스폿, 사용자 관심 지점, 특정 페이지의 효과 등을 분석할 수 있습니다. 이를 통해 웹사이트 디자인 및 사용자 경험을 향상할 수 있는 인사이트를 얻을 수 있습니다.

     

    바이오인포매틱스 및 의료 분야: 

    Heatmap은 유전자 발현, 단백질 상호 작용, 의료 영상 등의 분야에서 사용될 수 있습니다. 예를 들어, 유전자 발현 데이터에서 각 유전자의 발현 수준을 heatmap으로 표시하여 특정 유전자 그룹이나 패턴을 파악할 수 있습니다.

     

     

    2. data set() 불러오기

     데이터의 시각화를 테스트를 위해서는 데이터 셋이 필요합니다. 오늘은 파이썬 라이브러리  하나인 seaborn에서 iris 데이터 셋을 가져와서 시각화 테스트를 진행하겠습니다. seaborn에서는 다양한 데이터 셋을 제공하고 있습니다. 어떤 데이터 셋이 있는지도 같이 확인해 보겠습니다. 아래의 코드를 실행하게 되는 seaborn 데이터 셋을 모두 확인해   있습니다.

     

    import seaborn as sns
    
    sns.get_dataset_names()

     

     

     

     

    seaborn에서 제공하는 데이터 셋들
    seaborn에서 제공하는 데이터 셋들

     

     맥북(macos)에서는 seaborn 라이브러리의 데이터 셋을 불러오려고 하면 에러가 발생할 수 있습니다. python 3.10 폴더 내 'install Certification.command'를 실행하고 나면 문제없이 데이터를 불러올 수 있습니다.

     

    3. matplotlib imshow() 이용한 heatmap 그리기

    heatmap 그리게 해주는 함수는 여러 종류가 있지만 그중 하나의 방법인 matplotlib 함수인 imshow() 이용하여 heatmap을 그려보려고 합니다. 2번 주제에서 말씀드린 iris의 데이터를 로딩하여 iris 변수에 입력합니다. 이때, iris는 dataframe의 형태를 띱니다. 

     

    seaborn에서 로딩한 iris 데이터 셋 모습
    seaborn에서 로딩한 iris 데이터 셋 모습

     

    위의 데이터 셋의 상관관계 분석한 결과를 imshow()로 heatmap을 그리는 코드입니다.

     

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # iris 데이터셋 로드
    iris = sns.load_dataset("iris")
    
    # 상관 관계 계산
    corr_matrix = iris.corr()
    
    # Heatmap으로 상관 관계 표시
    plt.imshow(corr_matrix, cmap='coolwarm', vmin=-1, vmax=1)
    
    # x, y 축 눈금 설정
    plt.xticks(range(len(corr_matrix.columns)), corr_matrix.columns, rotation=45)
    plt.yticks(range(len(corr_matrix.columns)), corr_matrix.columns)
    
    # 주석 추가
    for i in range(len(corr_matrix.columns)):
        for j in range(len(corr_matrix.columns)):
            text = "{:.2f}".format(corr_matrix.iloc[i, j])
            plt.annotate(text, xy=(j, i), ha='center', va='center')
    
    # 컬러바 추가
    plt.colorbar()
    
    # 그래프 출력
    plt.show()

     

    imshow()를 이용한 iris 상관관계 heatmap
    imshow()를 이용한 iris 상관관계 heatmap

     

     

    4. seaborn의 heatmap 함수를 이용하여 heatmap 그리기

     위에서는 matplotlib의 함수인 imshow()를 이용하여 heatmap을 그렸는데, 코드가 조금 길 뿐만 아니라 그래프도 그다지 이쁘지 않습니다. seaborn에서는 특화된 그래프를 그릴 수 있는 함수들도 제공합니다. seaborn의 heatmap 함수를 이용하여 위의 heatmap을 비슷하게 그려보겠습니다.

     

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # iris 데이터셋 로드
    iris = sns.load_dataset("iris")
    
    # 상관 관계 계산
    corr_matrix = iris.corr()
    
    # Heatmap으로 상관 관계 표시
    sns.heatmap(corr_matrix, cmap='coolwarm', annot=True, fmt=".2f")
    
    # 그래프 출력
    plt.show()

     

    seaborn의 heatmap을 이용한 그래프
    seaborn의 heatmap을 이용한 그래프

     

     비교에 대한 설명을 별도로 하지 않겠습니다. 코드의 길이와 그래프를 비교해 보시기 바랍니다.

     

     

    5. 마치며

     주로 행렬 형태의 데이터를 시각적으로 나타내어 각 항목의 상대적인 크기나 중요도를 시각적으로 이해하기 쉽게 해주는 heatmap을 그리는 방법에 대해 정리해 보았습니다. 중간에 seaborn의 데이터 셋 불러오는 방법과 마지막에는 두 가지 방법으로 heatmap을 그리는 예시를 보여드렸습니다.

     

     저는 주로 seaborn을 이용하여 heatmap을 그립니다. 그래프 안의 수치는 상관성을 의미하는 수치로 1(정 관계)이나 -1(역 관계)에 가까울수록 상관성이 높다는 것을 의미합니다. 0에 가까우면 데이터 간 상관성이 없다는 것입니다.