Python

[Python] 데이터를 array와 table로 표현하고 시각화 하기 / NumPy, Pandas, Matplotlib

토오오끼 2021. 7. 16. 21:27
728x90

 

 

>NumPy<

파이썬은 numpy의 정말 많은 기능들을 사용할 수 있다.

numpy를 사용하기 위해서는 pip로 numpy를 설치 해 주어야 한다.

콘다를 사용하는 사람이라면 따로 설치할 필요가 없으나 콘다 터미널 창에서 conda list | grep numpy로 확인하는 것이 좋다.

 

- ndarray

numpy로 array를 만드는 방법에는 argane(), array([])가 있다.

numpy.ndarray는 모든 요소들의 타입이 동일해야 한다.

아래 코드에서 c를 보면 문자열 '4'로 인해 모든 요소들이 문자열로 바뀌었다.

문자열을 숫자로 바꾸진 못해도 숫자는 문자열로 바꿀 수 있기 때문이다.

>>> import numpy as np

>>> a = np.arange(3)
>>> a
[0 1 2]

>>> b = np.array([0,1,2])
>>> b
[0 1 2]

>>> c = np.array([0,1,2,3,'4'])
>>> c
['0','1','2','3','4']

 

- 특수행렬

numpy는 단위행렬, 0 행렬, 1 행렬 등과 같은 특수 행렬을 함수로 제공하고 있다.

>>> import numpy

>>> np.eye(3)    #단위행렬
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
       
>>> np.zeros([2,3])   #0 행렬
array([[0., 0., 0.],
       [0., 0., 0.]])

>>> np.ones([3,3])   #1 행렬
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

전치행렬도 ndarray로 가능하다.

>>> improt numpy as np

>>> a = A = np.arange(24).reshape(2,3,4)
>>> a
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]
  
>>> a.T
[[[ 0 12]
  [ 4 16]
  [ 8 20]]

 [[ 1 13]
  [ 5 17]
  [ 9 21]]

 [[ 2 14]
  [ 6 18]
  [10 22]]

 [[ 3 15]
  [ 7 19]
  [11 23]]]
  
  
  #np.transpose는 행렬의 축을 어떻게 변환할지 정해줌.
  #a 행렬의 3,2,1번째 축을 자신의 1,2,3번째 축으로 바꿈
  >>> b = np.transpose(a, (2,1,0)) 
  >>> b
[[[ 0 12]
  [ 4 16]
  [ 8 20]]

 [[ 1 13]
  [ 5 17]
  [ 9 21]]

 [[ 2 14]
  [ 6 18]
  [10 22]]

 [[ 3 15]
  [ 7 19]
  [11 23]]]     #a.T와 같은 결과가 나오는 것을 알 수 있음.

 

- 브로드캐스트

