
ํ์ด์ฌ์์ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ ๋ํด ์ค๋ช ํด์ค
๐ ํ์ด์ฌ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ํ ๋ฒ์ ์ดํดํ๊ธฐ
๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
(List Comprehension)์ **๊ธฐ์กด ๋ฆฌ์คํธ๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด(iterable)**๋ก๋ถํฐ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๊ฐ๊ฒฐํ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋๋ ํ์ด์ฌ ๋ฌธ๋ฒ์
๋๋ค.
ํ๊ตญ ๊ฐ๋ฐ์๋ค์ด ์์ฃผ ์ฐ๋ ๋ฌธ๋ฒ ์ค ํ๋๋ก, ์ฝ๋๊ฐ ํ ์ค๋ก ๊น๋ํด์ ธ ๊ฐ๋
์ฑ๋ ์ข์์ง๋๋ค.
ํ์ด์ฌ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ (List Comprehension)์ด๋?
๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ ํ์ด์ฌ์์ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด์์. ๊ธฐ์กด ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ฑฐ๋, ์ด๋ค ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ค๋ก๋ง ๋ฆฌ์คํธ๋ฅผ ์ฑ์ฐ๊ณ ์ถ์ ๋ ์ ๋ง ๋น์ ๋ฐํ์ฃ ! ๋ง์น ์งง์ ์ฝ๋ ํ ์ค๋ก ๊ธด ๋ฐ๋ณต๋ฌธ ์ฝ๋๋ฅผ ์์ถํด ๋์ ๊ฒ๊ณผ ๊ฐ์์.
๐ก ์ ์ธ๊น์?
- ์ฝ๋ ๊ฐ๊ฒฐ์ฑ: ์ฝ๋๋ฅผ ํจ์ฌ ์งง๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ค์.
- ๊ฐ๋ ์ฑ ํฅ์: ํ ๋์ ์ด๋ค ๋ฆฌ์คํธ๊ฐ ๋ง๋ค์ด์ง๋์ง ํ์ ํ๊ธฐ ์ฌ์์.
- ์ฑ๋ฅ ํฅ์: ๋๋ก๋ ์ผ๋ฐ for ๋ฃจํ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ๋์ํ๊ธฐ๋ ํด์.
๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ๊ตฌ์กฐ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ๋ ์ด๋ ์ต๋๋ค:
python
์๋ก์ด_๋ฆฌ์คํธ = [ํํ์ for ํญ๋ชฉ in ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด]
- ํํ์(Expression): ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ฆฌ์คํธ์ ์ถ๊ฐํ ๊ฐ์ ๋ง๋ญ๋๋ค. (์: x * 2, x.upper())
- ํญ๋ชฉ(Item): ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์์ ํ๋์ฉ ๊บผ๋ด์จ ์์์ ๋๋ค.
- ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด(Iterable): ๋ฆฌ์คํธ, ํํ, ๋ฌธ์์ด, range ๋ฑ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์๋ฏธํด์.
๊ธฐ๋ณธ ๋ฌธ๋ฒ
[ํํ์ for ํญ๋ชฉ in iterable if ์กฐ๊ฑด]
- ํํ์: ์ ๋ฆฌ์คํธ์ ๋ค์ด๊ฐ ๊ฐ (ํญ๋ชฉ์ ๊ฐ๊ณตํ ์ ์์)
- for ํญ๋ชฉ in iterable: ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๊บผ๋ด์ด
- if ์กฐ๊ฑด (์ ํ): ์กฐ๊ฑด์ด True์ธ ํญ๋ชฉ๋ง ์ฌ์ฉ
์์๋ฅผ ํตํด ์์๋ณผ๊น์?
1. ๊ฐ๋จํ๊ฒ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ (For ๋ฃจํ vs. ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ )
์ซ์ 1๋ถํฐ 5๊น์ง๋ฅผ ์ ๊ณฑํ ๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ณผ๊ฒ์.
- ์ผ๋ฐ for ๋ฃจํ ๋ฐฉ์:
- squares = [] for x in range(1, 6): squares.append(x**2) print(squares) # ๊ฒฐ๊ณผ: [1, 4, 9, 16, 25]
- ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ๋ฐฉ์:์ด๋์? ํจ์ฌ ๊น๋ํ๊ณ ๊ฐ๊ฒฐํ์ฃ ?
- squares = [x**2 for x in range(1, 6)] print(squares) # ๊ฒฐ๊ณผ: [1, 4, 9, 16, 25]
2. ์กฐ๊ฑด๋ฌธ(if)์ ์ถ๊ฐํ์ฌ ํํฐ๋งํ๊ธฐ
์ด๋ฒ์๋ 1๋ถํฐ 10๊น์ง์ ์ซ์ ์ค์์ ์ง์๋ง ๊ณจ๋ผ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ณผ๊ฒ์.
- ์ผ๋ฐ for ๋ฃจํ ๋ฐฉ์:
- evens = [] for x in range(1, 11): if x % 2 == 0: evens.append(x) print(evens) # ๊ฒฐ๊ณผ: [2, 4, 6, 8, 10]
- ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ๋ฐฉ์:for ๋ฌธ ๋ค์ if ์กฐ๊ฑด์ ์ถ๊ฐํ๋ฉด ๋ผ์!
- evens = [x for x in range(1, 11) if x % 2 == 0] print(evens) # ๊ฒฐ๊ณผ: [2, 4, 6, 8, 10]
3. ์ค์ฒฉ๋ for ๋ฃจํ ์ฌ์ฉํ๊ธฐ
์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์คํธ๋ฅผ ํฉ์น๊ฑฐ๋, ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ฅผ ํ ์ค๋ก ํผ์น๊ณ ์ถ์ ๋๋ ์ ์ฉํด์.
- ์์: 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ 1์ฐจ์ ๋ฆฌ์คํธ๋ก ํผ์น๊ธฐ (Flatten) ๋ง์น for ๋ฃจํ๋ฅผ ์ฐ๋ ์์์ ๋์ผํ๊ฒ ์ปดํ๋ฆฌํจ์ ์์์ for ๋ฌธ์ ์ฌ๋ฌ ๊ฐ ์ธ ์ ์์ด์.
- matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # ์ผ๋ฐ for ๋ฃจํ flat_list_for = [] for row in matrix: for num in row: flat_list_for.append(num) print(flat_list_for) # ๊ฒฐ๊ณผ: [1, 2, 3, 4, 5, 6, 7, 8, 9] # ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ flat_list_comp = [num for row in matrix for num in row] print(flat_list_comp) # ๊ฒฐ๊ณผ: [1, 2, 3, 4, 5, 6, 7, 8, 9]
๐ ์ ๊น! ํํ์ ์์๋ if-else๋ฅผ ์ธ ์ ์์ด์!
์กฐ๊ธ ๋ ๋ณต์กํ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ์ ๋ค๋ฅด๊ฒ ๋ฃ๊ณ ์ถ์ ๋ ์ฌ์ฉํด์. ์ด ๋๋ if-else๊ฐ for ๋ฌธ ์์ ์์นํ๋ ๊ฒ์ ์ฃผ์ํด์ผ ํด์!
python
# 1๋ถํฐ 10๊น์ง์ ์ซ์ ์ค, ์ง์๋ '์ง์', ํ์๋ 'ํ์'๋ผ๊ณ ํ์ํ๊ธฐ
result = ['์ง์' if x % 2 == 0 else 'ํ์' for x in range(1, 11)]
print(result)
# ๊ฒฐ๊ณผ: ['ํ์', '์ง์', 'ํ์', '์ง์', 'ํ์', '์ง์', 'ํ์', '์ง์', 'ํ์', '์ง์']
๐ ๋จธ์ ๋ฌ๋ ๊ด์ 4๋ ์ฒ๋ + ์ ์ฒ๋ฆฌ ์์ฝ (์ ๋ฆฌ ๋ฒ์ )
๐ฅ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ๊ด์ ํต์ฌ ์์ฝ
- Nominal → ๋ฐ๋์ One-hot
- Ordinal → ์์ ์ค์ํ๋ฉด Ordinal Encoding / ์๋๋ฉด One-hot
- Interval → Ratio์ฒ๋ผ ์ฐ๋ ๋น์จ ํด์์ ๊ธ์ง
- Ratio → ์ฐ์ํ ์์นํ, ์ค์ผ์ผ๋ง·๋ก๊ทธ ๋ณํ ์ ๊ทน ๊ณ ๋ ค
๐งฉ 4๋ ์ฒ๋ ์์ธ ์ ๋ฆฌ
1๏ธโฃ Nominal (๋ช ๋ชฉ์ฒ๋)
โ ํน์ง
- ์์ ์์
- ๊ฐ ์์ฒด์ ํฌ๊ธฐ ์๋ฏธ ์์
โ ์์
- ์ฑ๋ณ, ์์, Embarked(C/Q/S), ๊ตญ๊ฐ ๋ฑ
โ ๋จธ์ ๋ฌ๋ ๊ด์
- ์ซ์๋ก ๋ณํํด๋ ์์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ฉด ์ ๋จ
โ ์ ์ฒ๋ฆฌ
- One-hot Encoding (๊ธฐ๋ณธ)
- Binary Encoding (2๊ฐ ๋ฒ์ฃผ์ผ ๋)
- Target Encoding (๋ง์ ๋ฒ์ฃผ ์ฒ๋ฆฌ ์)
โ ์ฃผ์
- LabelEncoding ์ฌ์ฉ ์
→ ๋ชจ๋ธ์ด **‘์์๊ฐ ์๋ค’**๊ณ ์๋ชป ํ์ต
→ ์ ํ ๋ชจ๋ธ·ํธ๋ฆฌ ๋ชจ๋ธ ๋ชจ๋ ์ํ
2๏ธโฃ Ordinal (์์ด์ฒ๋)
โ ํน์ง
- ์์ ์์
- ๊ฐ๊ฒฉ์ ์ผ์ ํ์ง ์์
โ ์์
- ๋ง์กฑ๋(๋ถ๋ง < ๋ณดํต < ๋ง์กฑ < ๋งค์ฐ๋ง์กฑ)
- ํ๋
- ํ์ดํ๋ Pclass
โ ๋จธ์ ๋ฌ๋ ๊ด์
- ์์๋ ์ค์ํ ์ ํธ
- ํ์ง๋ง “1๊ณผ 2์ ์ฐจ์ด = 2์ 3์ ์ฐจ์ด”๋ผ๊ณ ๋ณผ ์ ์์
โ ์ ์ฒ๋ฆฌ
- Ordinal Encoding
- ์ํฉ์ ๋ฐ๋ผ One-hot ์ฌ์ฉ (ํนํ ์ ํ๋ชจ๋ธ)
โ ์ฃผ์
- ์ ํ ๋ชจ๋ธ(LR, SVM) ์ฌ์ฉ ์
→ ๊ฐ๊ฒฉ์ “๋ฑ๊ฐ”์ผ๋ก ํด์ํ ์ ์์ → ์๊ณก ์ฐ๋ ค
3๏ธโฃ Interval (๋ฑ๊ฐ์ฒ๋)
โ ํน์ง
- ๊ฐ๊ฒฉ ์ผ์
- ์ ๋์ 0 ์์
- ๋น์จ ๋น๊ต ๋ถ๊ฐ
โ ์์
- ์ญ์จ์จ๋
- ์ฐ๋
- ๋ ์ง(Date)
โ ๋จธ์ ๋ฌ๋ ๊ด์
- ์ฐ์ํ ์์น์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
- “๋ ๋ฐฐ” ์๋ฏธ๋ ๋ถ์ ์
โ ์ ์ฒ๋ฆฌ
- StandardScaler
- MinMaxScaler
- ๋ ์ง/์๊ฐ → sin/cos ๋ณํ(์ฃผ๊ธฐ์ฑ)
โ ์ฃผ์
- ๋ชจ๋ธ์ Interval๊ณผ Ratio ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๊ตฌ๋ถํ์ง ์์
- ๋ค๋ง ๋๋ฉ์ธ ํด์ ์ ์ฃผ์ ํ์
4๏ธโฃ Ratio (๋น์จ์ฒ๋)
โ ํน์ง
- ์ ๋ 0 ์กด์ฌ
- ๋น์จ ๋น๊ต ๊ฐ๋ฅ
- ๋ชจ๋ ์ํ ์ฐ์ฐ ๊ฐ๋ฅ
โ ์์
- ๋์ด, ์๊ธ(Fare), ๋ฌด๊ฒ, ๊ฑฐ๋ฆฌ, ์๊ฐ
โ ๋จธ์ ๋ฌ๋ ๊ด์
- ๊ฐ์ฅ ์์ฐ์ค๋ฌ์ด ์์นํ ๋ณ์
- ๋น์จ ํด์๋ ๊ฐ๋ฅ
โ ์ ์ฒ๋ฆฌ
- StandardScaler / MinMaxScaler
- ๋ก๊ทธ ๋ณํ (log1p)
- ์ด์์น ์ ๊ฑฐ(IQR, Winsorization)
โ ์ฃผ์
- ์ด์์น์ ๋งค์ฐ ๋ฏผ๊ฐ → ๋ก๊ทธ ๋ณํ ์์ฃผ ์ฌ์ฉ
๐ 4๋ ์ฒ๋ + ์ ์ฒ๋ฆฌ ์์ฝํ
| ์ฒ๋ | ์์ฑ | ์์ | ๋ชจ๋ธ์์ ์๋ฏธ | ๊ถ์ฅ ์ ์ฒ๋ฆฌ |
| Nominal | ๋ฒ์ฃผ, ์์ ์์ | ์ฑ๋ณ, ์, Embarked | ๊ฐ ํฌ๊ธฐ ์๋ฏธ ์์ | One-hot, Binary, Target |
| Ordinal | ์์ ์์, ๊ฐ๊ฒฉ ๋ถ๊ท์น | ๋ง์กฑ๋, ํ๋ , Pclass | ์์๋ง ์ค์ | Ordinal Encoding / One-hot |
| Interval | ๊ฐ๊ฒฉ ์ผ์ , 0 ์์ | ์จ๋, ์ฐ๋, ๋ ์ง | ๋น์จ X, ๊ฐ๊ฒฉ๋ง ์๋ฏธ | Scaling, sin/cos |
| Ratio | 0 ์กด์ฌ, ๋น์จ ๊ฐ๋ฅ | ๋์ด, ์๊ธ, ๊ฑฐ๋ฆฌ | ๋ชจ๋ ์ฐ์ฐ ๊ฐ๋ฅ | Scaling, log, ์ด์์น ์ฒ๋ฆฌ |
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 43์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.12.11 |
|---|---|
| 41์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.12.09 |
| 39์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.12.05 |
| 38์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.12.04 |
| 37์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.28 |