본문 바로가기
파이썬의 엑셀, 판다스 라이브러리/CHAPTER 02. 파이썬 기초와 넘파이 라이브러리

2.3 클래스와 객체, 라이브러리

by 김판다t 2024. 10. 15.

교보문고 구매 페이지, 알라딘 구매 페이지yes24 구매 페이지

 

CHAPTER 01과 CHAPTER 02의 내용은 아래 링크로 확인하실 수 있습니다.

 

파이썬의 엑셀, 판다스 라이브러리
CHAPTER 01 판다스 입문
  1.1 판다스 소개
  1.2 파이썬 개발 환경
    
CHAPTER 02 파이썬 기초와 넘파이 라이브러리
  2.1 변수와 자료형
  2.2 제어문과 함수
  2.3 클래스와 객체, 라이브러리

 

CHAPTER 03 이후의 일부 페이지 미리보기

 

 

본 포스팅의 내용은 책에서 발췌된 자료로, 저작권 보호를 받고 있습니다.
허락 없이 복제나 배포는 삼가해 주시기 바랍니다.

 

2.3 클래스와 객체, 라이브러리


2.3에서는 클래스와 객체의 개념 그리고 라이브러리에 대해 소개한다. 클래스와 객체는 파이썬 등 객체 지향 프로그래밍 언어에서 중심적인 역할을 하는 개념이지만, 데이터 분석에 입문한 여러분이 직접 클래스를 정의하고 사용하는 경우는 흔하지 않다. 그렇기에 실제 클래스와 객체를 생성하는 훈련보다는 용어의 뜻을 이해하는 데 초점을 맞추자. 또한 우리는 이 책으로 판다스 라이브러리에 대해 학습하므로, 여기서 라이브러리도 소개한다.

 

2.3.1 클래스와 객체


클래스는 객체를 생성하는 틀로 실제로 클래스라는 틀을 통해 생성된 개별적인 존재를 객체라고 한다. 예를 들어 와플 기계가 클래스라면 그 기계로 만들어진 와플은 객체이다. 그러나 클래스로 생성된 객체들 역시 단순히 클래스라고 흔히 불러 이는 입문자들을 혼란스럽게 한다.

 


판다스 입문자가 실제로 클래스를 직접 만들어 객체를 생성하는 일은 드물다. 그렇기에 직접 클래스를 정의하고 사용하는 훈련은 하지 않아도 괜찮다. 다만 판다스 라이브러리가 다양한 클래스를 지원하므로 학습에 필요한 용어의 뜻을 알아야 한다.


통상적으로 이 책에 클래스와 객체가 용어로 등장할 때는 클래스는 클래스로 생성된 객체들을 통칭하는 의미이다. 따라서 자료형으로 치환해서 생각해도 좋다. 리스트 역시 리스트 클래스인데, 리스트 자료형으로 생각하면 용어가 와닿을 것이다.

 

다만 생성된 객체를 통칭하는 의미가 아닌 실제 객체를 만드는 틀을 클래스로 지칭할 때도 가끔 있는데, 그때는 함수로 치환해서 생각해도 좋다. 물론 이것은 엄밀한 표현은 아니지만, 생성 틀인 클래스도 함수와 비슷하게 작동하며 판다스 입문 단계에서 둘을 구분할 큰 실익이 없기에 초심자의 이해를 도울 것이다. “pd.DataFrame 클래스로 데이터 프레임 클래스를 생성한다.”라는 표현은 두 가지 종류의 클래스의 의미를 모두 담고 있는 문장이며, “pd.DataFrame 함수로 데이터 프레임 자료형을 생성한다.”고 이해해도 좋다. 파이썬에서는 주로 함수명으로 소문자를 사용하기에, 함수와 비슷하게 작동하지만 단어의 첫 글자를 대문자로 표기하는 낙타 표기법(CamelCase)을 사용하는 경우 생성 틀을 의미하는 클래스이다.


