본문 바로가기

파이썬/파이썬 기초

파이썬 라이브러리 - numpy, pandas, matplotlib 등 기본 라이브러리 개념

파이썬에는 다양한 라이브러리가 있다. 보통 머신러닝 모델을 구현할 때 사이킷런을 가장 많이 사용하는데, 사이킷런 뿐만 아니라 numpy, pandas, matplotlib 등 다양한 라이브러리는 반드시 숙지하고 있어야 한다.

 

 

특히 사이킷런은 Numpy와 Scipy 기반으로 만들어졌기 때문에 이 둘은 기본적으로 알고 넘어가야 한다.

 

Numpy

Numpy는 다차원 배열을 쉽고 효율적으로 처리하게 해주며 수학 계산을 위해 반드시 필요한 파이썬 패키지이다.

넘파이의 핵심은 ndarray 클래스로 쉽게 이야기 하면 행렬이다. 사이킷런의 기본 데이터 구조는 Numpy 배열로 우리가 사용하는 데이터는 모두 넘파이 배열로 변환된다.

 

import numpy as np

a = np.array([0,1,2,3,4,5,6,7,8,9])
print(type(a))
print(a)

>>><class 'numpy.ndarray'>
>>>[0 1 2 3 4 5 6 7 8 9]

 

ndarray 배열의 모든 원소는 다 동일한 데이터 타입이어야 하며 벡터화 연산을 지원한다.

예를 들어 위의 a 벡터의 전체 원소에 2를 곱하고 싶다면 굳이 반복문을 사용할 필요 없이 a*2로 간단하게 연산할 수 있다. 아래와 같이 객체 전체에 2를 곱한 값을 뱉어준다.

a = a*2
print(a)
>>>array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

 

 

뿐만 아니라 다차원 행렬 생성도 가능하며 행렬의 인덱싱, 슬라이싱도 가능하다.

b = np.array([[1,2,3],[4,5,6]]) 
b
>>>array([[1, 2, 3],
          [4, 5, 6]])
          
print(b[0,0]) #1행 1열을 원소로 반환
print(b[0,:]) #1행 전체
print(b[:,0]) #1열 전체
print(b[1:,1]) #2행 2열 값을 행렬 형태로 반환
print(b[1:2]) #2행 3열까지 반환
>>>1
>>>[1 2 3]
>>>[1 4]
>>>[5]
>>>[[4 5 6]]

 

 

Pandas

판다스는 데이터 처리와 분석을 위한 파이썬 라이브러리이다. DataFrame이라는 데이터 구조를 기반으로 만들어졌는데 엑셀 시트와 비슷한 형태이다. sql처럼 조인이나 쿼리문 수행이 가능하며 numpy와 달리 각 열의 데이터 타입이 달라도 무방하다.

 

 

csv나 excel 파일을 읽어들일 수 있어 유용하게 사용된다.

import pandas as pd

adult = pd.read_csv('adult.csv')
adult.head()

 

 

Scipy

scipy는 선형대수, 함수 최적화, 희소행렬, 삼각함수, 미적분 등 특수한 수학 함수와 통계 분포 등을 포함한 기능을 제공한다. Numpy 상위에서 구동된다고 생각하면 편하고 보통 numpy, pandas, matplotlib과 함께 동작한다. 

 

 

Matplotlib

matplotlib은 시각화를 위한 라이브러리이다. 그래프, 히스토그램, 산점도 등 다양한 그래프를 그릴 수 있다. 

 

import matplotlib.pyplot as plt

#원래 iris 데이터의 분포 확인

plt.figure()
colors = ['navy', 'turquoise', 'darkorange']
lw = 2

for color, i, target_name in zip(colors, [0,1,2] , iris.target_names):
    plt.scatter(X[y == i, 0], X[y == i, 1], color=color, alpha=.8, lw=lw,
                label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('PCA of IRIS dataset')

 

이전에 PCA 실습했던 코드이긴 한데 대강 이런 식으로 그래프를 그릴 수 있다. 요건 scatter로 산점도를 그린 것!

%matplotlib inline 명령을 사용하면 브라우저에서 바로 이미지를 볼 수 있다.