|
| 1 | +--- |
| 2 | +sidebar_position: 2 |
| 3 | +title: 파이썬 문법 |
| 4 | +description: 머신러닝 구현에 필수적인 파이썬 라이브러리인 NumPy와 Pandas의 주요 기능과 활용법 |
| 5 | +--- |
| 6 | + |
| 7 | +# 머신러닝을 위한 파이썬 라이브러리: NumPy와 Pandas 핵심 분석 |
| 8 | + |
| 9 | +## 핵심 요약 |
| 10 | + |
| 11 | +본 문서는 머신러닝 애플리케이션을 위한 핵심 파이썬 라이브러리인 **NumPy**와 **Pandas**의 주요 기능과 개념을 종합적으로 분석합니다. 제공된 자료에 따르면, 이 두 라이브러리는 파이썬 기반 머신러닝 생태계의 필수적인 기반을 형성하며, 데이터를 효율적으로 처리하고 구조화하는 데 중추적인 역할을 합니다. |
| 12 | + |
| 13 | +### NumPy (Numerical Python)의 핵심 |
| 14 | + |
| 15 | +**NumPy**는 파이썬에서 과학적 및 수치 연산을 위한 근간이 되는 라이브러리입니다. 핵심 데이터 구조인 `ndarray`(n-dimensional array)를 통해 다차원 배열을 빠르고 효율적으로 처리할 수 있습니다. |
| 16 | + |
| 17 | +**주요 기능:** |
| 18 | + |
| 19 | +- 배열 생성, 형상 변환, 인덱싱, 슬라이싱과 같은 데이터 조작 |
| 20 | +- 요소별 산술 연산, 행렬 곱셈, 브로드캐스팅과 같은 강력한 수학적 연산 기능 |
| 21 | +- 다른 데이터 과학 라이브러리들의 하부 구조를 이루는 핵심 요소 |
| 22 | + |
| 23 | +### Pandas의 핵심 |
| 24 | + |
| 25 | +**Pandas**는 NumPy를 기반으로 구축된 고수준 데이터 조작 및 분석 라이브러리입니다. |
| 26 | + |
| 27 | +**주요 데이터 구조:** |
| 28 | + |
| 29 | +- **Series**: 1차원 배열 형태 |
| 30 | +- **DataFrame**: 2차원 테이블 형태 |
| 31 | + |
| 32 | +레이블이 지정된 축(행과 열)을 통해 직관적인 데이터 처리를 가능하게 하며, 데이터 정제, 변환, 선택, 통계 분석 등 실제 데이터 분석 작업에 특화되어 있습니다. |
| 33 | + |
| 34 | +### 종합적 의의 |
| 35 | + |
| 36 | +- **NumPy**: 고성능 수치 데이터 처리를 위한 기반 제공 |
| 37 | +- **Pandas**: 이를 바탕으로 유연하고 강력한 데이터 분석 도구 제공 |
| 38 | + |
| 39 | +이 두 라이브러리를 숙달하는 것은 파이썬을 활용한 데이터 과학 및 머신러닝 프로젝트를 수행하기 위한 필수적인 첫 단계입니다. |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## 1. 서론: 머신러닝 생태계의 기반 |
| 44 | + |
| 45 | +제공된 자료는 파이썬이 머신러닝 분야의 핵심 언어임을 전제로, 데이터 처리를 위한 필수 라이브러리 학습을 강조합니다. 파이썬의 머신러닝 생태계는 다음과 같은 주요 라이브러리들로 구성됩니다. |
| 46 | + |
| 47 | +### 주요 라이브러리 구성 |
| 48 | + |
| 49 | +- **NumPy**: 수치 연산 및 다차원 배열 처리 |
| 50 | +- **Pandas**: 데이터 조작 및 분석 |
| 51 | +- **Matplotlib**: 데이터 시각화 |
| 52 | +- **scikit-learn**: 범용 데이터 과학 및 머신러닝 모듈 |
| 53 | +- **TensorFlow(Keras) / PyTorch**: 딥러닝 프레임워크 |
| 54 | + |
| 55 | +이 중 **NumPy**와 **Pandas**는 데이터를 머신러닝 알고리즘에 적합한 형태로 가공하고 탐색하는 데 가장 기본이 되는 도구입니다. |
| 56 | + |
| 57 | +> **참고**: 이 라이브러리 학습에 앞서 인공지능, 머신러닝, 딥러닝의 기본 개념과 파이썬 기초 문법(자료형, 제어문 등)에 대한 이해가 선행되어야 합니다. |
| 58 | +
|
| 59 | +## 2. NumPy: 수치 연산의 핵심 |
| 60 | + |
| 61 | +**NumPy**(Numerical Python)는 행렬이나 대규모 다차원 배열을 쉽게 처리할 수 있도록 설계된 라이브러리로, 선형대수, 난수 생성 등 다양한 기능을 제공합니다. |
| 62 | + |
| 63 | +### 2.1. 개요 및 핵심 개념 |
| 64 | + |
| 65 | +#### 핵심 데이터 구조 |
| 66 | + |
| 67 | +**NumPy**의 중심에는 `ndarray`(n-dimensional array)라는 다차원 배열 객체가 있습니다. 머신러닝에서 훈련 데이터는 주로 2차원 또는 3차원 행렬 형태로 표현되는데, 이때: |
| 68 | + |
| 69 | +- **행(row)**: 개별 훈련 데이터를 나타냄 |
| 70 | +- **열(column)**: 데이터의 특징(feature 또는 attribute)을 나타냄 |
| 71 | + |
| 72 | +`ndarray`는 이러한 데이터를 효율적으로 저장하고 연산하는 데 최적화되어 있습니다. |
| 73 | + |
| 74 | +#### 설치 및 사용 |
| 75 | + |
| 76 | +```bash |
| 77 | +pip install numpy |
| 78 | +``` |
| 79 | + |
| 80 | +```python |
| 81 | +import numpy as np |
| 82 | +``` |
| 83 | + |
| 84 | +일반적으로 `import numpy as np`와 같이 별칭을 붙여 사용합니다. |
| 85 | + |
| 86 | +### 2.2. 배열 생성 |
| 87 | + |
| 88 | +**NumPy**는 다양한 방식으로 `ndarray` 객체를 생성하는 함수를 제공합니다. |
| 89 | + |
| 90 | +| 함수(Function) | 설명(Description) | |
| 91 | +| ------------------------------- | ----------------------------------------------------------------------------- | |
| 92 | +| `np.array([])` | 파이썬 리스트나 튜플로부터 배열을 생성합니다 | |
| 93 | +| `np.arange(start, stop, step)` | 지정된 범위와 간격에 따라 순차적인 값을 갖는 배열을 생성합니다 | |
| 94 | +| `np.zeros((rows, cols))` | 모든 요소가 0으로 채워진 지정된 형태의 배열을 생성합니다 | |
| 95 | +| `np.ones((rows, cols))` | 모든 요소가 1로 채워진 지정된 형태의 배열을 생성합니다 | |
| 96 | +| `np.eye(n)` | 주대각선이 1이고 나머지는 0인 n x n 단위 행렬을 생성합니다 | |
| 97 | +| `np.linspace(start, stop, num)` | 시작값과 종료값 사이를 지정된 개수만큼 균일한 간격으로 나눈 배열을 생성합니다 | |
| 98 | + |
| 99 | +### 2.3. 배열 조작 및 속성 |
| 100 | + |
| 101 | +생성된 배열은 다양한 속성을 확인하고 형태를 변환할 수 있습니다. |
| 102 | + |
| 103 | +#### 주요 속성 |
| 104 | + |
| 105 | +- **`.shape`**: 배열의 각 차원별 크기를 튜플 형태로 반환합니다 (예: `(3, 2)`) |
| 106 | +- **`.ndim`**: 배열의 차원 수를 반환합니다 |
| 107 | + |
| 108 | +#### 형태 변환 |
| 109 | + |
| 110 | +- **`.reshape(rows, cols)`**: 원본 배열의 요소 수는 유지하면서 배열의 형태를 변경합니다 |
| 111 | +- **`.T`**: 배열의 행과 열을 바꾼 전치 행렬을 반환합니다 |
| 112 | + |
| 113 | +#### 결합 및 정렬 |
| 114 | + |
| 115 | +- **`np.concatenate((arr1, arr2), axis=n)`**: 두 개 이상의 배열을 결합합니다 |
| 116 | + - `axis=0`: 세로(행) 방향으로 합침 |
| 117 | + - `axis=1`: 가로(열) 방향으로 합침 |
| 118 | +- **`np.sort(arr)`**: 배열의 요소를 정렬합니다 |
| 119 | + |
| 120 | +### 2.4. 데이터 접근: 인덱싱과 슬라이싱 |
| 121 | + |
| 122 | +배열 내 특정 데이터에 접근하기 위해 인덱싱과 슬라이싱을 사용합니다. |
| 123 | + |
| 124 | +#### 1차원 배열 |
| 125 | + |
| 126 | +파이썬 리스트와 유사하게 `arr[index]` 또는 `arr[start:end]` 형태로 접근합니다. |
| 127 | + |
| 128 | +#### 2차원 배열 |
| 129 | + |
| 130 | +`arr[row, col]` 또는 `arr[row_start:row_end, col_start:col_end]` 형태로 특정 위치의 값이나 부분 행렬을 추출할 수 있습니다. |
| 131 | + |
| 132 | +#### 불리언 인덱싱 (Boolean Indexing) |
| 133 | + |
| 134 | +`arr[arr > 5]`와 같이 비교 연산자를 사용한 조건식을 인덱스로 활용하여, 조건을 만족하는 요소들만 선택하는 강력한 기능을 제공합니다. |
| 135 | + |
| 136 | +### 2.5. 핵심 연산 |
| 137 | + |
| 138 | +**NumPy**는 벡터 및 행렬 연산을 매우 효율적으로 수행합니다. |
| 139 | + |
| 140 | +#### 산술 연산 |
| 141 | + |
| 142 | +`+`, `-`, `*`, `/` 등의 연산자는 배열의 같은 위치에 있는 요소들끼리(element-wise) 연산을 수행합니다. |
| 143 | + |
| 144 | +#### 행렬 곱 |
| 145 | + |
| 146 | +일반적인 산술 곱셈(`*`)과 달리, 행렬의 곱셈은 `np.dot()` 또는 `np.matmul()` 함수를 사용합니다. |
| 147 | + |
| 148 | +**조건**: "앞 행렬의 열의 개수"와 "뒤 행렬의 행의 개수"가 일치해야 하며, 머신러닝의 이미지 처리 등에서 빈번하게 사용됩니다. |
| 149 | + |
| 150 | +#### 브로드캐스팅 (Broadcasting) |
| 151 | + |
| 152 | +서로 다른 형태(shape)를 가진 배열 간의 연산 시, **NumPy**는 특정 규칙에 따라 배열을 자동으로 확장하여 형태를 맞춘 후 연산을 수행합니다. |
| 153 | + |
| 154 | +**예시**: `(3,3)` 행렬에 `(1,3)` 행렬을 더하면, `(1,3)` 행렬이 행 방향으로 3번 반복되어 `(3,3)` 행렬처럼 연산됩니다. |
| 155 | + |
| 156 | +### 2.6. 기타 주요 함수 |
| 157 | + |
| 158 | +#### 파일 입출력 |
| 159 | + |
| 160 | +`np.loadtxt("파일명", delimiter=',')`를 사용하여 텍스트 파일에서 데이터를 불러올 수 있습니다. |
| 161 | + |
| 162 | +#### 난수 생성 |
| 163 | + |
| 164 | +`np.random.rand(rows, cols)`는 0과 1 사이의 균일 분포 난수로 채워진 배열을 생성합니다. |
| 165 | + |
| 166 | +#### 통계 함수 |
| 167 | + |
| 168 | +`np.sum()`, `np.min()`, `np.max()`, `np.exp()`, `np.log()` 등 다양한 집계 및 수학 함수를 제공합니다. |
| 169 | + |
| 170 | +#### 인덱스 반환 |
| 171 | + |
| 172 | +`np.argmax(arr, axis=n)` 또는 `np.argmin(arr, axis=n)`은 지정된 축(axis)을 기준으로 최대값 또는 최소값의 인덱스를 반환합니다. |
| 173 | + |
| 174 | +## 3. Pandas: 데이터 처리 및 분석 |
| 175 | + |
| 176 | +**Pandas**는 데이터 처리와 분석을 목적으로 하는 라이브러리로, **NumPy**를 기반으로 동작하며 더 유연하고 직관적인 데이터 구조를 제공합니다. |
| 177 | + |
| 178 | +### 3.1. 개요 및 핵심 데이터 구조 |
| 179 | + |
| 180 | +#### Series (시리즈) |
| 181 | + |
| 182 | +인덱스(index)와 값(value)이 일대일로 대응되는 1차원 배열 형태의 데이터 구조입니다. 인덱스는 0부터 자동으로 부여되거나 사용자가 직접 지정할 수 있습니다. |
| 183 | + |
| 184 | +#### DataFrame (데이터프레임) |
| 185 | + |
| 186 | +행(index)과 열(column)으로 구성된 2차원 테이블 형태의 데이터 구조로, **Pandas**의 가장 핵심적인 객체입니다. 각 열은 서로 다른 데이터 타입을 가질 수 있습니다. |
| 187 | + |
| 188 | +### 3.2. 데이터 생성 |
| 189 | + |
| 190 | +**DataFrame**은 파이썬의 리스트, 딕셔너리, **NumPy** 배열 등 다양한 데이터 소스로부터 생성할 수 있습니다. |
| 191 | + |
| 192 | +#### 딕셔너리로부터 생성 |
| 193 | + |
| 194 | +딕셔너리의 키(key)는 **DataFrame**의 열 이름(column)이 되고, 값(value)은 해당 열의 데이터가 됩니다. |
| 195 | + |
| 196 | +#### NumPy 배열로부터 생성 |
| 197 | + |
| 198 | +`pd.DataFrame(np_array, index=[...], columns=[...])`와 같이 **NumPy** 배열을 기반으로 생성하며, 행과 열의 이름을 직접 지정할 수 있습니다. |
| 199 | + |
| 200 | +### 3.3. 데이터 탐색 및 검사 |
| 201 | + |
| 202 | +생성된 **DataFrame**의 구조와 내용을 파악하기 위한 유용한 함수들이 있습니다. |
| 203 | + |
| 204 | +- **`.head(n)`**: 데이터프레임의 첫 n개 행을 출력합니다 (기본값 5) |
| 205 | +- **`.tail(n)`**: 데이터프레임의 마지막 n개 행을 출력합니다 (기본값 5) |
| 206 | +- **`.describe()`**: 숫자형 데이터 열에 대한 개수, 평균, 표준편차, 최소값, 최대값 등 주요 통계 정보를 요약하여 보여줍니다 |
| 207 | + |
| 208 | +### 3.4. 데이터 선택 및 슬라이싱 |
| 209 | + |
| 210 | +**DataFrame**에서 특정 데이터를 선택하는 방법은 다음과 같습니다. |
| 211 | + |
| 212 | +#### 열 단위 검색 |
| 213 | + |
| 214 | +- **`df['열이름']`**: 하나의 열을 **Series** 형태로 선택합니다 |
| 215 | +- **`df[['열이름1', '열이름2']]`**: 여러 개의 열을 **DataFrame** 형태로 선택합니다 |
| 216 | + |
| 217 | +### 3.5. 데이터 조작 |
| 218 | + |
| 219 | +**DataFrame**은 데이터 값을 변경하거나 구조를 바꾸는 데 용이합니다. |
| 220 | + |
| 221 | +#### 값 변경 |
| 222 | + |
| 223 | +`df['열이름'] = 변경값` 또는 `df['열이름'] = [변경값 리스트]`와 같이 특정 열의 전체 값을 변경할 수 있습니다. |
| 224 | + |
| 225 | +#### 열 추가 및 삭제 |
| 226 | + |
| 227 | +- **추가**: `df['새로운_열이름'] = 값` 형태로 새로운 열을 쉽게 추가할 수 있습니다 |
| 228 | +- **삭제**: `del df['삭제할_열이름']` 명령어로 열을 삭제합니다 |
| 229 | + |
| 230 | +#### 정렬 |
| 231 | + |
| 232 | +`.sort_index(axis=0/1, ascending=True/False)` 함수를 사용하여 행 인덱스(axis=0) 또는 열 이름(axis=1)을 기준으로 오름차순 또는 내림차순 정렬이 가능합니다. |
| 233 | + |
| 234 | +#### 전치 |
| 235 | + |
| 236 | +`.T` 속성을 사용하여 데이터프레임의 행과 열을 바꿀 수 있습니다. |
| 237 | + |
| 238 | +## 4. 결론 |
| 239 | + |
| 240 | +**NumPy**와 **Pandas**는 파이썬 기반 데이터 과학 및 머신러닝 프로젝트의 성공을 위한 필수 불가결한 도구입니다. |
| 241 | + |
| 242 | +### 핵심 역할 |
| 243 | + |
| 244 | +- **NumPy**: 다차원 배열을 다루는 강력하고 빠른 연산 기반을 제공 |
| 245 | +- **Pandas**: 이를 활용하여 실제 데이터를 탐색, 정제, 분석하는 데 필요한 직관적이고 유연한 고수준 인터페이스를 제공 |
| 246 | + |
| 247 | +### 중요성 |
| 248 | + |
| 249 | +이 두 라이브러리의 상호보완적인 관계를 이해하고 능숙하게 활용하는 능력은 데이터를 효과적으로 처리하고 인사이트를 도출하는 핵심 역량입니다. |
0 commit comments