본문 바로가기
기타(🎸X)/빅데이터

[빅데이터] 파이썬 빅데이터 분석 패키지 - numpy

by 푸_푸 2023. 5. 28.
728x90

1. numpy 개요

Numerical Python을 의미 → 파이썬에서 선형 대수 기반의 프로그램을 쉽게 만들 수 있도록 지원
루프를 사용하지 않고 대량 데이터의 배열 연산을 가능하게 함 → 빠른 배열 연산 속도를 보장

 

2. numpy 배열 생성

 

1) numpy 임포트

import numpy as np 	#넘파이 임포트

 

2) numpy 생성

a1=np.array([1,2,3])	#넘파이 생성
print(a1)		#결과 : [1 2 3]

 

3) numpy 타입, 크기, 차원

print('array1 type : ',type(a1) )	#결과 : array1 type :  <class 'numpy.ndarray'>	배열의 타입
print('array1 shape : ', a1.shape)	#결과 : array1 shape :  (3,)			배열의 크기
print('array1 dim : ',a1.ndim)    	#결과 : array1 dim : 1 				배열의 차원

 

4) arange 함수

a=np.arange(10)		#arange함수 0부터 x-1까지의 배열 생성
print(a)		#결과 : [ 0  1  2  3  4  5  6  7  8  9]
a=np.arange(1,10,3)	#arange함수 x부터 y-1까지 z만큼 증가하는 배열 생성
print(a)		#결과 : [ 1  4  7]

 

3. numpy 배열 초기화

 

1) 0 또는 1로 초기화

zero_a=np.zeros((2,4)) 	#0으로 채워진 2X4 배열 초기화
one_a=np.ones((3,3)) 	#1으로 채워진 3X3 배열 초기화
print(zero_a)	#결과 : [[0. 0. 0. 0.]
		#	 [0. 0. 0. 0.]]
print(one_a)	#결과 : [[1. 1. 1.]
		#	 [1. 1. 1.]
		#	 [1. 1. 1.]]

 

2) zero_like 함수

zero_b=np.zeros_like(one_a)	#이미 생성된 배열 초기화
print(zero_b)	#결과 : [[0. 0. 0.]
		#	 [0. 0. 0.]
		#	 [0. 0. 0.]]

 

3) one_like 함수

one_b=np.ones_like(zero_a)
print(one_b)	#결과 : [[1. 1. 1. 1.]
		#	 [1. 1. 1. 1.]]

 

4) full, random 함수

full_a=np.full((2,3),9)   	#특정 상수로 배열 초기화
rand_a=np.random.random((2,4)) 	#랜덤 값으로 초기화
print(full_a)	#결과 : [[9 9 9]
 		#	 [9 9 9]]
print(rand_a)	#결과 :	[[0.55560458 0.53254566 0.45070128 0.79803767]
		#	 [0.20161269 0.23030577 0.49311109 0.52979636]]

 

5) eye 함수

eye_a=np.eye(4) 	#주 대각선의 원소 1 나머지 0인 대각행렬
print(eye_a)	#결과 : [[1. 0. 0. 0.]
 		#	 [0. 1. 0. 0.]
		#	 [0. 0. 1. 0.]
		#	 [0. 0. 0. 1.]]

 

4. numpy 배열 크기 변형

 

1) reshape 함수

array1=np.arange(12)    		#0부터 x-1까지 배열
print('array1 : \n', array1)	#결과 : array1 : 
				#	 [ 0  1  2  3  4  5  6  7  8  9 10 11]
array2=array1.reshape(3,4)    	#원하는 형태로 재배열 기본적으로 행부터 채워 넣음
print('array2 : \n', array2)	#결과 : array2 : 
				#	 [[ 0  1  2  3]
				#	 [ 4  5  6  7]
				#	 [ 8  9 10 11]]
array3=array1.reshape(4,3,order='F')	#값을 열부터 채워 넣음
print('array3 : \n', array3)	#결과 : array3 : 
 				#	[[ 0  4  8]
				#	 [ 1  5  9]
				#	 [ 2  6 10]
				#	 [ 3  7 11]]

 

2) reshape 응용

array1=np.arange(10)
array2=array1.reshape(-1,5) 	#컬럼 5에 맞는 행 개수로 자동 변환 재배열
print(array2)			#결과 : [[0 1 2 3 4]
				#	 [5 6 7 8 9]]
print('array2 dim : ',array2.ndim)	#결과 : array2 dim :  2
print('array2 shape : ',array2.shape)	#결과 : array2 shape :  (2, 5)

 

3) reshape 다차원 변형

