Commit 5fc0e3bd authored by insun park's avatar insun park
Browse files

docs: 파이썬 교육자료 AI 연관성 강화

parent ff4183e6
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
## 3. 왜 파이썬 문법이 중요할까요? (Introduction) ## 3. 왜 파이썬 문법이 중요할까요? (Introduction)
AI 개발의 세계에 오신 것을 환영합니다! 파이썬은 AI와 데이터 과학 분야에서 가장 사랑받는 언어입니다. 문법이 간결하고 사람의 생각과 비슷해서, 프로그래밍을 처음 시작하는 분들도 쉽게 배울 수 있습니다. 이번 주차에는 앞으로 우리가 만들 모든 AI 서비스의 뼈대가 될 파이썬의 가장 핵심적인 문법들을 하나씩 정복해나갑니다. AI 개발의 세계에 오신 것을 환영합니다! 파이썬은 AI와 데이터 과학 분야에서 가장 사랑받는 언어입니다. 문법이 간결하고 사람의 생각과 비슷해서, 복잡한 AI 모델의 로직을 직관적으로 표현할 수 있습니다. 이번 주차에는 앞으로 우리가 만들 모든 AI 서비스의 뼈대가 될 파이썬의 가장 핵심적인 문법들을 하나씩 정복해나갑니다. **단순히 문법을 배우는 것을 넘어, 각 문법이 실제 AI 개발 과정에서 어떻게 데이터를 다루고 모델을 조작하는 데 사용되는지**에 초점을 맞출 것입니다.
> [!TIP] > [!TIP]
> 이 파트의 모든 코드 예제는 아래 링크의 파이썬 파일에서 직접 실행하고 수정해볼 수 있습니다. > 이 파트의 모든 코드 예제는 아래 링크의 파이썬 파일에서 직접 실행하고 수정해볼 수 있습니다.
...@@ -69,7 +69,7 @@ print(f"최종 리스트: {fruits}") ...@@ -69,7 +69,7 @@ print(f"최종 리스트: {fruits}")
``` ```
### 5.2. 파이썬다운 코드: 리스트 컴프리헨션 (List Comprehension) ### 5.2. 파이썬다운 코드: 리스트 컴프리헨션 (List Comprehension)
`for` 반복문을 한 줄로 간결하게 표현하여 새로운 리스트를 만드는 방법입니다. `for` 반복문을 한 줄로 간결하게 표현하여 새로운 리스트를 만드는 방법입니다. 단순히 코드를 짧게 만드는 기술을 넘어, 대용량 데이터를 빠르고 효율적으로 가공하기 위한 **전문가의 코드 작성 방식**입니다. AI 모델에 입력될 대량의 데이터를 필터링하거나 특정 형태로 변환할 때 매우 유용하게 사용됩니다.
```python ```python
# 0부터 9까지의 숫자 중 짝수만 제곱하여 리스트 만들기 # 0부터 9까지의 숫자 중 짝수만 제곱하여 리스트 만들기
...@@ -94,6 +94,7 @@ point = (10, 20) ...@@ -94,6 +94,7 @@ point = (10, 20)
### 6.1. 딕셔너리(Dictionary): 의미를 부여한 데이터 관리법 ### 6.1. 딕셔너리(Dictionary): 의미를 부여한 데이터 관리법
- `Key:Value` 쌍으로 데이터를 저장하며, 순서보다 '의미(Key)'를 통해 값을 찾는 데 특화된 <a href="./glossary.md#자료구조-data-structure">자료구조</a>입니다. (`{}` 사용) - `Key:Value` 쌍으로 데이터를 저장하며, 순서보다 '의미(Key)'를 통해 값을 찾는 데 특화된 <a href="./glossary.md#자료구조-data-structure">자료구조</a>입니다. (`{}` 사용)
- AI 개발에서는 모델의 성능에 영향을 주는 다양한 **하이퍼파라미터(e.g., `{'learning_rate': 0.01, 'epochs': 100}`)** 를 관리하거나, 웹 API로부터 받은 **JSON 형식의 데이터를 다룰 때** 핵심적인 역할을 합니다.
```python ```python
user = {"name": "앨리스", "age": 30} user = {"name": "앨리스", "age": 30}
...@@ -158,8 +159,8 @@ print("발사!") ...@@ -158,8 +159,8 @@ print("발사!")
> **🎯 5일차 목표:** 반복되는 코드를 `[함수(Function)](./glossary.md#함수-function)`로 묶어 재사용하고, 함수의 입력([매개변수](./glossary.md#매개변수-parameter와-인자-argument))과 출력([반환 값](./glossary.md#반환-값-return-value))을 이해합니다. > **🎯 5일차 목표:** 반복되는 코드를 `[함수(Function)](./glossary.md#함수-function)`로 묶어 재사용하고, 함수의 입력([매개변수](./glossary.md#매개변수-parameter와-인자-argument))과 출력([반환 값](./glossary.md#반환-값-return-value))을 이해합니다.
### 8.1. 함수(Function): 나만의 미니 프로그램 ### 8.1. 함수(Function): 나만의 데이터 처리 레시피
[함수](./glossary.md#함수-function)는 특정 작업을 수행하는 코드 묶음에 이름을 붙인 **'재사용 가능한 레시피'**입니다. `def` 키워드로 정의하고, 이름으로 호출하여 사용합니다. [함수](./glossary.md#함수-function)는 특정 작업을 수행하는 코드 묶음에 이름을 붙인 **'재사용 가능한 레시피'**입니다. 특히 AI 개발에서 함수는 **'데이터 전처리기'** 와 같습니다. 입력(매개변수)으로 원본 데이터를 받고, 특정 방식(알고리즘)으로 가공하여 깨끗하게 정제된 데이터(반환 값)를 출력하는 과정은 AI 모델 학습의 가장 기본적인 단계입니다. `def` 키워드로 나만의 데이터 처리 레시피를 만들어보세요.
### 8.2. 입력(매개변수)과 출력(반환 값) ### 8.2. 입력(매개변수)과 출력(반환 값)
- **[매개변수(Parameter)](./glossary.md#매개변수-parameter와-인자-argument):** 함수에 전달하는 재료(입력 값). - **[매개변수(Parameter)](./glossary.md#매개변수-parameter와-인자-argument):** 함수에 전달하는 재료(입력 값).
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
## 3. 전문가의 공구함, 컬렉션 깊이 알기 (Introduction) ## 3. 전문가의 공구함, 컬렉션 깊이 알기 (Introduction)
지난 시간에 파이썬의 기본 뼈대를 세웠다면, 이번 주차에는 그 연장들을 넣어둘 **'전문가용 공구함(컬렉션)'**을 깊이 있게 탐구합니다. 단순히 데이터를 담는 것을 넘어, 용도에 따라 최적화된 특수 공구들을 꺼내 쓰는 법을 배우게 됩니다. 상황에 맞는 최적의 '데이터 그릇'을 선택하는 능력을 길러, 코드의 효율성과 가독성을 한 단계 끌어올려 보겠습니다. 지난 시간에 파이썬의 기본 뼈대를 세웠다면, 이번 주차에는 그 연장들을 넣어둘 **'전문가용 공구함(컬렉션)'**을 깊이 있게 탐구합니다. 단순히 데이터를 담는 것을 넘어, **AI 데이터 분석 및 처리**라는 특정 용도에 따라 최적화된 특수 공구들을 꺼내 쓰는 법을 배우게 됩니다. 상황에 맞는 최적의 '데이터 그릇'을 선택하는 능력을 길러, 코드의 효율성과 가독성을 한 단계 끌어올려 보겠습니다.
> [!TIP] > [!TIP]
> 본 파트의 모든 예제 코드는 `../../source_code/part_2_3_python_syntax_collections.py` 파일에서 직접 실행해볼 수 있습니다. > 본 파트의 모든 예제 코드는 `../../source_code/part_2_3_python_syntax_collections.py` 파일에서 직접 실행해볼 수 있습니다.
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
### 4.1. `sort()` vs `sorted()`: 원본을 바꿀 것인가, 새것을 얻을 것인가? ### 4.1. `sort()` vs `sorted()`: 원본을 바꿀 것인가, 새것을 얻을 것인가?
데이터 분석 과정에서 **원본 데이터를 훼손하지 않고 보존하는 것은 매우 중요**합니다. 이 둘의 차이를 명확히 이해해야 의도치 않은 데이터 유실을 막을 수 있습니다.
- **`list.sort()` 메서드**: **원본 리스트 자체를** 정렬합니다. 반환값은 `None`입니다. (내 방 정리) - **`list.sort()` 메서드**: **원본 리스트 자체를** 정렬합니다. 반환값은 `None`입니다. (내 방 정리)
- **`sorted()` 내장 함수**: 정렬된 **새로운 리스트를 반환**합니다. 원본은 바뀌지 않습니다. (정리된 모습 촬영) - **`sorted()` 내장 함수**: 정렬된 **새로운 리스트를 반환**합니다. 원본은 바뀌지 않습니다. (정리된 모습 촬영)
...@@ -45,7 +47,7 @@ print(f"원본: {my_list}, 정렬된 사본: {new_list}") ...@@ -45,7 +47,7 @@ print(f"원본: {my_list}, 정렬된 사본: {new_list}")
``` ```
### 4.2. 스마트한 개수 세기: `collections.Counter` ### 4.2. 스마트한 개수 세기: `collections.Counter`
리스트나 문자열에 포함된 각 항목이 몇 번 등장하는지 세어주는 '똑똑한 재고 관리인'입니다. 리스트나 문자열에 포함된 각 항목이 몇 번 등장하는지 세어주는 '똑똑한 재고 관리인'입니다. 특히 **자연어 처리(NLP)에서 텍스트 데이터의 단어 빈도를 계산**하는 가장 기초적이면서도 핵심적인 작업에 사용됩니다. 이를 통해 어떤 단어가 중요한지 파악하는 등 데이터 분석의 첫걸음을 뗄 수 있습니다.
```python ```python
from collections import Counter from collections import Counter
...@@ -77,7 +79,7 @@ first, *rest, last = (1, 2, 3, 4, 5) ...@@ -77,7 +79,7 @@ first, *rest, last = (1, 2, 3, 4, 5)
``` ```
### 5.2. 키가 없을 때의 구원투수: `collections.defaultdict` ### 5.2. 키가 없을 때의 구원투수: `collections.defaultdict`
존재하지 않는 키에 접근할 때 `KeyError` 대신 지정된 기본값을 자동으로 생성하는 '자동 완성 노트'입니다. 데이터 그룹핑 시 `if`문을 줄여 코드 매우 간결하게 만듭니다. 존재하지 않는 키에 접근할 때 `KeyError` 대신 지정된 기본값을 자동으로 생성하는 '자동 완성 노트'입니다. `if`문을 사용해 키의 존재 여부를 매번 확인할 필요가 없어 코드 매우 간결해집니다. **흩어져 있는 데이터를 특정 기준(e.g., 영화 장르, 사용자 그룹)에 따라 묶어서(Grouping) 분석**할 때 폭발적인 효율성을 보여줍니다.
```python ```python
from collections import defaultdict from collections import defaultdict
......
...@@ -23,7 +23,9 @@ ...@@ -23,7 +23,9 @@
지금까지 우리는 프로그래밍의 '재료'를 다듬는 법을 익혔습니다. 이번 주차에는 이 재료들을 조합하여 '요리'를 하는 법, 즉 더 크고 체계적인 프로그램을 만드는 **[객체 지향 프로그래밍(OOP)](./glossary.md#객체-지향-프로그래밍-object-oriented-programming-oop)** 패러다임을 학습합니다. 지금까지 우리는 프로그래밍의 '재료'를 다듬는 법을 익혔습니다. 이번 주차에는 이 재료들을 조합하여 '요리'를 하는 법, 즉 더 크고 체계적인 프로그램을 만드는 **[객체 지향 프로그래밍(OOP)](./glossary.md#객체-지향-프로그래밍-object-oriented-programming-oop)** 패러다임을 학습합니다.
Scikit-learn, PyTorch 등 대부분의 AI 라이브러리는 OOP에 기반하며, `model = RandomForestClassifier()` 와 같은 코드는 OOP를 이해해야 그 구조를 꿰뚫어 볼 수 있습니다. **이번 파트의 최종 목표는 `model = RandomForestClassifier()` 라는 AI 코드 한 줄을 완벽하게 이해하는 것입니다.**
Scikit-learn, PyTorch, TensorFlow 등 세상의 모든 AI 라이브러리는 OOP를 기반으로 설계되었습니다. 따라서 OOP를 이해하는 것은 단순히 프로그래밍 기술을 하나 더 배우는 것이 아니라, **AI 개발자로서 라이브러리의 구조를 꿰뚫어 보고 자유자재로 활용하기 위한 필수 관문**입니다.
> **💡 핵심 비유: OOP는 '붕어빵 비즈니스'입니다** > **💡 핵심 비유: OOP는 '붕어빵 비즈니스'입니다**
> OOP의 모든 개념을 '붕어빵 장사'에 빗대어 이해해 봅시다! > OOP의 모든 개념을 '붕어빵 장사'에 빗대어 이해해 봅시다!
...@@ -44,6 +46,16 @@ Scikit-learn, PyTorch 등 대부분의 AI 라이브러리는 OOP에 기반하며 ...@@ -44,6 +46,16 @@ Scikit-learn, PyTorch 등 대부분의 AI 라이브러리는 OOP에 기반하며
- **클래스(Class)**: 객체를 만들기 위한 **'설계도'** 또는 '붕어빵 틀'. - **클래스(Class)**: 객체를 만들기 위한 **'설계도'** 또는 '붕어빵 틀'.
- **객체(Object)**: 클래스로부터 생성된 **'실체'** 또는 '팥 붕어빵', '슈크림 붕어빵'. - **객체(Object)**: 클래스로부터 생성된 **'실체'** 또는 '팥 붕어빵', '슈크림 붕어빵'.
> [!IMPORTANT]
> ### AI 라이브러리와 클래스 & 객체
> `model = RandomForestClassifier()` 코드를 OOP 관점에서 해부해 봅시다.
> - **`RandomForestClassifier`**: 머신러닝 모델의 기능(데이터 학습, 예측 등)이 정의된 **클래스(설계도)**입니다.
> - **`model`**: 설계도로부터 막 생성된 **객체(실체)**입니다. 이 객체는 이제 자신만의 데이터와 상태를 가질 수 있습니다.
> - **`model.fit(X, y)`**: `model` 객체가 가진 기능, 즉 **메서드(행동)**를 호출하여 모델을 학습시킵니다.
> - **`model.feature_importances_`**: 학습이 끝난 후 `model` 객체 내부에 저장된 결과, 즉 **속성(상태)**을 확인합니다.
>
> 이처럼 AI 라이브러리를 사용한다는 것은 **'클래스를 가져와, 객체를 만들고, 그 객체의 메서드와 속성을 활용하는 과정'** 그 자체입니다.
```python ```python
from dataclasses import dataclass from dataclasses import dataclass
...@@ -75,6 +87,10 @@ shu_cream_bpp.sell() # "슈크림 붕어빵을 1200원에 판매합니다." ...@@ -75,6 +87,10 @@ shu_cream_bpp.sell() # "슈크림 붕어빵을 1200원에 판매합니다."
**상속(Inheritance)**은 '기본 붕어빵 틀'을 물려받아 '피자 붕어빵 틀' 같은 신제품을 만드는 것입니다. **상속(Inheritance)**은 '기본 붕어빵 틀'을 물려받아 '피자 붕어빵 틀' 같은 신제품을 만드는 것입니다.
> [!TIP]
> **AI 모델링과 상속**
> PyTorch 같은 딥러닝 프레임워크에서 나만의 모델을 만들 때, 우리는 항상 `torch.nn.Module` 이라는 클래스를 **상속**받습니다. 이는 PyTorch가 제공하는 학습, 최적화 등 모델의 핵심 기능들은 그대로 물려받되, 모델의 구조를 정의하는 `forward()` 메서드만 **재정의(Overriding)**하여 나만의 신경망을 만들기 위함입니다. 상속은 이처럼 AI 라이브러리의 기능을 확장하는 핵심 도구입니다.
```python ```python
@dataclass @dataclass
class PizzaBungeoppang(Bungeoppang): # Bungeoppang 클래스를 상속 class PizzaBungeoppang(Bungeoppang): # Bungeoppang 클래스를 상속
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment