ABC부트캠프

[7일차] ABC부트캠프

ideas9064 2025. 7. 13. 21:11

규모가 커질 수록 코드를 잘게 나누어 재사용하고 정리해야하는 것 이 중요합니다.

 

그렇기에 오늘은 모듈,클래스,패키지에 대해 배웠습니다.

 

모듈은 .py파일 하나가 곧 하나의 모듈입니다.

 

모듈은 imort 문을 사용하여 다른 모듈의 함수, 클래스, 변수를 사용할 수 있습니다.

파이썬에는 많은 표준 라이브러리가 내장되어 별도 설치 없이 바로 사용할 수 있는 모듈들이 있습니다.

예를 들어 datetime, random, os, itertools 등이 있습니다.

 

이것 뿐 만 아니라 코드를 짜면서 반복적으로 사용하는 것을 모듈로 직접 만들 수도 있습니다.

 

그 전에 클래스에 대해 알아 보겠습니다.

클래스는 관련된 변수와 함수를 하나로 묶는 설계도와 같습니다. 

 

클래스의 기본 구조는 이와 같습니다.

class 클래스이름:
    def __init__(self, 매개변수1, 매개변수2, ...):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2

    def 메서드이름(self, 추가매개변수):
        실행할 코드

 

 

패키지는 여러개의 모듈 파일을 폴더로 묶어 놓은 것입니다.

프로젝트의 규모가 커질수록 기능을 포더별로 나누면 유지보수, 협업, 재사용이 쉬워질 수 있습니다.

 

my_package/              ← 패키지 (폴더)
├── __init__.py          ← 패키지를 인식시키는 파일
├── calculator.py        ← 모듈 1
├── greeting.py          ← 모듈 2
└── subpackage/          ← 하위 패키지
    ├── __init__.py
    └── tool.py

 

여기서 __init__.py의 역할은 패키지로 인식되게 하며 초기 실행 코드 정의가 가능합니다.

 


파일 입출력 기초

 

이번에는 파일을 생성하고 텍스트를 쓰는 기본적인 방법에 대해 알아 보겠습니다.

# 기본 파일 쓰기 (권장하지 않는 방법)
file = open('hello.txt', 'w', encoding='utf-8')

# 내용 쓰기
file.write('안녕하세요, Python!')
file.write('\n파일 입출력을 배워봅시다.')

# 파일 닫기 (중요!)
file.close()

print("파일이 생성되었습니다!")

 

안전한 파일 처리 방법 - with 구문

파일을 사용할 때 "with"구문을 사용하면 자동으로 close()를 처리해줘서 안전합니다.

with open('hello_with.txt', 'w', encoding='utf-8') as file:
    file.write('안녕하세요, Python!')
    file.write('\n파일 입출력을 배워봅시다.')
    file.write('\nwith 구문으로 안전하게 파일을 처리합니다.')

# 파일이 자동으로 닫힘
print("파일이 안전하게 저장되었습니다!")

 

💡 파일 모드 설명:
'w' - 쓰기 모드 (기존 파일 덮어쓰기)
'a' - 추가 모드 (기존 파일 끝에 추가)
'r' - 읽기 모드 (기본값)
'x' - 배타적 생성 (파일이 존재하면 오류)

 

파일 읽기의 다양한 방법에 rea(), readline(), readlines() 가 있습니다.

read() 파일 전체 내용을 한 번에 읽음
readline() 한 줄씩 읽음
readlines() 모든 줄을 리스트로 읽음

 

csv 파일을 다루기

파이썬의 csv 모듈을 사용하면 엑셀처럼 생긴 .csv 파일을 쉽게 읽고 쓸 수 있습니다.

 

CSV 쓰기

import csv

