BootCamp/모두의연구소:오름캠프

24.01.15

혼복필 2024. 1. 15. 17:13
728x90
300x250
SMALL

오늘 오전 시간은 LMS시스템을 이용하여 Python 활용 강의를 학습하였습니다.

Colab과 Jupyter의 사용법에 대해 알아보고 Python요약과 Numpy, Pandas, Visualization에 대한 설명을 들을 수 있었습니다.

Jupyter는 이전 교육기관에서 자주 사용하였기 때문에 익숙하고 Colab 역시 마찬가지로 익숙해서 쉽게 듣고 넘어갔습니다.

Python에서 구름 IDE를 통해 접속하여 Jupyter사용을 진행하였지만 저는 Anaconda를 이용하였습니다.

Python 요약은 주로 알고 있는 내용을 다뤄서 따로 필기를 하지 않고 편하게 복습하는 마음으로 들었습니다 :)

 

Numpy

고성능 수치계산을 위한 라이브러리

array라는 단위로 데이터 관리 및 연산 수행

행렬과 배열 처리 및 연산

난수 생성

연산 기능은 배열간 연산이 가능함

+, -, *, / 등 연산자 사용 가능

add(), substract(), multiply(), divide()

 

import numpy as np # numpy 사용

# array 정의 및 사용

data = [1, 2, 3, 4, 5]

arr = np.array(data)

arr.shape # array의 형태(크기) 확인

# 1차원 데이터면 (@,) 형태로 나타나고 2차원 데이터면 (@,@) 형태로 나타남

arr.dtype # array의 자료형 확인

 

# 부호가 있는 정수 int (8, 16, 32, 64)

# 부호가 없는 정수 uint (8, 16, 32, 64)

# 실수 float (16, 32, 64, 128)

# 복소수 complex (8, 16, 32, 64)

# 불리언 bool

# 문자열 string_

# 오브젝트 object

# 유니코드 unicode_

 

Pandas

데이터 분석 라이브러리 중 하나 (데이터 조작, 정제, 분석, 시각화 등 다양한 기능 제공)

 

import pandas as pd # pandas 사용

data = [['A', 1], ['B', 2],  ['C', 3]] # list를 사용해 DataFrame 객체 생성

df = pd.DataFrame(data, columns=['col1', 'col2'])

print(df)

DataFrame 객체에서는 열이나 행을 선택하여 데이터를 조회 가능

Series : 인덱스와 값으로 이루어진 1차원 데이터를 다루기 위한 객체

= Series 객체는 DataFrame 객체에서 열을 선택하여 추출

 

파일 불러오기

1. CSV 파일 불러오기 : df = pd.read_csv('data.csv')

2. Excel 파일 불러오기 : df = pd.read_excel('data.xlsx')

 

Visualization

데이터 시각화는 특징에 어울리는 차트를 나타냄

 

pip install matplotlib

import matplotlib.pyplot as plt # Matplotlib 사용

x = [1, 2, 3, 4, 5] # x축
y = [2, 4, 6, 8, 10] # y축
plt.plot(x, y)
plt.show() # 화면에 그래프 출력

 

# color : 그래프 색상 설정, 'r', 'g', 'b'와 같은 약어 or 'red', 'green', 'blue' 같은 전체 색상 이름, '#FF0000'와 같은 RGB 값을 지정
# linestyle : 그래프 선 스타일 설정, 'solid', 'dashed', 'dashdot', 'dotted' 등의 값을 사용
# linewidth : 그래프 선 두께 설정, 기본값은 1
# marker : 그래프 마커 스타일 설정, 'o', '^', 's', 'd' 등의 값을 사용
# markerfacecolor : 마커 색상 설정
# markersize : 마커 크기 설정

 

 

더 자세한 Numpy, Pandas, Visualization에 대한 내용은 따로 교육으로 듣게 된다면 그때 다시 보충하도록 하겠습니다.

LMS 강의를 마친 후 오후에는 class 마지막 수업을 진행하였습니다.

이론 정리로 상속, 다중상속, 클래스 심화, 오버라이딩, 추상 클래스와 인터페이스, 비공개 속성을 다뤄 정리하고 마무리하겠습니다.

 

상속 (Inheritance)

한 클래스의 특성(속성 및 메서드)을 다른 클래스가 가져오는 것을 의미

상속을 통해 코드의 재사용성을 높이고 모듈성을 강화

부모 클래스(또는 기본 클래스, 슈퍼 클래스) : 특성이 상속되는 클래스

자식 클래스(또는 파생 클래스, 서브 클래스) : 부모 클래스의 특성을 상속받는 클래스

= 자식 클래스는 부모 클래스의 모든 속성과 메서드를 상속받음

= 자식 클래스는 부모 클래스에 없는 새로운 속성이나 메서드를 추가 or 부모 클래스의 메서드를 오버라이드하여 기능을 수정 가능

 

 

