파이썬 데이터 분석 |(Numpy)

이상우·2021년 8월 17일
0
post-thumbnail

이번주는 드디어 파이썬을 가지고 데이터 분석을 하는 것을 배웠다. 매번 강의를 통해 배우지만, 이론상으론 이해해도 막상 쓸려고하면 막히는 부분이 있다. 강사님께서 이런 부분은 수없이 코딩을 해보는 수밖에 없다고 하셨다. 그래도 예전 행력을 배우면서 손수 계산하는 것을 이제는 코딩으로 그것을 간단하게나마 구현해가는게 재밌었다. 문제풀이시간을 통해 Jupyter NoteBook을 써보았는데, 셀형식으로 돌아가는 것이 신기했다.

Numpy

행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리이다.

1.리스트에서 행렬/배열 생성

import numpy as np # numpy 패키지 로드하여 np로 사용
a = [[1,2,3], [4,5,6]] # 리스트에서 행렬생성
b = np.array(a) 
print(b)

[[1 2 3] #결과값
[4 5 6]]

# 배열의 열수(차원)
print(b.ndim)  # 2

# 배열의 차원 
print(b.shape) # (2, 3)

# 배열의 원소 접근
print(b[0,0])  # 1

2.특수한 배열의 생성

# 1씩 증가하는 1차원 배열(시작이 0부터)
print(np.arange(10)) # [0 1 2 3 4 5 6 7 8 9]

# 1씩 증가하는 1차원 배열(시작이 5부터)
print(np.arange(5, 10)) # [5 6 7 8 9]

# 영행렬 생성
print(np.zeros((2,2)))  # [[0. 0.]
                           [0. 0.]]
# 유닛행렬
print(np.ones((2,3)))  # [[1. 1. 1.]
                          [1. 1. 1.]]
# 모든 원소가 5인 2*3행렬
print(np.full((2,3), 5)) # [[5 5 5]
                            [5 5 5]
# 단위행렬                    
print(np.eye(3)) # [[1. 0. 0.]
                    [0. 1. 0.]
                    [0. 0. 1.]]                          

3.배열의 차원 변환

a = np.arange(20)
print(a)

a는 [0, 1, 2, 3..., 19]를 가지는 리스트가 있다. reshape(행, 열)을 쓰면 배열이 변환한다. 아래를 보자.

b=a.reshape((4,5))
print(b)

#결과값
#[[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]

4. Numpy 슬라이싱/인덱싱

파이썬 기초를 배울때 리스트를 슬라이싱하는방법을 배웠는데, 행렬도 슬라이싱 방법은 같다. (열[슬라이싱 범위], 행[슬라이싱 범위])만 기억해두면 좋을 것이다. 밑에 그림을 보면 이해가 쉬울 것이다.

Numpy 연산

특징

  • 배열간 연산 가능
  • +,-,*,/ 등의 연산자 사용가능
import numpy as np

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

# 각 요소 더하기
c = a+b # [5 7 9]

# 각 요소 빼기
c = a-b # [-3 -3 -3]

# 각 요소 곱하기
# c = a*b #[4 10 18]
 
# 각 요소 나누기
# c = a/b # [0.25 0.4 0.5]
  • add(), substract(), multiply(), divide()
import numpy as np

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

# c= np.add(a, b)
print(c) # [5 7 9]

# c= np.substract(a, b)
print(c) # [-3 -3 -3]

c = np.multiply(a, b)
print(c) #[4 10 18]

c = np.divide(a,b)
print(c) # [0.25 0.4 0.5]

dot()함수: 행렬의 곱 -> 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다!!

import numpy as np
arr1 = [[1,2],[3,4]]
arr2 = [[5,6],[7,8]]
a = np.array(arr1)
b = np.array(arr2)

c= np.dot(a, b)
print(c)

#결과값
[[19 22]
[43 50]]

모든 원소의 합: sum(), 모든 원소의 곱: prod()

import numpy as np

a = np.array([[-1,2,3],[3,4,8]])
s = np.sum(a)
print('sum=',a.sum()) #sum= 19

# 행별/열별 연산 (axis=0/1)

#axis=0은 행끼리 더하라는 뜻
print('sum by row=',a.sum(axis=0)) #sum by row= [ 2  6 11]

#원소 평균구하기
print('mean=',a.mean()) #mean= 3.1666666666666665

#표준편차 구하기
print('sd=',a.std()) #sd= 2.6718699236469

#모든 원소의 곱
print('product=',a.prod()) #product= -576

참고사이트

https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88 - 행렬의 곱
http://bigdata.dongguk.ac.kr/lectures/Python/_book/numpy.html - 파이썬 기초/4장 Numpy

profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글