yon11b

[SK 쉴더스 루키즈] 파이썬 기초 5(상속, 모듈, 라이브러리, pandas, numpy) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] 파이썬 기초 5(상속, 모듈, 라이브러리, pandas, numpy)

yon11b 2026. 3. 17. 23:37
반응형

상속

물려받다. 라는 뜻

어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것

왜 하냐?

  • 재활용.
  • 가이드 역할

예시: 부모님께 집을 상속 받은 상황. 내가 마음대로 구조, 인테리어를 바꿀 수 있다. 그러나 큰 틀은 이미 주어져 있는 상태이다.

클래스의 상속

  • 새로운 클래스를 생성하는 것
  • 기존의 클래스의 멤버(변수, 메서드)들을 받아서 새로운 클래스를 생성
class 클래스_이름(상속할 클래스 이름)

클래스를 상속 받으면 오버라이딩을 할 수 있다.

오버라이딩: 메서드를 수정해서 사용하는 것. 선언부(이름, 매개변수)는 바꾸지 않음, 처리부를 바꿈

class FourCal():
    def __init__(self, n1,n2):
        self.n1=n1
        self.n2=n2
    def plus(self):
        return self.n1+self.n2
    def minus(self):
        return self.n1-self.n2
    def mul(self):
        return self.n1*self.n2
    def div(self):
        return self.n1/self.n2

class MoreFourCal(FourCal):
    def pow(self):
        return self.n1**self.n2
    def div(self):
        if self.n2==0:
            return 0
        return self.n1/self.n2
f = MoreFourCal(5,2)
print(f.minus())
print(f.pow())
f2 = MoreFourCal(10,0)
print(f2.div())

모듈과 패키지

모듈

  • .py파일 → 코드 → 변수, 함수, calss
  • 기본(표준)모듈: 파이썬 설치 시 같이 설치
  • 외부 모듈: 외부 기관에서 만든 것 → 따로 설치해줘야 함.(pip로)
    • 머신러닝 할 때 외부 모듈 많이 씀
  • 사용자 모듈: .py

패키지== 여러 파일 묶음

import를 하기만 하면 코드가 다 실행된다.(print문)

모듈에 별칭주기

import mod1 as mo

print(mo.PI)
print(mo.add(5,8))
print(mo.sub(5,8))

 

from 모듈

from 모듈이름 impot 함수이름
from mod1 import add, sub, PI

print(PI)
print(add(5,8))
print(sub(5,8))

 

폴더 안에 있는 모듈파일을 가지고 오고 싶을 때

경로: mod/mod2.py

from mod.mod2 import add, sub, PI
# from mod.mod2 import * ==> 전체 부르
print(PI)
print(add(5,8))
print(sub(5,8))

 

__name__

print('mode1 실행 시작')
print('모듈이름: ',__name__)
# 외부에서 호출될 때의 이름은 파일 이름: mod1
# 원본 파일에서 실행될 때의 이름은: main
PI = 3.14159265358

def add(n1, n2):
    return n1+n2

def sub(n1, n2):
    return n1-n2

print('mode1 실행 끝')

 

 

모듈 테스트

print('mode1 실행 시작')
print('모듈이름: ',__name__)
# 외부에서 호출될 때의 이름은 파일 이름: mod1
# 원본 파일에서 실행될 때의 이름은: main
PI = 3.14159265358

def add(n1, n2):
    return n1+n2

def sub(n1, n2):
    return n1-n2

print('mode1 실행 끝')

if __name__=='__main__':
    print(PI)
    print(add(10,20))
    print(sub(20,10))

 

클래스도 함수랑 똑같이 불러올 수 있다.

표준라이브러리

파이썬을 설치할 때 자동으로 컴퓨터에 설치됨

import datetime
day1=datetime.date(2021,12,14)
day2=datetime.date(2023,12,14)
print(day2-day1)
import time
lt = time.localtime()
lt.tm_hour
import random as r
list_score=[1,2,3,4,43,25]
r.choice(list_score)
import os
#os.mkdir('요니닝')

os.rmdir('요니닝')

 

 

numpy

수치 계산에 특화된 라이브러리

다차원 배열 객체인 ndarray(n-dimensional array) 를 중심으로 작동

→ 요소의 데이터 타입을 통일

다양한 함수 지원: 배열연산, 선형 대수, 푸리에 변환, 난수 생성 등 다양한 수학적 기능을 제공

배열 생성

  • np.array()
  • np.zeros()
  • np.ones()
  • np.arrange()
  • np.linspace()

배열 연산

  • np.dot
  • np.sum()
  • np.mean()

배열 변형

  • reshape(): 1차원을 2차원으로 / 2차원을 1차원으로 변형
  • flatten():
  • transpose():

브로드캐스팅

배열 크기가 달라도 호환 가능하면 연산 수행

 

list 타입이 아니라 numpy.ndarray 타입이다.

각각의 리스트 요소에 다 10 더해라

값이 다 0인 배열 만들기

