본문으로 건너뛰기

파이썬 문법 3

I. 판다스(Pandas) 심화

1. 지난 학습 내용 복습

넘파이(NumPy)

  • 개념: 행렬이나 대규모 배열 처리를 위한 파이썬 라이브러리로, 벡터 및 행렬 형태로 데이터를 표현하고 연산한다.
  • 데이터 구조: 다차원 배열 객체인 ndarray를 사용하며, 딥러닝 훈련 데이터(행: 훈련 데이터, 열: 특징)를 표현하는 데 필수적이다.
  • 배열 생성 함수:
    • numpy.array([]): 파이썬 리스트로부터 배열 생성
    • numpy.arange(시작, 종료, 간격): 지정된 범위와 간격으로 배열 생성
    • numpy.zeros((행, 열)), numpy.ones((행, 열)): 0 또는 1로 채워진 행렬 생성
    • numpy.eye(n): n x n 단위 행렬(대각선이 1) 생성
  • 데이터 조작:
    • .shape, .ndim: 배열의 형상 및 차원 확인
    • .reshape(행, 열): 배열의 형상 변환
    • numpy.sort(): 배열 정렬
    • numpy.concatenate(): 배열 결합 (axis=0: 세로, axis=1: 가로)
  • 인덱싱 및 슬라이싱:
    • 1차원 배열: 객체[a:b] (a부터 b-1까지)
    • 2차원 배열: 객체[행, 열], 객체[n1:n2, n3:n4]
    • 조건부 슬라이싱: 배열객체[비교연산]을 통해 조건을 만족하는 요소만 추출

판다스(Pandas) 기초

  • 목적: 데이터 처리를 위한 라이브러리
  • 데이터 타입: Series(1차원), DataFrame(2차원)
  • 선언: pandas.Series(), pandas.DataFrame()
  • 유용한 함수:
    • .head(n), .tail(n): 데이터의 처음/끝 n개 행 출력
    • .describe(): 데이터의 기초 통계 정보 요약
    • .T: 행과 열을 전치
    • .sort_index(axis, ascending): 인덱스(행) 또는 컬럼(열) 이름을 기준으로 정렬

2. 데이터 다루기: 삽입 및 삭제

데이터 삽입

  • 행 추가 (Append): 데이터프레임.append(행데이터, ignore_index=True)
  • 행 추가 (loc/iloc):
    • 데이터프레임.loc[행이름] = [행 데이터]
    • 데이터프레임.iloc[index] = [행 데이터]

데이터 삭제

  • 원본을 보존하며 삭제 (새 변수에 할당):
    • 행 삭제: 변수 = 데이터프레임.drop(index, axis=0)
    • 열 삭제: 변수 = 데이터프레임.drop(['열이름'], axis=1)
    • axis의 기본값은 0(행)이다
  • 원본을 직접 수정:
    • 데이터프레임.drop(index, axis=0, inplace=True)

3. 파일 입출력

파일 읽기

  • CSV 파일: pandas.read_csv('파일명')
  • Excel 파일: pandas.read_excel('파일명')
    • 필요 라이브러리: xlrd 또는 openpyxl 설치 필요 (pip install xlrd openpyxl)
    • xlrd는 .xls 파일만 지원한다

파일 쓰기

  • CSV 파일: 데이터프레임명.to_csv('파일명', sep='구분자')
    • 구분자(sep) 예시: ,, \t

openpyxl을 이용한 Excel 파일 제어

openpyxl 라이브러리를 사용하면 Excel 파일을 더 세밀하게 제어할 수 있다.

  • 파일 생성 및 쓰기
  • 파일 읽기

II. Matplotlib: 데이터 시각화

4. 핵심 개념 및 설정

  • 개념: 데이터 시각화를 위한 파이썬 라이브러리
  • 주요 모듈: pyplot을 통해 대부분의 기능을 사용
  • 기본 사용법: .plot() 메소드로 시각화할 데이터를 정의하고, .show() 메소드로 화면에 출력
  • 설치 및 임포트:
    • 설치: pip install matplotlib
    • 임포트: import matplotlib.pyplot as plt
    • Google Colab에서는 별도 설치 없이 사용 가능하다

5. 주요 플롯 유형

pyplot 모듈은 다음과 같은 다양한 종류의 플롯을 지원한다.

  • 라인 플롯 (Line Plot): pyplot.plot(y) 또는 pyplot.plot(x, y)
  • 막대 플롯 (Bar Plot):
    • 수직 막대: pyplot.bar(x, y)
    • 수평 막대: pyplot.barh(x, y)
    • xticks, yticks를 사용하여 축의 눈금 레이블을 지정할 수 있다
  • 파이 플롯 (Pie Plot): pyplot.pie(데이터, labels=, colors=, autopct=, shadow=)
  • 히스토그램 (Histogram): pyplot.hist(data, bins) (bins: 구간 수)
  • 박스 플롯 (Box Plot): pyplot.boxplot(data)
  • 산점도 플롯 (Scatter Plot): pyplot.scatter(x, y, s='마커크기', c='마커색상')

