데이터분석 study/Python

TIL_24.07.11_알면 유용한 파이썬 문법3(class)

justdata 2024. 7. 11. 19:44

오늘 아침에 sql, 알고리즘 코드카타 문제를 풀면서 

몰랐던 sql 문법에 관한 내용이 있어서 구글링 하여 TIL을 추가로 작성했다.

2024.07.11 - [데이터분석 study/SQL] - TIL_24.07.11_join 과 using

 

TIL_24.07.11_join 과 using

오늘 아침에 SQL 과 알고리즘 문제를 푸는데 self join과 using에 대해서 모르는 부분들이 있어서 구글링을 해보았다. self join 은 서로 같은 테이블끼리 join 하여 사용하는 것인데join을 반드시 테이

justdata.tistory.com

 

▶ 클래스

   - 파이썬 클래스(class)는 객체 지향 프로그래밍(OOP)의 중요한 개념 중 하나이다.

   - 객체 지향 프로그래밍을 통해 코드의 재사용성과 유지보수성을 향상 시킬 수 있다.

 

● 클래스의 기본 구조

class ClassName:
    def __init__(self, parameter1, parameter2):
        self.attribute1 = parameter1
        self.attribute2 = parameter2

    def method1(self, parameter1, parameter2):
    # 메서드 내용 작성
        pass

**여기서 _init_메서드는 클래스의 생성자로, 객체가 생성될 때 호출되며 초기화 작업을 수행

** 클래스 내부의 메서드들은 클래스의 동작을 정의하는 함수 

** 메서드의 첫 번째 매개변수로 self를 반드시 사용해야 함,

    이는 해당 메서드가 속한 객체를 가리킨다.

 

● 클래스와 객체 (object)의 관계

   - 클래스는 객체를 만들기 위한 틀 또는 설계도, 객체는 이러한 클래스를 이용하여 생성

   - 예를 들어, person 클래스를 정의하면 이 클래스를 사용하여 여러 사람 객체를 만들

     수 있다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 객체 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)

 

● 다형성(Polymorphism)

   - 다형성은 같은 이름의 메서드가 서로 다른 클래스에서 다른 기능을 수행하도록 하는 개념

class Animal:
    def sound(self):
        print("Some generic sound")

class Dog(Animal):
    def sound(self):
        print("Woof")

class Cat(Animal):
    def sound(self):
        print("Meow")

# 다형성 활용
animals = [Dog(), Cat()]
for animal in animals:
    animal.sound()

   - 위 코드에서 Animal 클래스의 sound 메서드를 각각의 하위 클래스인 Dog와 Cat에서

      재정의하여 다른 동작을 수행.

 

● 클래스와 함수의 차이점

   - 함수(Function)

       - 함수는 일련의 작업을 수행하는 블록

      - 일반적으로 입력(매개변수)을 받아들이고 그에 따른 결과물 반환

     - 함수는 클래스와 상관없이 독립적으로 정의될 수 있음

 

  - 클래스(class)

     - 클래스는 데이터와 해당 데이터를 처리하는 메서드(함수)를 함께 묶어놓은 것

     - 객체 지향 프로그래밍의 핵심 개념으로 , 데이터와 데이터를 다루는 코드를 함께

        묶어 객체를 생성할 수 있게 함.

     - 객체의 상태(속성) 과 행위(메서드)를 정의하고 이를 캡슐화하여 

       객체를 생성하고 다룰 수 있게 한다.

 

● 클래스의 속성과 메서드

    - 클래스는 객체를 생성하기 위한 템플릿, 메서드와 속성(Attribute)을 가질수 있다.

    - 메서드와 속성은 클래스의 행동과 상태를 정의하는 데 사용된다. 

 

    ○메서드

        - 클래스 내부에 정의된 함수 

        - 메서드는 클래스에 속한 함수, 특정 작업을 수행하거나 클래스의 상태를 변경

        - 메서드는 일반적으로 클래스의 인스턴스에서 호출되며 해당 인스턴스 상태에

          따라 동작

       - 일반적으로 self 매개변수를 첫 번째 매개변수로 사용하여 메서드가 속한

          인스턴스를 참조

 

    예시 코드)