다중 상속

한 클래스가 여러 부모 클래스로부터 상속을 받는 것을 의미

여러 부모 클래스의 특성과 기능을 하나의 자식 클래스에 결합 가능

class Parent1:
    pass
class Parent2:
    pass
class Child(Parent1, Parent2):
    pass

= Child 클래스는 Parent1 및 Parent2 두 부모 클래스로부터 상속을 받음

다중 상속을 사용할 때 주의할 점 : 메서드의 호출 순서

= 두 부모 클래스가 동일한 이름을 가지고 있다면, 해당 메서드를 호출할 때 어느 부모의 메서드를 호출할지 결정

 

메서드 오버라이딩 (Method Overriding)

서브 클래스(subclass, 자식 클래스)에서 슈퍼 클래스(superclass, 부모 클래스)의 메서드를 새롭게 정의하는 과정을 의미 = 재정의

서브 클래스는 슈퍼 클래스의 메서드를 그대로 사용할 수도 있지만, 필요에 따라 해당 메서드의 기능을 변경하고 싶을 때 활용

class Animal:
    def sound(self):
        print("기본 동물 울음소리, 악!")

 

# Animal 클래스를 상속받는 Dog 클래스와 Cat 클래스를 정의, sound 메서드를 오버라이드 하여 동물별 다른 소리 출력

class Dog(Animal):
    def sound(self):
        print("왈왈!")
class Cat(Animal):
    def sound(self):
        print("냐옹!")

 

# super()를 사용하여 부모 클래스 메서드 호출

class Bird(Animal):
    def sound(self):
        super().sound()
        print("짹짹!")

super().sound()처럼 super() 함수로 오버라이드된 메서드 내에서 부모 클래스의 메서드에 접근

= 부모 클래스의 기능을 확장하거나 수정 가능

 

__init__에서 많이 쓰이는 ex)

 

 

추상 클래스 (Abstract Base Class, ABC)

기본적으로 구현하지 않아도 되는 메서드를 가진 클래스

서브클래스에서 반드시 구현해야 하는 메서드를 정의하는 데 사용

abc 모듈의 ABC 클래스와 abstractmethod 데코레이터를 사용하여 추상 클래스와 추상 메서드를 정의

= 추상 클래스에는 do_something을 정의해 놓고 이 클래스를 상속하는 클래스에 해당 메서드를 정의하지 않으면 error

= 추상 클래스에 선언된 메서드를 자식 클래스에서 오버라이딩(재정의)하여 사용해야 함

 

from abc import *
class 추상클래스명(metaclass=ABCMeta):
     @abstractmethod
        def 추상메서드(self):
            pass

 

인터페이스 (Interface)

추상 클래스 중에서 추상 메서드만 있고 일반 메서드는 없는 것

객체가 어떤 메서드를 구현해야 하는지 정의한 것

(Python에서는 다른 언어들과 달리 인터페이스라는 내장 키워드나 구조가 없음)

= 추상 클래스를 이용하여 인터페이스처럼 동작하는 클래스를 만들 수 있음

 

 

비공개 속성 (Private Attributes)

대부분의 객체 지향 프로그래밍 언어에는 클래스의 속성과 메서드의 접근 제어를 위한 다양한 수준의 접근 제한자(access modifiers)가 존재

이 비공개 속성은 완전한 비공개는 아니며 비공개처럼 작동하게 함

클래스 내부에서만 접근이 가능하며 외부에서는 접근이 제한되는 속성을 의미

속성 이름 앞에 두 개의 언더스코어(__)를 붙여 해당 속성을 비공개처럼 표현할 수 있음

 

네임 맹글링 (Name Mangling)

속성 이름 앞에 두 개의 언더스코어를 붙이면 네임 맹글링 메커니즘을 사용하여 속성의 이름을 변경

= 외부에서 해당 속성에 직접 접근하는 것이 어려워짐

= _클래스명_속성명 형태로 접근과 수정 가능

print(c._MyClass__c)

 

비공개 속성의 목적

1. 클래스의 안정성 유지

2. 객체의 내부 로직을 숨기기 위한 목적으로 활용

 

을 끝으로 길었던 class에 대해 끝이 났습니다.

기초만 배웠던 상태에서 깊고 넓게 파헤치며 공부해 보니 모르는 부분과 헷갈렸던 부분 등 제 이해도에 대해 확실히 짚고 넘어갈 수 있었던 시간 같아요.

한 번 배움을 끝으로 마무리 질 게 아닌 여러 번 반복 학습을 통해 확실히 습득해야 좋을 것 같습니다.

728x90
300x250
LIST

'BootCamp > 모두의연구소:오름캠프' 카테고리의 다른 글

24.01.17  (0) 2024.01.17
24.01.16  (2) 2024.01.16
24.01.12  (0) 2024.01.12
24.01.11  (5) 2024.01.11
24.01.10  (2) 2024.01.10