6. 공통 메소드 및 스타일링

플롯을 꾸미기 위한 공통 메소드는 다음과 같다.

  • .title('타이틀'): 그래프 제목 설정
  • .xlabel('x축 레이블'), .ylabel('y축 레이블'): 각 축의 레이블 설정
  • .legend(['범례1', '범례2', ...]): 범례 표시
  • .axis([xmin, xmax, ymin, ymax]): 축의 범위 지정
  • .xlim(min, max), .ylim(min, max): 특정 축의 범위만 개별적으로 지정
  • .grid(True, axis='y'): 그리드(격자) 표시. axis는 'x', 'y' 지정 가능

스타일 지정 (포맷 문자열)

plot 함수 내에서 색상, 마커, 선 스타일을 지정하는 포맷 문자열을 사용할 수 있다. (예: 'gs', 'r--')

문자색상 (Color)마커 (Marker)의미
bblue (파란색)ocircle (원)
ggreen (녹색)vtriangle_down (역삼각형)
rred (빨간색)^triangle_up (삼각형)
ccyan (청록색)ssquare (네모)
mmagenta (마젠타색)+plus (플러스)
yyellow (노란색).point (점)
kblack (검은색)
wwhite (흰색)

III. PyTorch: 딥러닝 프레임워크

1. 개념 및 주요 모듈

  • 개념: 딥러닝을 위한 파이썬 기반 오픈소스 라이브러리. 신경망을 생성하고 학습시키는 프레임워크로, 자연어 처리, 이미지 처리 등 다양한 분야에서 사용된다.
  • 주요 모듈:
    • torch: 메인 네임스페이스
    • torch.autograd: 자동 미분 기능을 제공
    • torch.nn: 신경망 레이어나 데이터 구조를 정의
    • torch.optim: 확률적 경사 하강법(SGD) 등 최적화 알고리즘을 구현
    • torch.utils.data: 데이터 처리를 위한 유틸리티 함수 포함
      • Dataset: 샘플과 정답(레이블)을 저장
      • DataLoader: Dataset의 샘플에 쉽게 접근할 수 있도록 순회 가능한 객체(iterable)로 만들어 미니배치 학습을 지원
    • torch.onnx: 서로 다른 딥러닝 프레임워크 간 모델 공유를 위한 ONNX(Open Neural Network Exchange) 포맷으로 모델을 내보낼 때 사용

2. 텐서(Tensor)의 이해

  • 정의: PyTorch의 핵심 데이터 구조로, 모델의 입력, 출력, 매개변수 등을 부호화(encode)하는 데 사용된다.
  • 구조: NumPy의 ndarray와 유사하며, 1차원(벡터), 2차원(행렬) 이상의 다차원 배열 형태를 가질 수 있다.

3. 텐서 문법 및 연산

텐서 초기화

  • 데이터로부터 생성: torch.tensor(데이터)
  • 기존 텐서 속성 유지:
    • torch.ones_like(텐서): 모든 값이 1인 텐서 생성
    • torch.zeros_like(텐서): 모든 값이 0인 텐서 생성
    • torch.rand_like(텐서, dtype=자료형): 0과 1 사이의 난수로 채워진 텐서 생성
  • 형상(shape) 지정:
    • shape = (2, 3) # 2행 3열
    • torch.rand(shape), torch.ones(shape), torch.zeros(shape)
  • NumPy 배열로부터 변환: torch.from_numpy(넘파이_배열)

차원 및 크기 조작

  • 정보 확인:
    • .dim(): 차원 수 확인
    • .size() 또는 .shape: 텐서의 크기(형상) 확인
  • 크기 변경:
    • .view(): 텐서의 크기를 변경
      • 텐서.view([-1, n]): 열의 개수를 n으로 고정하고 행은 자동으로 조정
      • 텐서.view([n, -1]): 행의 개수를 n으로 고정하고 열은 자동으로 조정
  • 차원 변경:
    • Squeeze: 크기가 1인 차원을 제거. 위치를 지정하여 특정 차원만 제거 가능
    • Unsqueeze: 지정된 위치에 크기가 1인 차원을 추가

주요 연산

PyTorch는 100개 이상의 다양한 텐서 연산을 지원한다.

  • 집계 연산:
    • .sum(dim=): 합계 계산
    • .mean(dim=): 평균 계산
    • dim 파라미터: 0은 열 단위, 1은 행 단위 연산. 생략 시 전체 텐서 대상
  • 사칙연산 및 슬라이싱: NumPy와 동일한 방식으로 수행된다
  • 행렬 곱: 행렬1.matmul(행렬2) 또는 행렬1 @ 행렬2
  • 텐서 연결: torch.cat([텐서1, 텐서2, ...], dim=)
  • 내용 덮어쓰기(In-place): 연산 메소드 뒤에 밑줄(_)을 붙이면(예: .mul_()), 연산 결과가 원본 텐서에 덮어씌워진다