array1=np.arange(12)
array2=array1.reshape(2,3,2,order='F')	#2X3X2 형태로 값을 열부터 채워넣음
print(array2)				#결과 : [[[ 0  6]
					#	  [ 2  8]
					#	  [ 4 10]]
					#
					#	 [[ 1  7]
					#	  [ 3  9]
					#	  [ 5 11]]]
print('array2 dim : ',array2.ndim)	#결과 : array2 dim :  3
print('array2 shape : ',array2.shape)	#결과 : array2 shape :  (2, 3, 2)

 

4) flatten 함수 (1차원 변형)

array3=array2.flatten()
print(array3)	#결과 : [ 0  6  2  8  4 10  1  7  3  9  5 11]

 

5. numpy 배열 데이터 추출하기

 

1) 인덱싱

배열의 요소에 해당하는 인덱스 값을 [ ] 안에 입력하여 한 개의 데이터를 추출.

array1 = np.arange(1,10)	
print('array1 : ',array1)	#결과 : array1 :  [1 2 3 4 5 6 7 8 9]
value1=array1[2]	#인덱스는 0부터 시작하므로 3번째 인덱스 위치의 데이터 값인 3을 의미
value2=array1[-2]	#-2는 맨 뒤에서부터 두번째의 데이터 값인  8을 의미
print(value1)		#결과 : 3
print(value2)		#결과 : 8
array1=np.arange(1,10)
array2=array1.reshape(3,3)
print('array2 : \n', array2)	#결과 : array2 : 
				#	 [[1 2 3]
				#	 [4 5 6]
				#	 [7 8 9]]
value1=array2[0,0]
value2=array2[-1,-1]
value3=array2[-1,-2]
print(value1)		#결과 : 1
print(value2)		#결과 : 9
print(value3)		#결과 : 8

 

2) 슬라이싱

[x:y] 기호를 이용하여 연속한 데이터를 추출. x부터 y-1까지의 인덱스 위치에 있는 범위의 배열을 반환

array1=np.arange(1,10)	#[1 2 3 4 5 6 7 8 9] 형태
array2=array1[0:3]
array3=array1[:3]
array4=array1[3:]
print(type(array2))	#결과 : <class 'numpy.ndarray'>
print(array2)		#결과 : [1 2 3]
print(array3)		#결과 : [1 2 3]
print(array4)		#결과 : [4 5 6 7 8 9]
array1=np.arange(1,10)
array2=array1.reshape(3,3)
print('array2 : \n',array2)		#결과 : array2 : 
					#	 [[1 2 3]
					#	 [4 5 6]
					#	 [7 8 9]]
print('array2[0:2,0:2]\n',array2[0:2,0:2])#결과 : array2[0:2,0:2]
					#	 [[1 2]
					#	  [4 5]]
print('array2[:2,1:]\n',array2[:2,1:])	#결과 : array2[:2,1:]
					#	 [[2 3]
					#	  [5 6]]

 

6. numpy 선형대수 기본연산

 

1) 행렬 내적(행렬 곱)

array1=np.array([[1,2,3],
                 [4,5,6]])
array2=np.array([[7,8],
                 [9,10],
                 [11,12]])
dot_array=np.dot(array1,array2)
print(dot_array)	#결과 : [[58  64]
			#	 [139 154]]

 

2) 전치 행렬

행과 열 위치를 교환한 원소로 구성한 행렬

array1=np.array([[1,2,3],
                 [4,5,6]])
transpose_array=np.transpose(array1)
print(transpose_array)		#결과 : [[1 4]
				#	 [2 5]
				#	 [3 6]]

 

7. numpy 기술통계

 

1) 배열 데이터 개수 계산 len()

x=np.array([18,5,10,23,19,-8,10,0,0,5,2,15,8,2,5,4,15,-1,4,-7,-24,7,9,-6,23,-13])
len(x)			#결과  : 26

 

2) 평균, 분산, 표준편차 계산 mean(), var(), std()

print(np.mean(x)) 	#결과 : 4.8076923076923075
print(np.var(x))  	#결과 : 115.23224852071006
print(np.std(x))  	#결과 : 10.734628476137871

 

3) 최댓값, 최솟값, 중앙값 계산 max(), min(), median()

print(np.mean(x)) 	#결과 : 4.8076923076923075
print(np.var(x))  	#결과 : 115.23224852071006
print(np.std(x))  	#결과 : 10.734628476137871

 

4) 사분위수 계산 percentile(x,y)

print(np.percentile(x,25))  #결과 : 0.0	1사분위수
print(np.percentile(x,50))  #결과 : 5.0	2사분위수
print(np.percentile(x,75))  #결과 : 10.0  3사분위수

 

 

728x90

댓글