|
| 1 | +--- |
| 2 | +sidebar_position: 3 |
| 3 | +title: 파이썬 문법 3 |
| 4 | +description: 머신러닝의 핵심 도구인 판다스(Pandas), Matplotlib, 파이토치(PyTorch)의 주요 기술을 종합적으로 요약 |
| 5 | +--- |
| 6 | + |
| 7 | +## I. 판다스(Pandas) 심화 |
| 8 | + |
| 9 | +### 1. 지난 학습 내용 복습 |
| 10 | + |
| 11 | +#### 넘파이(NumPy) |
| 12 | + |
| 13 | +- **개념**: 행렬이나 대규모 배열 처리를 위한 파이썬 라이브러리로, 벡터 및 행렬 형태로 데이터를 표현하고 연산한다. |
| 14 | +- **데이터 구조**: 다차원 배열 객체인 ndarray를 사용하며, 딥러닝 훈련 데이터(행: 훈련 데이터, 열: 특징)를 표현하는 데 필수적이다. |
| 15 | +- **배열 생성 함수**: |
| 16 | + - `numpy.array([])`: 파이썬 리스트로부터 배열 생성 |
| 17 | + - `numpy.arange(시작, 종료, 간격)`: 지정된 범위와 간격으로 배열 생성 |
| 18 | + - `numpy.zeros((행, 열))`, `numpy.ones((행, 열))`: 0 또는 1로 채워진 행렬 생성 |
| 19 | + - `numpy.eye(n)`: n x n 단위 행렬(대각선이 1) 생성 |
| 20 | +- **데이터 조작**: |
| 21 | + - `.shape`, `.ndim`: 배열의 형상 및 차원 확인 |
| 22 | + - `.reshape(행, 열)`: 배열의 형상 변환 |
| 23 | + - `numpy.sort()`: 배열 정렬 |
| 24 | + - `numpy.concatenate()`: 배열 결합 (axis=0: 세로, axis=1: 가로) |
| 25 | +- **인덱싱 및 슬라이싱**: |
| 26 | + - 1차원 배열: `객체[a:b]` (a부터 b-1까지) |
| 27 | + - 2차원 배열: `객체[행, 열]`, `객체[n1:n2, n3:n4]` |
| 28 | + - 조건부 슬라이싱: `배열객체[비교연산]`을 통해 조건을 만족하는 요소만 추출 |
| 29 | + |
| 30 | +#### 판다스(Pandas) 기초 |
| 31 | + |
| 32 | +- **목적**: 데이터 처리를 위한 라이브러리 |
| 33 | +- **데이터 타입**: Series(1차원), DataFrame(2차원) |
| 34 | +- **선언**: `pandas.Series()`, `pandas.DataFrame()` |
| 35 | +- **유용한 함수**: |
| 36 | + - `.head(n)`, `.tail(n)`: 데이터의 처음/끝 n개 행 출력 |
| 37 | + - `.describe()`: 데이터의 기초 통계 정보 요약 |
| 38 | + - `.T`: 행과 열을 전치 |
| 39 | + - `.sort_index(axis, ascending)`: 인덱스(행) 또는 컬럼(열) 이름을 기준으로 정렬 |
| 40 | + |
| 41 | +### 2. 데이터 다루기: 삽입 및 삭제 |
| 42 | + |
| 43 | +#### 데이터 삽입 |
| 44 | + |
| 45 | +- **행 추가 (Append)**: `데이터프레임.append(행데이터, ignore_index=True)` |
| 46 | +- **행 추가 (loc/iloc)**: |
| 47 | + - `데이터프레임.loc[행이름] = [행 데이터]` |
| 48 | + - `데이터프레임.iloc[index] = [행 데이터]` |
| 49 | + |
| 50 | +#### 데이터 삭제 |
| 51 | + |
| 52 | +- **원본을 보존하며 삭제 (새 변수에 할당)**: |
| 53 | + - 행 삭제: `변수 = 데이터프레임.drop(index, axis=0)` |
| 54 | + - 열 삭제: `변수 = 데이터프레임.drop(['열이름'], axis=1)` |
| 55 | + - axis의 기본값은 0(행)이다 |
| 56 | +- **원본을 직접 수정**: |
| 57 | + - `데이터프레임.drop(index, axis=0, inplace=True)` |
| 58 | + |
| 59 | +### 3. 파일 입출력 |
| 60 | + |
| 61 | +#### 파일 읽기 |
| 62 | + |
| 63 | +- **CSV 파일**: `pandas.read_csv('파일명')` |
| 64 | +- **Excel 파일**: `pandas.read_excel('파일명')` |
| 65 | + - 필요 라이브러리: xlrd 또는 openpyxl 설치 필요 (`pip install xlrd openpyxl`) |
| 66 | + - xlrd는 .xls 파일만 지원한다 |
| 67 | + |
| 68 | +#### 파일 쓰기 |
| 69 | + |
| 70 | +- **CSV 파일**: `데이터프레임명.to_csv('파일명', sep='구분자')` |
| 71 | + - 구분자(sep) 예시: `,`, `\t` 등 |
| 72 | + |
| 73 | +#### openpyxl을 이용한 Excel 파일 제어 |
| 74 | + |
| 75 | +openpyxl 라이브러리를 사용하면 Excel 파일을 더 세밀하게 제어할 수 있다. |
| 76 | + |
| 77 | +- 파일 생성 및 쓰기 |
| 78 | +- 파일 읽기 |
| 79 | + |
| 80 | +## II. Matplotlib: 데이터 시각화 |
| 81 | + |
| 82 | +### 4. 핵심 개념 및 설정 |
| 83 | + |
| 84 | +- **개념**: 데이터 시각화를 위한 파이썬 라이브러리 |
| 85 | +- **주요 모듈**: pyplot을 통해 대부분의 기능을 사용 |
| 86 | +- **기본 사용법**: `.plot()` 메소드로 시각화할 데이터를 정의하고, `.show()` 메소드로 화면에 출력 |
| 87 | +- **설치 및 임포트**: |
| 88 | + - 설치: `pip install matplotlib` |
| 89 | + - 임포트: `import matplotlib.pyplot as plt` |
| 90 | + - Google Colab에서는 별도 설치 없이 사용 가능하다 |
| 91 | + |
| 92 | +### 5. 주요 플롯 유형 |
| 93 | + |
| 94 | +pyplot 모듈은 다음과 같은 다양한 종류의 플롯을 지원한다. |
| 95 | + |
| 96 | +- **라인 플롯 (Line Plot)**: `pyplot.plot(y)` 또는 `pyplot.plot(x, y)` |
| 97 | +- **막대 플롯 (Bar Plot)**: |
| 98 | + - 수직 막대: `pyplot.bar(x, y)` |
| 99 | + - 수평 막대: `pyplot.barh(x, y)` |
| 100 | + - `xticks`, `yticks`를 사용하여 축의 눈금 레이블을 지정할 수 있다 |
| 101 | +- **파이 플롯 (Pie Plot)**: `pyplot.pie(데이터, labels=, colors=, autopct=, shadow=)` |
| 102 | +- **히스토그램 (Histogram)**: `pyplot.hist(data, bins)` (bins: 구간 수) |
| 103 | +- **박스 플롯 (Box Plot)**: `pyplot.boxplot(data)` |
| 104 | +- **산점도 플롯 (Scatter Plot)**: `pyplot.scatter(x, y, s='마커크기', c='마커색상')` |
| 105 | + |
| 106 | +### 6. 공통 메소드 및 스타일링 |
| 107 | + |
| 108 | +플롯을 꾸미기 위한 공통 메소드는 다음과 같다. |
| 109 | + |
| 110 | +- `.title('타이틀')`: 그래프 제목 설정 |
| 111 | +- `.xlabel('x축 레이블')`, `.ylabel('y축 레이블')`: 각 축의 레이블 설정 |
| 112 | +- `.legend(['범례1', '범례2', ...])`: 범례 표시 |
| 113 | +- `.axis([xmin, xmax, ymin, ymax])`: 축의 범위 지정 |
| 114 | +- `.xlim(min, max)`, `.ylim(min, max)`: 특정 축의 범위만 개별적으로 지정 |
| 115 | +- `.grid(True, axis='y')`: 그리드(격자) 표시. axis는 'x', 'y' 지정 가능 |
| 116 | + |
| 117 | +#### 스타일 지정 (포맷 문자열) |
| 118 | + |
| 119 | +plot 함수 내에서 색상, 마커, 선 스타일을 지정하는 포맷 문자열을 사용할 수 있다. (예: 'gs', 'r--') |
| 120 | + |
| 121 | +| 문자 | 색상 (Color) | 마커 (Marker) | 의미 | |
| 122 | +| ---- | ------------------ | ------------- | ------------------------ | |
| 123 | +| b | blue (파란색) | o | circle (원) | |
| 124 | +| g | green (녹색) | v | triangle_down (역삼각형) | |
| 125 | +| r | red (빨간색) | ^ | triangle_up (삼각형) | |
| 126 | +| c | cyan (청록색) | s | square (네모) | |
| 127 | +| m | magenta (마젠타색) | + | plus (플러스) | |
| 128 | +| y | yellow (노란색) | . | point (점) | |
| 129 | +| k | black (검은색) | | | |
| 130 | +| w | white (흰색) | | | |
| 131 | + |
| 132 | +## III. PyTorch: 딥러닝 프레임워크 |
| 133 | + |
| 134 | +### 1. 개념 및 주요 모듈 |
| 135 | + |
| 136 | +- **개념**: 딥러닝을 위한 파이썬 기반 오픈소스 라이브러리. 신경망을 생성하고 학습시키는 프레임워크로, 자연어 처리, 이미지 처리 등 다양한 분야에서 사용된다. |
| 137 | +- **주요 모듈**: |
| 138 | + - `torch`: 메인 네임스페이스 |
| 139 | + - `torch.autograd`: 자동 미분 기능을 제공 |
| 140 | + - `torch.nn`: 신경망 레이어나 데이터 구조를 정의 |
| 141 | + - `torch.optim`: 확률적 경사 하강법(SGD) 등 최적화 알고리즘을 구현 |
| 142 | + - `torch.utils.data`: 데이터 처리를 위한 유틸리티 함수 포함 |
| 143 | + - `Dataset`: 샘플과 정답(레이블)을 저장 |
| 144 | + - `DataLoader`: Dataset의 샘플에 쉽게 접근할 수 있도록 순회 가능한 객체(iterable)로 만들어 미니배치 학습을 지원 |
| 145 | + - `torch.onnx`: 서로 다른 딥러닝 프레임워크 간 모델 공유를 위한 ONNX(Open Neural Network Exchange) 포맷으로 모델을 내보낼 때 사용 |
| 146 | + |
| 147 | +### 2. 텐서(Tensor)의 이해 |
| 148 | + |
| 149 | +- **정의**: PyTorch의 핵심 데이터 구조로, 모델의 입력, 출력, 매개변수 등을 부호화(encode)하는 데 사용된다. |
| 150 | +- **구조**: NumPy의 ndarray와 유사하며, 1차원(벡터), 2차원(행렬) 이상의 다차원 배열 형태를 가질 수 있다. |
| 151 | + |
| 152 | +### 3. 텐서 문법 및 연산 |
| 153 | + |
| 154 | +#### 텐서 초기화 |
| 155 | + |
| 156 | +- **데이터로부터 생성**: `torch.tensor(데이터)` |
| 157 | +- **기존 텐서 속성 유지**: |
| 158 | + - `torch.ones_like(텐서)`: 모든 값이 1인 텐서 생성 |
| 159 | + - `torch.zeros_like(텐서)`: 모든 값이 0인 텐서 생성 |
| 160 | + - `torch.rand_like(텐서, dtype=자료형)`: 0과 1 사이의 난수로 채워진 텐서 생성 |
| 161 | +- **형상(shape) 지정**: |
| 162 | + - `shape = (2, 3) # 2행 3열` |
| 163 | + - `torch.rand(shape)`, `torch.ones(shape)`, `torch.zeros(shape)` |
| 164 | +- **NumPy 배열로부터 변환**: `torch.from_numpy(넘파이_배열)` |
| 165 | + |
| 166 | +#### 차원 및 크기 조작 |
| 167 | + |
| 168 | +- **정보 확인**: |
| 169 | + - `.dim()`: 차원 수 확인 |
| 170 | + - `.size()` 또는 `.shape`: 텐서의 크기(형상) 확인 |
| 171 | +- **크기 변경**: |
| 172 | + - `.view()`: 텐서의 크기를 변경 |
| 173 | + - `텐서.view([-1, n])`: 열의 개수를 n으로 고정하고 행은 자동으로 조정 |
| 174 | + - `텐서.view([n, -1])`: 행의 개수를 n으로 고정하고 열은 자동으로 조정 |
| 175 | +- **차원 변경**: |
| 176 | + - Squeeze: 크기가 1인 차원을 제거. 위치를 지정하여 특정 차원만 제거 가능 |
| 177 | + - Unsqueeze: 지정된 위치에 크기가 1인 차원을 추가 |
| 178 | + |
| 179 | +#### 주요 연산 |
| 180 | + |
| 181 | +PyTorch는 100개 이상의 다양한 텐서 연산을 지원한다. |
| 182 | + |
| 183 | +- **집계 연산**: |
| 184 | + - `.sum(dim=)`: 합계 계산 |
| 185 | + - `.mean(dim=)`: 평균 계산 |
| 186 | + - dim 파라미터: 0은 열 단위, 1은 행 단위 연산. 생략 시 전체 텐서 대상 |
| 187 | +- **사칙연산 및 슬라이싱**: NumPy와 동일한 방식으로 수행된다 |
| 188 | +- **행렬 곱**: `행렬1.matmul(행렬2)` 또는 `행렬1 @ 행렬2` |
| 189 | +- **텐서 연결**: `torch.cat([텐서1, 텐서2, ...], dim=)` |
| 190 | +- **내용 덮어쓰기(In-place)**: 연산 메소드 뒤에 밑줄(_)을 붙이면(예: `.mul_()`), 연산 결과가 원본 텐서에 덮어씌워진다 |
0 commit comments