[Python] Dataframe이 클래스라고? (2)

2022.01.23 19:03 1,650 Views

How to Use 'Class'

지난 게시글에서 클래스란 무엇인지 그리고 왜 배워야하는 지에 대해 알아보았습니다.

이번 게시글에서는 클래스를 어떻게 만들고, 사용하는 지에 대해 알아보겠습니다!


클래스 만들기

저는 요즘 대부분의 회의를 화상 회의 방식으로 진행하고 있는데요.

한번 클래스를 통해 화상 미팅룸을 만들어 보겠습니다. 화상 미팅룸을 구성하는 가장 기본적인 정보에는 미팅룸 id, 호스트 정보, 초대 링크가 있겠죠?

## 클래스 생성 
class OnlineMeetingRoom: 

    ## 생성자 함수 : 속성 생성 
    def __init__(self, id, hostname, invitelink): 
        self.id = id   ## 미팅룸 id 
        self.hostname = hostname   ## 호스트 정보 
        self.invitelink = invitelink   ## 초대 링크 
    
    ## 화상 미팅룸 초대 링크 메소드 
    def print_invitelink(self): 
        print("초대 링크 :",self.invitelink) 
    
    ## 화상 미팅룸 호스트 정보 메소드 
    def print_hostinfo(self): 
        print("host :", self.hostname)


우선, __init__() 메소드는 생성자 함수입니다.

클래스에 어떤 속성이 있는 지 선언하는 부분으로, 클래스를 만들 때 사용자가 입력해야 하는 값을 괄호 안에 적어줍니다.

그리고, print_invitelink()print_hostinfo()는 각각 화상 미팅룸 클래스의 메소드입니다. 


따라서, OnlineMeetingRoom 클래스에는 id, hostname, invitelink 속성과 print_invitelink(), print_hostinfo() 메소드가 존재합니다. 


그렇다면, __init__()에 존재하는 self는 무엇일까요? 

self는 클래스를 사용해서 만든 객체, 즉 자기 자신을 의미합니다.


앞서, 선언한 클래스에서 미팅룸의 초대 링크와 호스트 정보를 출력하는 메소드를 기억 나시나요?

해당 메소드들은 각각 self.invitelink self.hostname을 통해 속성에 접근하고 있는데요.

이는 자기 자신의 초대 링크와 호스트 정보를 참조하는 것을 의미합니다.



클래스 사용하기

예를 들어, 제가 앞서 선언한 클래스를 통해 데이콘의 잡케어 대회에 대한 회의를 위해 화상 미팅룸을 생성한다면 다음과 같이 생성할 수 있을 것입니다.

## 데이콘 잡케어 대회에 대한 화상 미팅룸을 생성 
Dacon_jobcare = OnlineMeetingRoom(1234, 'yoonj', 'http://dacon.io')


그리고, 해당 화상 미팅룸에 대한 초대 링크와 호스트 정보를 확인하고자 한다면 다음과 같이 접근할 수 있을 것입니다.

## 초대 링크 메소드 사용 
Dacon_jobcare.print_invitelink() 

## 호스트 정보 메소드 사용 
Dacon_jobcare.print_hostinfo() 


[Out]

초대 링크 : http://dacon.io 
host : yoonj


.

.


앞선 게시글에서 pandas의 Dataframe 역시 클래스라고 얘기했었는데요. 

혹시 데이터 프레임의 결측치를 채우기 위해 df.fillna(’N/A’)를 사용한 적이 있으신가요? 


기억을 되살려 보면, df.fillna('N/A')라는 명령어를 사용하기 전에 df = pd.read_csv('data/train.csv')와 같이 데이터프레임을 선언해줬습니다.

그 이후, df.fillna('N/A')라는 명령어를 통해 결측치를 채워주고는 했는데요.


우리는 오늘 배운 클래스의 개념을 통해 해당 명령어의 정확한 의미를 파악할 수 있습니다.


Dataframe이라는 클래스의 객체인 df의 fillna()라는 메소드를 실행하라는 뜻입니다.

또한, Dataframe 클래스를 만드는 코드 안에는 다음과 같은 메소드가 선언되어 있을 것입니다. 

class Dataframe():
 .
 . 
        def fillna(self, parm):
         .
         .




지금까지 클래스에 대해 살펴보았습니다. 오늘 클래스를 처음 보았다면 객체라는 개념부터 잘 와닿지 않을 수도 있습니다.

그 뿐만 아니라, Pandas, Numpy, Scikit-Learn 등등.. 클래스를 몰라도 패키지와 라이브러리를 지금까지 잘 사용했는 데

왜 클래스에 대해 배워야 하는 지에 대한 의문이 들 수도 있습니다. 


그러나, 우리는 지금까지 모르는 사이에 수많은 클래스를 사용해왔습니다. 클래스가 어렵게 느껴지는 것은 단지 익숙하지 않아서 입니다.

클래스를 잘 이해한다면 더욱 효율적으로 코드를 작성할 수 있을 뿐만 아니라, 기존 패키지에 필요한 내용을 추가하여 사용할 수도 있을 것입니다.

따라서, 본 게시글이 클래스에 대해 친숙 해질 수 있는 계기가 되었으면 좋겠습니다!


  • 아직 배우는 입장으로 부족한 점이 많습니다. 수정해야하거나, 추가해야할 점이 있다면 댓글로 조언 부탁드립니다.
  • 본 게시글은 데이콘 서포터즈 ‘데이크루’ 1기 활동의 일환입니다.


Reference

[1] https://velog.io/@gayeon/데이터-분석-초보자를-위한-CS-기초-1-클래스