class Car:
    def __init__(self, brand):
        self.brand = brand
    
    def start_engine(self):
        print(f"{self.brand}의 엔진을 가동합니다.")

# Car 클래스의 인스턴스 생성
my_car = Car("Toyota")
# start_engine() 메서드 호출
my_car.start_engine()  # 출력: Toyota의 엔진을 가동합니다.

 

    ○ 속성 

       - 클래스나 클래스의 인스턴스에 속한 변수

       - 속성은 클래스나 인스턴스의 상태를 나타냄, 즉, 객체의 데이터를 저장

       - 각 인스턴스마다 고유값이 가질 수 있는 인스턴스 속성과 클래스에 속한

         공유 속성(static attribute)이 있다.

 

        예시 코드)

class Dog:

    def __init__(self, name):
        self.name = name  # 인스턴스 속성

# Dog 클래스의 인스턴스 생성
my_dog = Dog("Buddy")
print(my_dog.name)      # 출력: Buddy

 

● 클래스가 데이터 분석에서 사용되는 예시

    ○데이터 구조화 

       - 클래스를 사용하여 데이터를 구조화하고 데이터 타입을 정의

       - 예를 들어, 주식 데이터를 다룰 때 각 주식을 객체로 표현하고, 해당 주식의 

         종목명, 가격, 거래량 등을 속성으로 정의

class Stock:
    def __init__(self, symbol, price, volume):
        self.symbol = symbol
        self.price = price
        self.volume = volume

# 객체 생성
stock1 = Stock("AAPL", 150.25, 100000)
stock2 = Stock("GOOG", 2800.75, 50000)

 

    ○ 데이터 전처리 모듈화

       - 클래스를 사용하여 데이터 전처리 단계를 모듈화하고 재사용 가능한 코드로

         만들 수 있다.

       - 예를 들어, 데이터 정규화, 결측치 처리, 이상치 제거 등의 작업을 클래스의

         메서드로 구현하여 쉽게 사용

 

raw_data = [1,2,4,5,6,87,2,253654]

class DataPreprocessor:
    def __init__(self, data):
        self.data = data

    def normalize_data(self):
        # 데이터 정규화 작업 수행
        pass

    def handle_missing_values(self):
        # 결측치 처리 작업 수행
        pass

    def remove_outliers(self):
        # 이상치 제거 작업 수행
        pass

# 데이터 전처리 객체 생성
preprocessor = DataPreprocessor(raw_data)
preprocessor.normalize_data()
preprocessor.handle_missing_values()
preprocessor.remove_outliers()

 

      ○ 모델링과 분석작업

         - 머신러닝까지 자세한 개념을 아직 배우지 않았지만 아래 코드를 통해서 구현할 수

           있다는 것 까지만 참고.

         -  예를 들어, 선형 회귀 모델, 분류모델, 군집화 모델 등을 클래스로 정의하여 

            모델의 학습, 예측, 평가 등을 각각의 메서드로 구현할 수 있다.

 

class LinearRegressionModel:
    def __init__(self, data):
        self.data = data

    def train(self):
        # 선형 회귀 모델 학습
        pass

    def predict(self, new_data):
        # 새로운 데이터에 대한 예측 수행
        pass

    def evaluate(self):
        # 모델 평가 수행
        pass

# 선형 회귀 모델 객체 생성
lr_model = LinearRegressionModel(training_data)
lr_model.train()
predictions = lr_model.predict(new_data)
evaluation_result = lr_model.evaluate()

 

***클래스를 사용하여 데이터를 구조화하고 처리하면 코드의 가독성과 

    유지보수성을 향상 시킬 수 있고, 모델링 작업을 모듈화하여 코드를 

    재사용할 수 있다.