ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2월 1주차-2/7(2)]📊 상관관계 분석 및 Seaborn 활용 정리
    Why Not SW CAMP 5기/수업 기록 2025. 2. 7. 16:13

    NumPy와 Seaborn으로 살펴보는 데이터 분석과 시각화

    데이터 분석을 위해 가장 많이 사용하는 두 가지 라이브러리가 있습니다. NumPy는 수치 연산과 배열 연산을 빠르게 수행할 수 있도록 도와주는 라이브러리이며, Seaborn은 데이터를 시각적으로 분석하기 위한 강력한 도구입니다. 이번 글에서는 NumPy를 활용한 상관관계 분석Seaborn을 이용한 데이터 시각화 기법을 살펴보겠습니다.


    📌 NumPy로 상관관계 분석하기

    1️⃣ 상관관계란?

    변수들 간의 관계를 분석할 때 가장 중요한 개념이 **상관관계(correlation)**입니다.

    • 양의 상관관계(Positive Correlation): 한 변수가 증가하면 다른 변수도 증가
    • 음의 상관관계(Negative Correlation): 한 변수가 증가하면 다른 변수는 감소
    • 상관계수(correlation coefficient): 상관관계의 정도를 나타내는 수치 (값의 범위: -1 ~ 1)
      • 1에 가까울수록 강한 양의 상관관계
      • -1에 가까울수록 강한 음의 상관관계
      • 0에 가까울수록 관계가 거의 없음

    2️⃣ numpy.corrcoef()를 활용한 상관관계 분석

    NumPy의 corrcoef() 함수는 두 개 이상의 변수 간의 상관관계를 쉽게 구할 수 있습니다.

    import numpy as np
    
    np.random.seed(85)  # 동일한 결과를 얻기 위해 초기값 설정
    x = np.arange(0, 10)
    y1 = x * 2  # x와 완벽한 양의 상관관계
    
    print(np.corrcoef(x, y1))
    

    📌 결과:

    array([[1., 1.],
           [1., 1.]])
    

    💡 1.0은 완벽한 양의 상관관계를 의미합니다.


    3️⃣ 랜덤 데이터와의 상관관계 분석

    무작위 데이터를 생성하여 상관관계를 구해보겠습니다.

    y2 = x ** 3  # x의 세제곱 값
    y3 = np.random.randint(0, 100, size=10)  # 0~100 사이 랜덤 값
    
    print(np.corrcoef(x, y2))  # x와 y2의 상관관계
    print(np.corrcoef(x, y3))  # x와 y3의 상관관계
    

    📌 결과:

    array([[1.        , 0.90843373],   # x와 y2는 강한 양의 상관관계
           [0.90843373, 1.        ]])
    
    array([[1.       , 0.5002124],    # x와 y3는 약한 양의 상관관계
           [0.5002124, 1.       ]])
    

    4️⃣ 여러 변수 간의 상관관계 분석

    변수 여러 개를 한꺼번에 비교할 수도 있습니다.

    result = np.corrcoef((x, y2, y3))
    print(result)
    

    📌 결과:

    array([[1.        , 0.90843373, 0.5002124 ],
           [0.90843373, 1.        , 0.43149426],
           [0.5002124 , 0.43149426, 1.        ]])
    

    💡 0.9084처럼 1에 가까운 값은 강한 양의 상관관계를 의미합니다.


    5️⃣ 상관관계 행렬 시각화

    NumPy에서 계산한 상관관계를 시각적으로 표현해보겠습니다.

    import matplotlib.pyplot as plt
    
    plt.imshow(result, cmap='coolwarm')  # 색상 적용
    plt.colorbar()  # 색상 바 추가
    plt.show()
    

    🔍 imshow()를 활용하면 상관관계를 쉽게 색으로 표현할 수 있습니다.


    📌 Seaborn을 활용한 데이터 시각화

    1️⃣ Seaborn이란?

    Seaborn은 Matplotlib을 기반으로 한 시각화 라이브러리로, 더 고급스러운 차트를 쉽게 만들 수 있도록 도와줍니다.

    import seaborn as sns
    sns.set_theme(style="darkgrid")  # 테마 설정
    

    2️⃣ Seaborn 기본 데이터셋 활용

    Seaborn에는 기본적으로 여러 가지 샘플 데이터셋이 제공됩니다.
    그중 tips 데이터셋을 활용하여 시각화를 진행하겠습니다.

    tips = sns.load_dataset('tips')
    tips.head()  # 데이터 미리보기
    

    3️⃣ 산점도 그래프 (relplot())

    식사비(total_bill)와 팁(tip)의 관계를 시각화해보겠습니다.

    sns.relplot(data=tips, x="total_bill", y="tip", 
                col="time", hue="smoker", 
                style="smoker", size="size")
    
    plt.savefig('test.png') # 이미지 저장하려면 show()전에 코드 쳐야됨
    plt.show()

    🔹 hue="smoker" → 흡연 여부에 따라 색상을 다르게 표시
    🔹 col="time" → 점심/저녁 시간별로 그래프 분리
    🔹 style="smoker" → 마커 스타일을 다르게 지정


    4️⃣ 히스토그램 (distplot())

    팁(tip)이 얼마나 분포되어 있는지 확인해보겠습니다.

    sns.distplot(tips['tip'], kde=True, bins=20)
    plt.show()

    🔹 kde=True → 데이터의 밀도를 부드러운 곡선으로 표시
    🔹 bins=20 → 히스토그램 구간 개수 조절


    5️⃣ 산점도에 선형 회귀선 시각화 (regplot())

    팁과 식사비 간의 선형 관계를 확인해보겠습니다.

    ax = sns.regplot(data=tips, x="total_bill", y="tip")
    ax.set_xlabel("Total Bill")
    ax.set_ylabel("Tip")
    ax.set_title("Total Bill and Tip Relationship")
    plt.show()
    

    💡 regplot()은 산점도 위에 선형 회귀선을 그려줍니다.


    6️⃣ 여러 변수 간 관계 시각화 (pairplot())

    pairplot()을 사용하면 데이터셋 내 여러 변수들의 관계를 한눈에 볼 수 있습니다.

    두 변수 a, b 
    상관도가 높을경우 a 증가시 b 증가합니다
    상관도가 낮을 경우  b는 랜덤한 분포 또는 특정값에 몰립니다

    sns.pairplot(tips, kind="hist")
    plt.show()
    

     


    7️⃣ Anscombe's quartet 데이터셋 활용

    anscombe = sns.load_dataset('anscombe')
    print(anscombe.head())  # 데이터 확인
    
    # 선형 회귀 시각화
    sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'I'"), ci=None, scatter_kws={'s': 80})
    plt.show()
    
    sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'III'"), ci=None, order=2, scatter_kws={'s': 80})
    plt.show()

    8️⃣ flights 데이터셋 활용

    flights = sns.load_dataset('flights')
    
    # 연도별 승객 수 변화 시각화
    sns.relplot(data=flights, x='year', y='passengers')
    plt.show()
    
    sns.relplot(data=flights, x='year', y='passengers', kind='line')
    plt.show()

    📌 매년 비행기 이용객 수가 증가하는 추세를 확인할 수 있습니다.


    정리

    • numpy.corrcoef(): 상관계수 계산
    • seaborn 활용 시각화
      • relplot(), histplot(), regplot(), pairplot() 등 다양한 그래프 제공
    • 다양한 데이터셋(tips, anscombe, flights) 활용 가능

    🎨 Seaborn을 활용하면 복잡한 데이터 관계도 쉽게 파악할 수 있어요! 🚀

    📌 마무리

    이번 포스팅에서는 NumPy를 활용한 상관관계 분석Seaborn을 이용한 데이터 시각화 기법을 살펴보았습니다.

    • numpy.corrcoef(): 상관계수 계산
    • seaborn 활용 시각화
      • relplot(), histplot(), regplot(), pairplot() 등 다양한 그래프 제공
    • 다양한 데이터셋(tips, anscombe, flights) 활용 가능

    🎨 Seaborn을 활용하면 복잡한 데이터 관계도 쉽게 파악할 수 있어요! 

    데이터 분석에서는 숫자로만 보는 것보다, 시각적으로 분석하는 것이 훨씬 직관적입니다.🚀

     

Designed by Tistory.