실제로 생성된 각 클래스의 개별적인 존재는 객체로 표현한다.(주석 9) 리스트로 예를 들면 생성된 리스트를 객체라고 표현한다. 객체는 대상으로 치환해서 생각해도 좋다. “객체에 len 함수를 적용하면 문자열의 길이 혹은 원소의 개수를 반환한다.”라는 표현은 “대상에 len 함수를 적용하면 문자열의 길이 혹은 원소의 개수를 반환한다.”로 이해할 수 있다. 클래스 명칭이 포함된 객체는 해당 자료형인 대상으로 치환해서 생각하자. “리스트 객체에 len 함수를 적용하면 원소의 개수를 반환한다.”라는 표현은 “리스트 자료형인 대상에 len 함수를 적용하면 원소의 개수를 반환한다.”로 이해할 수 있다.

 

판다스 라이브러리는 데이터 프레임, 시리즈, 인덱스 등 다양한 클래스를 포함하며, 이를 통해 우리의 데이터 분석 작업을 효과적으로 지원한다. 이러한 클래스들은 데이터를 조작하는 과정을 간소화하여 코딩의 효율성을 크게 향상한다.

 

그 밖에 클래스 내부에 정의된 변수인 속성(attribute)과 클래스 내부에 정의된 함수인 메서드(method)도 알아두면 좋은 용어들이다. 추후 판다스를 학습하며 용어에 대해 다시 설명하겠다.

 

2.3.2 라이브러리


라이브러리는 특정 작업을 수행하는 데 필요한 코드와 기능들의 모음이다. 이는 새로운 작업을 수행할 때마다 동일한 코드를 반복해서 작성하는 대신 필요한 기능을 라이브러리를 통해 쉽게 재사용하도록 해준다.


특히 판다스 등의 라이브러리는 데이터 분석 분야에서 중요한 역할을 한다. 판다스 라이브러리는 데이터를 효율적으로 처리하고 분석하고자 설계된 많은 함수와 클래스를 제공한다. 라이브러리의 사용은 데이터 분석가들로 하여금 프로그래밍 작업의 효율성을 향상하며, 필요한 기능을 빠르게 구현하게 해준다.


판다스 라이브러리는 다음과 같은 코드로 불러온다. 해당 코드를 사용하면 판다스 라이브러리에 정의된 많은 함수와 클래스를 사용할 수 있다.


[코드 2-27] 판다스 라이브러리 불러오기

import pandas as pd


• import 명령어는 라이브러리를 사용할 수 있도록 메모리에 로드한다.
• as 키워드는 불러온 라이브러리의 약칭을 지정한다.

 

따라서 위 코드는 판다스 라이브러리를 불러와 pd라는 약칭으로 사용하겠다는 코드이다.

 

사용하는 판다스 라이브러리의 버전을 확인하자.


[코드 2-28] 판다스 라이브러리의 버전 확인하기

pd.__version__

 

[출력]

'2.1.4'


이 책의 실습은 판다스 버전 2.1.4로 진행된다. 판다스는 안정적인 라이브러리이기에 버전에 따른 차이가 크지는 않으나 지나치게 오래된 버전의 판다스는 실습용으로 권장하지 않는다. 버전 관련 문제가 없는 구글 코랩으로 실습하기를 다시 한번 추천한다.


판다스 라이브러리를 별도로 설치해야 하거나, 버전 차이로 인해 판다스 2.1.4 버전으로 업그레이드 또는 다운그레이드를 원하는 독자들은 아래 코드를 실행하자.

!pip install pandas==2.1.4

 

2.3.3 넘파이 라이브러리


판다스 라이브러리는 넘파이 라이브러리를 기반으로 개발되었으며, 이에 따라 판다스의 데이터 프레임 클래스는 넘파이에서 제공하는 어레이(array) 클래스와 많은 특성을 공유한다. 넘파이는 고성능의 수치를 계산하는 파이썬의 라이브러리로서 대규모 다차원 행렬 연산에 최적화되어 있다.