numpy에서 가장 유용(?하다고 생각되는 기능인 브로드캐스트는 ndarray와 상수끼리 산술연산이 가능하며 서로 크기가 다른 ndarray끼리도 산술연산이 가능하다.

>>> import numpy as np

>>> a = np.arange(6).reshape(3,2)
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
       
#ndarray와 상수의 연산       
>>> a*2
array([[0, 2],
       [4, 6],
       [8, 10]])
       
#크기가 다른 ndarray끼리의 연산
>>> a = np.arange(9).reshape(3,3)
>>> a
[[0 1 2]
 [3 4 5]
 [6 7 8]]

>>> b = np.array([1, 2, 3])
>>> b
[1 2 3]

>>> a+b
array([[ 1,  3,  5],
       [ 4,  6,  8],
       [ 7,  9, 11]])

크기가 다른 두 행렬이 무조건 연산이 되는 것은 아니다.

수학에서의 행렬끼리의 계산과 마찬가지로 3x3 행렬과 1x2행렬의 연산은 당연히 되지 않는다.

 

- random

numpy에서는 난수를 지원한다. 정말 많이 쓰는 기능인데,

np.random으로 사용할 수 있으며 random 패키지 안에는 또 다양한 기능이 많이 내장되어 있다. 

import numpy as np

 # 0~1 사이의 실수형 난수 하나를 생성함.
print(np.random.random())  
>>> 0.8051337418405335

# 0~9 사이에서 1개의 정수형 난수 하나를 생성함.
print(np.random.randint(0,10))   
>>> 8

# 리스트에 주어진 값 중 하나를 랜덤하게 골라줌.
print(np.random.choice([0,1,2,3,4,5,6,7,8,9]))   
>>> 4

 

- 통계 관련 수식

numpy를 사용하여 평균값, 표준편차값, 중앙값을 계산할 수 있다.

평균값 : np.mean()

표준편차값 : np.std()

중앙값 : np.dedian()

 

- 이미지를 array로 표현

파이썬에서는 numpy를 사용하여 이미지를 2d 또는 3d rray로 표현할 수 있다.

이미지 파일을 불러오는 방법은 pillow, opencv가 있지만 이 둘의 내용은 후에 따로 포스팅 할 예정이므로 여기선 이미지를 불러온 후의 내용만 다룰 예정이다.

위의 코드 및 결과는 pillow 모듈을 사용하여 이미지를 불러온 후 np.array를 이용하여 이미지를 ndarray로 바꾼 결과이다. 이미지가 ndarray로 잘 변환 된 것을 알 수 있다.

 


 

파이썬에서는 데이터를 array로 나타내는 방법 말고도 table로 나타내는 방법도 있다.

데이터 내부에 자체적인 서브 구조를 가진 데이터를 구조화 된 데이터라고 하는데, 이는 딕셔너리 형태로 나타낼 수 있다. 키와 값을 가지는 딕셔너리 데이터로 표현하기는 좋긴 하나 매우 제한적이다.

이러한 종류의 데이터들은 table로 나타내는 것이 보기에도 편한데, 이 때 pandas를 사용하면 좋다.

 

>Pandas<

파이썬 라이브러리인 pandas는 Series와 DataFrame이라는 자료 구조를 제공한다.

pandas는 numpy 기반에서 개발되었다.

축의 이름에 따라 데이터를 정렬할 수 있으며 데이터를 인덱스하여 다룰 수도 있다. 

또, 누락된 데이터를 처리할 수 있으며 데이터를 합치고 관계연산을 수행할 수도 있다.

 

pandas 역시 pip install pandas를 입력하여 모듈을 설치 해야 사용할 수 있다.

 

- Series 

Series는 객체를 담을 수 있는 1d  array와 비슷한 자료구조이다.

리스트, 튜플을 통해 만들 수 있으며 numpy 자료형으로도 만들 수 있다.

Seires는 index와 value가 있다.  이는 Series가 배열과 매우 비슷함을 알 수 있다.

>>> import pandas as pd

>>> a = pd.Series(['a','1','b','2'], index=['c','d','e','f'])
>>> a
c  a
d  1
e  b
f  2
dtype : object

>>> a.index
Index(['c','d','e','f'], dtype='objct')

>>> a.values
array(['a','1','b','2'], dtype = object)

또, Series 객체의 name 속성을 이용해 Series 객체의 이름을 설정하고 Series Index의 name 속성을 이용해 인덱스 이름을 설정할 수 있다. 이는 pandas의 DataFrame에서 매우 중요하다.

 

- DataFrame

데이터프레임은 table과 같은 자료 구조이다.

여러 개의 칼럼을 나타낼 수 있기에 csv 파일이나 excel 파일을 데이터프레임으로 변환을 많이 한다.

위의 그림과 같이 pd.DataFrame을 해주면 데이터를 table로 깔끔하게 나타낼 수 있다.

 


 

>Matplotlib<

 

데이터를 시각화 하는 것 또한 중요하다. 파이썬에서는 pandas, matplotlib, seaborn 등으로 데이터를 시각화 할 수 있다.

나는 학부 4년 + 인턴 4개월까지 데이터를 다루면서 시각화는 matplotlib로만 해왔기에... 나는 matplotlib를 이용하여 데이터 시각화 하는 것에 익숙하기에 matplotlib에 대해서만 아주 아주 간략하게 정리해 둔다.

 

matplotlib 모듈을 사용하면 여러가지 그래프를 그릴 수 있으며 이미지 또한 나타낼 수 있다. 

 

matplotlib의 그래프 그리는 과정은 다음과 같다.

1. fig = plt.figure()

2. ax1 = fig.add_subplot(1,1,1)

3. ax1.bar(x, y)

4. plt의 여러 메소드 grid, xlabel, ylabel 을 이용해서 추가

5. 나타내고 싶은 그래프로 plt.show()

 

- plt.bar()

막대 그래프를 그리는 코드
matplotlib로 그린 막대 그래프

 

- plt.plot()

plt.plot()으로 그래프 그리는 코드
plt.plot()으로 그린 그래프

plt.plot()에는 많은 옵션들이 있다.

line의 모양을 바꿀 수 있으며 line의 색도 지정할 수 있다. 

 


 

 

728x90