ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2월 1주차-2/6(3)]📊 히스토그램 & 박스플롯 시각화 정리
    Why Not SW CAMP 5기/수업 기록 2025. 2. 6. 12:53

    데이터를 분석할 때 자료의 분포를 파악하는 것은 매우 중요합니다.
    이번 포스팅에서는 히스토그램(hist)과 박스플롯(boxplot)을 사용하여 데이터를 효과적으로 시각화하는 방법을 정리해보겠습니다.


    1️⃣ 히스토그램 (Histogram)

    📌 히스토그램이란?

    히스토그램은 데이터의 빈도를 막대 그래프 형태로 나타낸 그래프입니다.
    특정 구간에 해당하는 데이터의 개수를 막대의 높이로 표현하므로, 데이터의 분포 상태를 한눈에 파악할 수 있습니다.

    📍 기본 히스토그램 예제

    아래 코드는 간단한 데이터를 사용하여 Matplotlib의 hist() 함수를 이용한 히스토그램을 그리는 예제입니다.

    import matplotlib.pyplot as plt
    
    # 데이터 리스트
    hist_data = [1, 1, 2, 3, 4, 5, 6, 6, 7, 8, 10]
    
    # 히스토그램 그리기
    plt.hist(hist_data)
    plt.show()
    

    설명

    • plt.hist(hist_data) → 리스트 데이터를 히스토그램 형태로 출력
    • plt.show() → 그래프 표시

    📍 기온 데이터(서울) 활용한 히스토그램

    CSV 파일에서 1월과 8월의 최고 기온 데이터를 추출하여 히스토그램으로 표현해보겠습니다.

    import matplotlib.pyplot as plt
    import csv
    
    # CSV 파일 열기
    f = open('./data/seoul.csv')
    data = csv.reader(f)
    next(data)  # 헤더 제거
    
    aug = []  # 8월 최고 기온 리스트
    jan = []  # 1월 최고 기온 리스트
    
    for row in data:
        month = row[0].split('-')[1]  # 날짜에서 월 정보 추출
        if row[-1] != '':  # 결측치 제거
            if month == '08':  
                aug.append(float(row[-1]))  # 8월 데이터 추가
            elif month == '01':
                jan.append(float(row[-1]))  # 1월 데이터 추가
    
    # 히스토그램 시각화
    plt.hist(aug, bins=100, color='r', label='8월')  # 빨간색 (8월)
    plt.hist(jan, bins=100, color='b', label='1월')  # 파란색 (1월)
    plt.legend()  # 범례 추가
    plt.show()
    

    설명

    • split('-') → 날짜 데이터를 ['YYYY', 'MM', 'DD'] 형태로 분리하여 월 정보 추출
    • bins=100 → 구간을 100개로 나누어 더 세밀하게 표현
    • color='r' / color='b' → 빨간색(8월), 파란색(1월)
    • plt.legend() → 범례 추가

    🔎 해석

    • 8월(빨간색): 대부분 20~40도 범위
    • 1월(파란색): 대부분 -10~10도 범위
    • 특정 온도에서 피크(빈도 높음) → 해당 온도에서 많이 발생

    2️⃣ 박스플롯 (Boxplot)

    📌 박스플롯이란?

    박스플롯(Boxplot)은 데이터의 분포를 한눈에 보여주는 그래프입니다.
    최댓값, 최솟값, 중앙값(2/4 분위), 1/4 분위, 3/4 분위를 보여주며, 이상치(outlier)도 함께 시각화할 수 있습니다.


    📍 기본 박스플롯 예제

    아래 코드는 랜덤 데이터를 생성하여 박스플롯을 그리는 예제입니다.

    import matplotlib.pyplot as plt
    import random
    
    # 랜덤 데이터 생성
    result = []
    for i in range(13):
        result.append(random.randint(1, 1000))  # 1~1000 사이 난수 생성
    
    # 박스플롯 시각화
    plt.boxplot(result)
    plt.show()
    

    설명

    • random.randint(1, 1000) → 1~1000 사이 랜덤 정수 생성
    • plt.boxplot(result) → 박스플롯 출력

    📍 기온 데이터 활용한 박스플롯

    이번에는 1월과 8월의 최고 기온 데이터를 박스플롯으로 비교해보겠습니다.

    import matplotlib.pyplot as plt
    import csv
    
    # CSV 파일 열기
    f = open('./data/seoul.csv')
    data = csv.reader(f)
    next(data)
    
    aug = []  # 8월 데이터
    jan = []  # 1월 데이터
    
    for row in data:
        month = row[0].split('-')[1]  # 월 정보 추출
        if row[-1] != '':  # 결측치 제거
            if month == '08':  
                aug.append(float(row[-1]))  # 8월 최고 기온
            elif month == '01':  
                jan.append(float(row[-1]))  # 1월 최고 기온
    
    # 박스플롯 시각화
    plt.boxplot([aug, jan])
    plt.show()
    

    설명

    • 1월(추운 겨울)과 8월(더운 여름)의 기온 데이터를 한눈에 비교 가능
    • 박스 안에 **데이터의 중심값(중앙값)**과 분포의 범위 표시
    • 이상치(outlier)도 점으로 나타남

    📍 월별 최고 기온 박스플롯

    이번에는 월별 최고 기온 분포를 박스플롯으로 표현해보겠습니다.

    import matplotlib.pyplot as plt
    import csv
    
    # CSV 파일 열기
    f = open('./data/seoul.csv')
    data = csv.reader(f)
    next(data)
    
    # 월별 데이터 저장 리스트 (12개월)
    months = [[] for _ in range(12)]
    
    for row in data:
        if row[-1] != '':  # 결측치 제거
            month = int(row[0].split('-')[1]) - 1  # 월 정보 추출 (0~11)
            months[month].append(float(row[-1]))  # 해당 월에 데이터 추가
    
    # 박스플롯 시각화
    plt.boxplot(months)
    plt.show()
    

    설명

    • 12개의 리스트(months = [[] for _ in range(12)])를 생성해 월별 데이터를 저장
    • months[int(row[0].split('-')[1])-1] → 해당 월(0~11)에 데이터 추가
    • plt.boxplot(months) → 월별 최고 기온을 한눈에 비교 가능

    🔎 해석

    • 여름(6~8월)은 기온이 높고 분포가 넓음
    • 겨울(12~2월)은 기온이 낮고 분포가 좁음
    • 이상치(outlier) → 여름철 갑작스러운 폭염, 겨울철 한파 가능성

    🎯 결론

    시각화 기법 활용 목적

    히스토그램 특정 값의 빈도를 나타내어 데이터의 분포를 확인
    박스플롯 데이터의 최댓값, 최솟값, 중앙값, 이상치를 확인하여 분포 비교

    📌 히스토그램은 데이터의 **빈도(분포 모양)**를 시각화하는 데 유용하며,
    📌 박스플롯은 데이터의 **중앙값과 이상치(outlier)**를 파악하는 데 적합합니다.

    👉 앞으로 데이터 분석할 때 적절한 시각화 기법을 활용해 보세요! 🚀
    궁금한 점이 있다면 댓글로 남겨 주세요. 😊

Designed by Tistory.