[LG U+ Why Not SW Camp 7기] 6주차 회고

Iris Shin·2025년 6월 23일

LG U+ Why Not SW Camp 회고

기간: 2025.6.16 – 6.20


💡 이론 학습 내용

✅ NumPy

  • 2차원 배열 인덱싱

    • arr_2d[[0, 3]][:, [0, 3]]: 교차 인덱싱 실습 → 행 먼저 선택, 열 슬라이싱
    • [step1] arr_2d[[0, 3]], [step2] [:, [0, 3]]
  • 3차원 배열 구성

    • 리스트로 3D 배열 구성: np.array([arr_3_1, arr_3_2, arr_3_3, arr_3_4])
    • np.tile을 사용해 동일한 배열 반복 생성도 가능하지만 리스트 방식으로 직접 실습
  • 고급 인덱싱 및 슬라이싱

    arr[2, 3, 1]           # 특정 요소 선택
    arr[:2, -2:, -2:]      # 첫 두 층, 마지막 두 행, 마지막 두 열
    arr[::2, :, 2]         # 짝수 인덱스 층의 세 번째 열
    arr[2, 1:4, 1::2]      # 세 번째 층, 2~4행, 홀수 열만 선택

✅ Pandas

  • Series vs DataFrame 비교

    항목SeriesDataFrame
    차원1차원2차원
    인덱싱가능행/열 모두 가능
    자료형한 가지열마다 다름
  • 기본 정보 탐색

    • df.head(), df.tail(), df.info(), df.describe() 등으로 구조, 통계 확인
    • .shape, .columns, .index, .values 속성 이해
  • 인덱싱과 필터링

    • .iloc[]: 정수 기반 인덱싱
    • .loc[]: 라벨 기반 인덱싱
    • 조건 필터링: df[df['col'] > value], 복합 조건 (A > x) & (A < y)
  • 결측치 처리 & 정렬

    • 결측치 제거: dropna()
    • 결측치 대체: fillna(), replace()
    • 정렬: sort_values(by='col')
  • 날짜와 인덱스 처리

    df.set_index('날짜컬럼', inplace=True)
    df.index = pd.to_datetime(df.index, format='%Y%m%d')

✅ 파일 입출력 & 직렬화

  • 파일 열기 모드

    모드기능파일 없을 때
    'r'읽기에러 발생
    'w'쓰기 (초기화됨)새로 생성
    'a'이어쓰기새로 생성
    'x'새 파일 생성새로 생성
    'r+'읽고 쓰기에러 발생
    'w+'읽고 쓰기 (초기화됨)새로 생성
  • 읽기/쓰기 함수

    • .read(), .readline(), .readlines()
    • .write(), .writelines()
  • Pickle 직렬화

    import pickle
    
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    
    with open('data.pkl', 'rb') as f:
        obj = pickle.load(f)
  • JSON vs Pickle

    항목JSONPickle
    형식텍스트 기반바이너리
    속도느림빠름
    호환성다양한 언어Python 전용
    보안상대적으로 안전주의 필요

✅ 데이터 시각화 (Matplotlib)

  • 기본 설정

    import matplotlib.pyplot as plt
    plt.rc('font', family='Malgun Gothic')  # 한글 폰트 설정
    plt.rcParams['axes.unicode_minus'] = False
  • 그래프 유형

    • Line: plt.plot(x, y)
    • Bar: plt.bar(x, y)
    • Scatter: plt.scatter(x, y)
    • Histogram: plt.hist(data)
    • Subplot:
      fig, axes = plt.subplots(1, 2)
      axes[0].plot(...)
      axes[1].bar(...)
      plt.tight_layout()
      plt.show()
  • NaN 포함 평균 시각화

    data[data == 0] = np.nan
    avg = np.nanmean(data, axis=1)
    plt.plot(avg)

👍 좋았던 점

  • pandas의 .head(), .info(), .describe() 덕분에 데이터를 빠르게 파악할 수 있어서 탐색 효율이 크게 높아짐.

  • df.loc과 df.iloc의 차이를 실제로 코딩하며 익힌 것이 기억에 잘 남았고, 복잡한 슬라이싱에서도 정확한 인덱싱 감을 잡아감.

  • 시각화를 통해 결과를 바로 확인할 수 있어 데이터 이상치를 직관적으로 잡아내기 쉬웠고, 실습 과정에서 오류를 직접 찾을 수 있어 성취감을 느낌.

    -파일 입출력(write, read)을 통해 데이터를 외부에 저장하고 다시 불러오는 경험이 신선하게 다가왔음.


❗ 아쉬웠던 점 & 스스로 부족했던 점

  • numpy 인덱싱은 처음엔 혼란스러웠고, 특히 3차원 배열에서의 인덱스 순서가 머릿속에 잘 안 들어옴.

  • [층, 행, 열] 구조를 시각화 없이 상상하려니 혼란이 있었음.

  • arr[[0, 2], :][:, [1, 3]]와 같은 표현은 왜 두 단계로 나뉘는지를 처음엔 명확히 이해하지 못했음.

  • pickle을 사용해 데이터를 직렬화할 수 있는 건 알았지만, 실습 없이 넘어가서 완전히 체화되지 않음.

  • 시각화 기능은 다시 복습하지 않으면 금방 잊어버릴 듯함. 특히 subplot 구성과 label 설정을 자주 까먹음.

  • pandas 기능은 많아서 실전에서 "어떤 함수가 뭐였더라?" 하는 순간이 자주 있었음. 별도로 cheatsheet를 만들 필요성 느낌.


🌱 느낀 점 및 앞으로의 계획

  • 단순히 코드를 외우는 것보다 "데이터 흐름"을 그려보며 이해하는 것이 훨씬 오래 기억된다는 걸 체감함. 특히 numpy의 다차원 배열은 눈으로 도식화해보는 습관을 들이기로 함.

  • pandas와 matplotlib는 계속 실습을 통해 익숙해지는 게 중요하다는 걸 느낌. 매주 mini 프로젝트나 예제를 직접 해보는 루틴을 만들 것.

  • matplotlib도 단독 학습보다는 실제 데이터 전처리 > 시각화 흐름 안에서 통합적으로 사용하는 연습이 더 효과적임.

  • 나만의 시각화 템플릿과 전처리 함수들을 만들어두면 이후 프로젝트에서도 시간 단축과 반복 작업 줄일 수 있겠다는 인사이트를 얻음.

  • 파일 입출력과 pickle/json 사용법은 다음 주부터 간단한 데이터를 저장/불러오는 실습을 추가해보기로 함.

profile
Welcome:)

0개의 댓글