Skip to content

Commit 24a219e

Browse files
committed
docs: 머신 러닝 2
- 머신러닝 구현에 필수적인 파이썬 라이브러리인 NumPy와 Pandas의 주요 기능과 활용법
1 parent e31d750 commit 24a219e

File tree

1 file changed

+249
-0
lines changed

1 file changed

+249
-0
lines changed

docs/머신러닝/02.md

Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
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

Comments
 (0)