판다스를 효과적으로 사용하는 데 넘파이에 대한 깊은 지식이 반드시 선행되어야 하는 것은 아니다. 다만 넘파이의 함수들이 판다스의 핵심 클래스인 데이터 프레임과 시리즈에도 적용될 때가 많다. 따라서 판다스로 코드를 작성하지만 넘파이 라이브러리도 빈번히 불러온다. 학습에 필요한 넘파이 함수들은 추후 14.2에서 같이 학습하고 여기서는 넘파이 라이브러리를 불러오는 방법과 넘파이의 클래스인 어레이(array)에 대해 간단하게 알아보자.


넘파이 라이브러리는 다음과 같은 코드로 불러온다. 해당 코드를 사용하면 넘파이 라이브러리에 정의된 많은 함수와 클래스를 사용할 수 있다.


[코드 2-29] 넘파이 라이브러리 불러오기

import numpy as np


위 코드는 넘파이 라이브러리를 불러와 np라는 약칭으로 사용하겠다는 코드이다.

 

넘파이 라이브러리의 버전도 확인하자.

 

[코드 2-30] 넘파이 라이브러리의 버전 확인하기

np.__version__

 

[출력]

'1.25.2'



넘파이의 어레이 클래스를 생성해 보자. 넘파이 라이브러리의 array 함수로 어레이 클래스를 생성한다. 넘파이 라이브러리의 array 함수는 원래는 numpy.array의 코드로 사용하는데 약칭으로 numpy를 np로 사용하기로 했기에, np.array의 코드로 함수를 사용해야 한다. np.array 함수에 리스트와 같은 배열을 입력하면 어레이 클래스가 생성된다. 넘파이는 행렬을 다루는 라이브러리이므로 주로 배열을 입력해 어레이를 생성한다. 2차원 리스트를 입력해 어레이를 생성하고, 생성된 어레이
는 변수 a로 지정하자.


[코드 2-31] 넘파이의 어레이 클래스 생성하기

a = np.array([[1, 2, 3], [4, 5, 6]])
a

 

[출력]

array([[1, 2, 3],
       [4, 5, 6]])


어레이의 특성인 벡터화 연산에 대해 확인해 보자. 벡터화 연산은 넘파이의 가장 강력한 기능이다. 이는 어레이에 포함된 각 원소에 대해 연산을 반복문 없이 한 번에 수행하게 해준다. 어레이 클래스인 변수 a에 1을 더해보자.


[코드 2-32] 어레이의 벡터화 연산

a + 1

 

[출력]

array([[2, 3, 4],
       [5, 6, 7]])

 

어레이인 변수 a에 1을 더하는 산술 연산을 수행하면, 어레이의 모든 원소에 1이 더해진다.

 

비교 연산을 수행해도 모든 원소에서 비교해 결과를 True 또는 False로 반환한다.


[코드 2-33] 어레이의 벡터화 연산(비교 연산)

a > 2

 

[출력]

array([[False, False, True],
       [True, True, True]])

 

이러한 연산 방식을 벡터화 연산이라고 하며, 이는 넘파이의 핵심 기능 중 하나이다. 벡터화 연산은 코드가 간편할 뿐 아니라 연산 속도가 매우 빠르고 효율적이다. 또한 이 중요한 기능은 판다스 데이터 프레임에서도 계승되어서, 판다스에서도 대규모 데이터에 대한 연산을 간편하고 효율적으로 하게 해준다.


지금까지는 판다스를 배우는 선수 과정으로 기초 파이썬 개념과 넘파이 라이브러리에 대해 학습하였다. 모든 것을 한 번에 깊이 이해할 필요는 없다. 그 대신 판다스 라이브러리를 학습하다가 개념이 흔들릴 때 이 장을 다시 펼쳐볼 것을 권장한다. 이제는 데이터 분석의 핵심 판다스 라이브러리를 배울 시간이다.

 

 

 

 

주석

 

9 생성된 개별적인 존재는 인스턴스(instance)로 지칭하기도 하는데, 단어의 뜻은 지속적으로 변하고 단어가 엄밀하게만 지칭되는 것은 아니기에 생기는 일이다. 클래스, 객체, 인스턴스는 모두 엄밀하게 표현되지 않고 의미의 범위가 일부 중첩된다.