with open("data.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["이름", "나이"])
    writer.writerow(["성연", 24])

CSV 읽기

with open("data.csv", "r") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

 


 

NumPy 배열 연산과 인덱싱

 

numpy는 과학 수학 계산에서 가장 많이 쓰이는 파이썬 라이브러리입니다.

특히 배열 연산, 인덱싱, 브로드캐스팅 등은 실전에서 꼭 필요한 핵심 기능입니다.

import numpy as np
# 라이브러리 설치: pip install numpy

# 배열 생성
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([10, 20, 30, 40, 50])

print("arr1:", arr1)
print("arr2:", arr2)

# Element-wise 연산
print("\n=== 기본 산술 연산 ===")
print("덧셈:", arr1 + arr2)
print("뺄셈:", arr2 - arr1)
print("곱셈:", arr1 * arr2)
print("나눗셈:", arr2 / arr1)
print("거듭제곱:", arr1 ** 2)

# 배열과 스칼라 연산
print("\n=== 스칼라 연산 ===")
print("arr1 * 10:", arr1 * 10)
print("arr1 + 100:", arr1 + 100)

# 비교 연산
print("\n=== 비교 연산 ===")
arr = np.array([1, 5, 3, 8, 2])
print("원본 배열:", arr)
print("3보다 큰 요소:", arr > 3)
print("짝수 요소:", arr % 2 == 0)

# 조건을 만족하는 요소 선택
print("\n3보다 큰 값들:", arr[arr > 3])
print("짝수만 선택:", arr[arr % 2 == 0])

# 논리 연산
cond1 = arr > 2
cond2 = arr < 7
print("\n2 < x < 7인 값:", arr[cond1 & cond2])

# np.where 사용
result = np.where(arr > 3, arr, 0)
print("\n조건부 치환 (>3이면 원본, 아니면 0):", result)

# 통계 함수
print("\n=== 통계 함수 ===")
print("합계:", arr.sum())
print("평균:", arr.mean())
print("최댓값:", arr.max())
print("최솟값:", arr.min())
print("표준편차:", arr.std())

 


 

브로드캐스팅(Broadcasting) 이해하기

브로드캐스팅은 서로 다른 크기의 배열 간 연산을 가능하게 하는 NumPy의 강력한 기능입니다. 작은 배열이 큰 배열의 크기에 맞춰 자동으로 확장되어 연산이 수행됩니다.

a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])

print(a + b)

결과
[[11 22]
 [13 24]]

 

작은 배열이 자동으로 맞춰져 연산이 수행되는 원리가 브로드캐스팅입니다.

 


고급 인덱싱과 슬라이싱

NumPy는 기본 인덱싱 외에도 팬시 인덱싱, 불린 인덱싱 등 다양한 고급 인덱싱 기법을 제공합니다. 이를 통해 복잡한 조건의 데이터를 효율적으로 선택할 수 있습니다.

 

1.기본 인덱싱

배열에서 특정 요소에 직접 접근하는 방법입니다.

import numpy as np

arr = np.array([[10, 20, 30],
                [40, 50, 60]])
                
                
print(arr[0, 0])  # 10
print(arr[1, 2])  # 60

 

 

arr[0,0]는 1행 1열 요소이고 값은 10

arr[1,2]는 2행 3열 요소이고 값은 60을 나타낼 수 있습니다.

 

2. 슬라이싱

특정 구간의 요소들을 잘라내는 방법입니다.

[start:stop:step]

arr = np.array([10, 20, 30, 40, 50])
print(arr[1:4])     # [20 30 40]
print(arr[:3])      # [10 20 30]
print(arr[::2])     # [10 30 50]

2차원 배열 슬라이싱
arr2 = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

print(arr2[:2, 1:])  # [[2 3]
                     #  [5 6]]

 

3. 조건 인덱싱

조건을 사용해 해당 조건을 만족하는 요소만 선택하는 방법입니다.

arr = np.array([10, 20, 30, 40, 50])
print(arr[arr > 30])  # [40 50]

 

4. 팬시 인덱싱

정수 인덱스의 리스트나 배열을 이용해서 원하는 위치의 요소를 선택할 수 있습니다.

arr = np.array([10, 20, 30, 40, 50])
print(arr[[0, 2, 4]])  # [10 30 50]

 

 

오늘도 매우 버거운 하루 였던 것 같습니다... 

파이썬 교육이 이젠 하루 남게 되었지만 아직 이해하기 어려운 부분들이 많아 공부를 열심히 해야할 것 같습니다ㅠㅠ

 

'ABC부트캠프' 카테고리의 다른 글

[10일차] ABC 부트캠프 - ESG포럼&세미나  (4) 2025.07.13
[9일차] ABC부트캠프  (0) 2025.07.13
[6일차]ABC부트캠프  (0) 2025.07.13
[5일차]ABC부트캠프_ ESG-day!  (0) 2025.07.06
[4일차] ABC부트캠프  (1) 2025.07.06