본문 바로가기

DATA

01.Python Numpy

안녕하세요, 쌍심지입니다 

파이썬으로 하는 데이터 분석의 기초인 Numpy 패키지 공부한 것을 정리해보았습니다.

아침에 한시간씩 회사에서 공부하려고 하는데 진도가 생각보다 빨리 안나가네요.

그래도 더 열심히 해봐야겠습니다.

조만간 pandas 라이브러리도 올리겠습니다.

그럼 이만.

import numpy as np

array1 = np.array([1,2,3])
print('array1 type: ',type(array1))  # <class 'numpy.ndarray'>
print('array1 shape: ', array1.shape)  #   (3,)

array2 = np.array([[1,2,3],[2,3,4]])
print('array2 type: ',type(array2))  # <class 'numpy.ndarray'>
print('array2 shape: ', array2.shape)  #   (3,)

array3 = np.array([[1,2,3]])
print('array3 type: ',type(array3))  # <class 'numpy.ndarray'>
print('array3 shape: ', array3.shape)  #  (1, 3)

print('array1: {:0},array2: ,{:1}, array3:, {:2}'.format(array1.ndim, array2.ndim, array3.ndim))

list1 = [1,2,3]
print(type(list1))
array1 = np.array(list1)
print(type(array1))
print(array1, array1.dtype)

# ndarray 내의 데이터 타입은 같은 데이터타입만 가능.
# 각 데이터 타입이 다른 list를 ndarray로 변환시 더 큰 데이터타입으로 일괄 형변환
list2 = [1,2,3.14]
array2 = np.array(list2)
print(array2, array2.dtype) # ['1' '2' 'test'] <U11

array2.astype('int32')

##ndarray 편리하게 생성하기 - arange, zeros, onese
sequence_array = np.arange(10)
print(sequence_array)
print(sequence_array.dtype, sequence_array.shape)

zero_array = np.zeros((3,2), dtype = 'int32')
print(zero_array)
print(zero_array.dtype, zero_array.shape)

one_array = np.ones((3,2))
print(one_array)
print(one_array.dtype, one_array.shape)

#reshape 함수
array1 = np.arange(10)
print('array1:\n', array1)

array2 = array1.reshape(2,5)
print('array2:\n', array2)

array3 = array1.reshape(5,2)
print('array3:\n', array3)

# 단, 지정된 사이즈로 변경 불가할 경우 에러 반환

# reshape 어떻게 일일이 다 세요? 
array1 = np.arange(10)
print(array1)
array2 = array1.reshape(-1,5)
print('array2 shape:', array2)
array3 = array1.reshape(5,-1)
print('array3 shape:', array3)

# 마찬가지로 나눴을때 안떨어지면 에러 반환

# reshpae(-1,1): 원본 ndarray가 무엇이던지간에 2차원, 한 row에 한 컬럼만 있는 형태 반환
array1 = np.arange(8)
array3d = array1.reshape((2,2,2))
print('array3d:\n', array3d.tolist())
#print('array3d:\n', array3d)

# 3차원 -> 2차원
array5 = array3d.reshape(-1,1)
print('array5:\n', array5.tolist())

# 1차원 -> 2차원
array6 = array1.reshape(-1, 1)
print('array6:\n', array6.tolist())
print('array6 shape:',array6.shape)

# ndarray 데이터세트 선택하기- indexing
array1 = np.arange(start=1, stop=10)
print('array1:', array1)
value = array1[2]
print('value:', value)
print(type(value))

# 2d array에서 데이터 선택하기 array명[row, col]
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)
print(array2d)

print(array2d[0,0])
print(array2d[2,1])

array1 = np.arange(start = 1, stop=10)
array3 = array1[0:3]
print(array3)
print(type(array3))

array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)

print(array2d[0:2, 0:1])

# fancy indexing
array1 = np.arange(start = 1, stop=10)
array2d = array1d.reshape(3,3)
array3 = array2d[[0,2],2]
print(array3)

## boolean indexing
array1 = np.arange(start = 1, stop=10)
#array1d%2==0
array1d[array1d %2 == 0]

# sort
org_array = np.array([3,1,9,5])
print('원본행렬:',org_array)

#np.sort
sort_array1 = np.sort(org_array)
print('np.sort() 결과', sort_array1)
print('np.sort() 후 원본', org_array)

#ndarray.sort
sort_array2 = org_array.sort()
print('ndarray.sort() 결과', sort_array2)
print('ndarray.sort() 후 원본', org_array)

sort_array1_desc = np.sort(org_array)[::-1]
print('내림차순:', sort_array1_desc)

# 2차원 행렬
array2d = np.array([[8,12],[7,3]])

sort_array2d_axis0 = np.sort(array2d, axis = 0)
print('axis0로 정렬 \n', sort_array2d_axis0)

sort_array2d_axis1 = np.sort(array2d, axis = 1)
print('axis1로 정렬 \n', sort_array2d_axis1)

# 정렬된 행렬의 원본 행렬 인덱스 반환
org_array = np.array([3,1,9,5])
sort_indices = np.argsort(org_array)[::-1]
print(type(sort_indices))
print('행렬 정렬 시 원본 행렬의 인덱스:\n', sort_indices)

# 행렬의 곱
A = np.array([[1,2,3],[4,5,6]])
B = np.array([[1,2],[3,4],[5,6]])
dot_product = np.dot(A,B)
print('행렬의곱:\n', dot_product)

# 전치행렬
C = np.array([[3,4],[1,2]])
transpose = np.transpose(C)
print(transpose)