2행 3열

arrange

# 0~10 사이의 숫자를 2칸씩 간격으로 생성
seq1 = np.arange(0, 11, 2)
print(seq1)

 

linespace

지정된 범위 안에서 동일한 간격으로 숫자를 생성

시작, 끝, 개수

# 1~10, 4등분
linspace = np.linspace(1, 10, 4)
print(linspace)

 

 

 

배열의 속성 확인

list_temp=[
    [ 1,2,3 ],
    [ 4,5,6 ]
]
arr1=np.array(list_temp)
print(arr1.shape)   # 배열의 사이즈: (2,3)
print(arr1.ndim)    # 배열의 차원: 2
print(arr1.size)    # 배열의 요소 개수: 6
print(arr1.dtype)   # 요소의 타입: int64

 

배열의 인덱싱: list와 동일

슬라이싱은 인덱스가 넘어가더라도 에러가 발생하지 않는다.

 

배열의 구조 변환

1차원→ 2차원

arr=np.array([1,2,3,4,5,6])
reshaped_arr=arr.reshape(2,3)
print(reshaped_arr, reshaped_arr.shape)
# [[1 2 3]
#  [4 5 6]] (2, 3)

 

다시 2차원 → 1차원

flated_arr=reshaped_arr.flatten()
print(flated_arr)       # [1 2 3 4 5 6]

 

필터링

arr=np.array([1,2,3,4,5,6])
filtered_arr=arr[arr>3] # 요소값이 3보다 큰 것만
print(filtered_arr)  # [4 5 6]

 

난수 생성해서 배열을 생성

ran_arr1 = np.random.rand(10)
print(ran_arr1)
# [0.93455522 0.2977483  0.92809324 0.18565331 0.2259103  0.92523278
#  0.97075369 0.92555517 0.11185951 0.84014848]
ran_arr1 = np.random.randint(1,10,size=(5,3))
print(ran_arr1)
# [[8 9 1]
#  [6 6 9]
#  [2 5 9]
#  [5 9 4]
#  [3 1 1]]

 

데이터 수집 ⇒ 데이터 처리 ⇒ 학습 데이터로 변경(전처리)

결측값, 이상치,

Pandas

  • 데이터 분석과 조작에 특화된 라이브러리
  • 구조화된 데이터를 처리하는 데 융용
    • Series(1차원)와 DataFrame이라는 두 가지 데이터 구조를 중심으로 작동
  • 구조화된 데이터 처리
    • 행과 열 기반의 데이터 프레임 구조를 사용
  • 다양한 데이터 소스 지원
    • CSV, Excel, SQL, JSON 등 다양한 형식의 데이터를 읽고 쓰기
  • 편리한 데이터 조작
    • 필터링, 그룹화, 집계, 결측 값 처리 등을 간단히 수행

DataFrame 생성: 2차원 형식의 표 모양으로 데이터 구조 생성

dict ⇒ ‘key’: []

import pandas as pd
data={
    'name':['cool','hot','king'],
    'age':[20,30,25]
}
df=pd.DataFrame(data)
print(df)

 

  name age
0 cool 20
1 hot 30
2 king 25

 

상위 몇 개 만 리턴.(기본 5개)

df.head()

 

데이터의 요약정보: df.info()

 

기초 통계 지표(숫자)

df.describe()

 

  age
count 3.0
mean 25.0
std 5.0
min 20.0
25% 22.5
50% 25.0
75% 27.5
max 30.

 

1. df['name'] (Series)

하나의 대괄호를 사용하면 해당 열을 Series(시리즈) 객체로 가져옵니다.

  • 구조: 1차원 배열 형태입니다.
  • 특징: 데이터프레임의 한 줄(열)을 떼어낸 것이라고 생각하면 됩니다.
  • 용도: 해당 열의 평균, 최댓값 계산이나 각 원소별 연산을 수행할 때 주로 사용합니다.

2. df[['name']] (DataFrame)

두 개의 대괄호를 사용하면 해당 열을 DataFrame(데이터프레임) 객체로 유지하며 가져옵니다.

  • 구조: 2차원 표 형태를 유지합니다.
  • 특징: 열이 하나뿐인 '표'라고 이해하면 쉽습니다. 리스트 형태(['name'])로 전달했기 때문에 여러 열을 동시에 가져올 수도 있습니다 (예: df[['name', 'age']]).
  • 용도: 원본 데이터프레임의 형식을 유지해야 하거나, 머신러닝 모델의 입력값(보통 2차원 배열을 요구)으로 넣을 때 사용합니다.

합치기: concat()

data={
    'name':['cool','hot','king'],
    'age':[20,30,25],
    'score':[90,70,60],
    'passed':[True, True, False]
}
df=pd.DataFrame(data)

new_row={
    'name':['kim'],
    'age':[30],
    'score':[55],
    'passed':[False]
}
df2 = pd.DataFrame(new_row)
df3 = pd.concat([df,df2], ignore_index=True)

 

 

 

728x90