데이터 분석 심화

Chapter.4 데이터 분석 심화(7)

devjjun 2026. 4. 21. 20:52

TIL(Today I Learned)


1️⃣머신러닝 심화

군집화 (Clustering)

👉 비슷한 데이터끼리 묶는 것

  • 목적: 데이터 안에 숨어있는 그룹 찾기
  • 정답(label) 없이 스스로 그룹을 나눔 (비지도 학습)

예시

  • 고객 데이터를 분석해서 비슷한 소비 패턴끼리 묶기
  • 뉴스 기사들을 주제별로 자동 분류

대표 알고리즘

  • K-means
  • DBSCAN
  • Hierarchical Clustering

👉 핵심: “누가 누구랑 비슷한지”를 찾는다


 차원 축소 (Dimensionality Reduction)

👉 데이터의 변수(컬럼)를 줄이는 것

  • 목적: 정보는 최대한 유지하면서 데이터 간단하게 만들기
  • 고차원 데이터 → 저차원 데이터로 변환

예시

  • 100개의 변수 → 2~3개로 줄여서 시각화
  • 모델 학습 속도 개선, 과적합 방지

대표 기법

  • PCA (주성분 분석)
  • t-SNE
  • UMAP

👉 핵심: “정보는 유지하면서 더 간단하게 표현”


한 줄 차이 정리

  • 군집화 👉 데이터를 나눈다 (그룹 찾기)
  • 차원축소 👉 데이터를 줄인다 (압축)

같이 쓰는 경우

  • 차원축소(PCA)로 데이터 정리 → 군집화(K-means)로 그룹 나누기

👉 이유: 차원이 너무 많으면 군집화 성능이 떨어질 수 있음


2️⃣Python 알고리즘 주요 문제

문제

  • 문제 설명: 코딩테스트 연습 - 바탕화면 정리 | 프로그래머스 스쿨
  • 제한 사항
    • 1 ≤ wallpaper의 길이 ≤ 50
    • 1 ≤ wallpaper[i]의 길이 ≤ 50
      • wallpaper의 모든 원소의 길이는 동일합니다.
    • wallpaper[i][j]는 바탕화면에서 i + 1행 j + 1열에 해당하는 칸의 상태를 나타냅니다.
    • wallpaper[i][j]는 "#" 또는 "."의 값만 가집니다.
    • 바탕화면에는 적어도 하나의 파일이 있습니다.
    • 드래그 시작점 (lux, luy)와 끝점 (rdx, rdy)는 lux < rdx, luy < rdy를 만족해야 합니다.
  • 입출력 예

  • 문제 접근
    1. 좌표에 따른 최대 최소값을 넣을 변수 선언
    2. 이중 for문을 통해 순회 
    3. 조건문을 통해 #의 위치 찾기 
    4. 조건에 부합할 때마다 변수에 대입 
    5. 계산한 결과값 반환
  • 코드
더보기
def solution(wallpaper):
    min_r, min_c = float('inf'), float('inf')
    max_r, max_c = -1, -1
    for i, arr in enumerate(wallpaper):
        for j, value in enumerate(arr):
            if value == '#':
                min_r = min(min_r, i)
                min_c = min(min_c, j)
                max_r = max(max_r, i)
                max_c = max(max_c, j)
    return [min_r, min_c, max_r+1, max_c+1]
  • pythonic(리스트 컴프리헨션)
더보기
def solution(wallpaper):
    rows = [i for i, row in enumerate(wallpaper)
              for j, val in enumerate(row) if val == '#']
    
    cols = [j for i, row in enumerate(wallpaper)
              for j, val in enumerate(row) if val == '#']

    return [min(rows), min(cols), max(rows)+1, max(cols)+1]

💡 느낀점

군집화와 차원축소를 공부하면서 데이터는 그대로 두기보다, 목적에 맞게 정리하고 구조를 파악하는 과정이 더 중요하다는 걸 느꼈다. 단순히 모델을 적용하는 것이 아니라, 데이터의 특성을 이해하고 불필요한 정보를 줄이거나 비슷한 데이터끼리 묶는 과정이 분석의 핵심이라는 점이 인상적이었다.