파이썬/Data Science

[Data Science] numpy라이브러리 사용하기 [스마트인재개발원]

취준생코린이 2021. 6. 2. 12:32
728x90

 

numpy 라이브러리

  • 고성능 과학계산을 위한 데이터분석 라이브러리 (연산속도가 빠름)
  • import numpy as np 임폴트할때 일반적으로 np로 줄여쓴다.

 

 

numpy.ndarray 클래스

  • 동일한 자료형을 가지는 값들이 배열 형태로 존재
  • N차원 형태로 구성이 가능
  • 각 값들은 양의 정수로 색인(index)이 부여되어 있다.
  • numpy에서 차원을 rank, axis라고 부르기도 한다
  • ndarray를 줄려서 array로 표현한다.

 

numpy.ndarray 클래스로 배열 생성하는 방법

# np.array로 1차원 배열생성
list1 = [1, 2, 3, 4, 5]
arr = np.array(list1)
print(arr)

# np.array로 2차원 배열생성
arr2 = [[1,2,3], [4, 5, 6]]
arr2 = np.array(arr2)
print(arr2)

# np.array로 3차원 배열생성
arr_3D = [[[1,2,3], [4,5,6] ], [[7, 8, 9], [10, 11, 12]]]
arr_3D = np.array(arr_3D)
print(arr_3D)

 

numpy 함수

  • shape: 행렬의 크기를 알려줌
  • size: 배열의 전체 요소 개수 확인
  • dtype: ndarray안의 값 타입을 확인하는 키워드
  • ndim: ndarray의 차원의 수를 알려줌
  • zeros((array 크기)): 0으로 된 배열을 만들어줌
  • ones(): 원하는 크기만큼의 1으로된 arrsay를 초기화하여 생성
  • full( (array 크기), 초기화값): 원하는 크기만큼의 array를 원하는 초기화값으로 생성
  • arange(시작, 끝, 증감): 배열 생성
  • random.rand(1차원크기, 2차원크기, 3차원크기, ...): 원하는 크기의 ndarry를 0~1사이의 무작위 소수값으로 초기화
  • randint(시작, 끝-1, size(=원하는 shape)):원하는 shape 크기로 배열을 만듬, 시작과 끝-1의 무작위 정수로 초기화
  • array(배열, dtype = np.int64): dtype = 바꾸고 싶은 타입으로 데이터 배열 타입을 바꿀수 있다.
  • astype('바꾸고 싶은 타입'): 타입을 바꿔줌
  • reshape(행, 열): 2차원 array생성

 

shape : 배열의 크기

list1 = [1, 2, 3, 4, 5]
arr = np.array(list1)

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

arr_3D = [[[1,2,3], [4,5,6] ], [[7, 8, 9], [10, 11, 12]]]
arr_3D = np.array(arr_3D)

# shape: 행렬의 크기를 알려줌
print(arr.shape)
print(arr2.shape)
print(arr_3D.shape)

shape 결과창

size : 배열의 개수

# size: 배열의 전체 요소 개수 확인
print(arr.size)
print(arr2.size)
print(arr_3D.size)

size결과창

 

dtype : 배열의 타입

# dtype: ndarray안의  값 타입을 확인하는 키워드
print(arr.dtype)   # int32 중 32: 이 데이터를 나타내는 비트 수
print(arr2.dtype)
print(arr_3D.dtype)

dtype 결과창

ndim : 배열의 차원

# ndim: ndarray의 차원의 수를 알려줌
print(arr.ndim)
print(arr2.ndim)
print(arr_3D.ndim)

ndim 결과창

 

동일한 값으로 array 초기화하여 생성

# zeros(): 원하는 크기만큼의 0으로된 array를 초기화하여 생성
np.zeros((3,4))

# ones(): 원하는 크기만큼의 1으로된 array를 초기화하여 생성
arr_ones = np.ones((3, 4))
arr_ones

# full( (array 크기), 초기화값): 원하는 크기만큼의 array를 원하는 초기화값으로 생성
arr_full = np.full([6, 5], 7)
arr_full

 

 

# np.arange(a, b, c) : a~ b-1까지 c간격으로 연속된 값 생성 
arr = np.arange(1, 51, 2)
arr

 

# np.random.rand(1차원크기, 2차원크기, 3차원크기, ...): 원하는 크기의 ndarry를 
# 0~1사이의 무작위 소수값으로 초기화
arr = np.random.rand(2, 3) 
arr


# randint(시작, 끝-1, size(=원하는 shape)):원하는 shape 크기로 배열을 만듬, 
# 시작과 끝-1의 무작위 정수로 초기화
np.random.randint(1, 46, (2,3))


# np.array([1.2, 3.4, 9.8], dtype = np.int64)
arr_type = np.array([1.2, 3.4, 9.8], dtype = np.float64)
print(arr_type.dtype)
arr_type


# astype('바꾸고 싶은 타입'): 타입을 바꿔줌
arr_type = arr_type.astype('float64')
arr_type

 

 

Array Opertaion

  • 1) array와 array가 아닌 값과 연산
  • 2) array와 array끼리 연산
  • 3) 리스트의 연산과 차이점

 

# attay가 아닌값
list1 = [1, 2, 3]

# array인 값
arr = np.array([2, 4, 6])
arr2 = np.array([3, 5, 7])


# 더하기 연산
print(arr + arr2)
print(arr + 2)
print(arr + list1)
# print(list1 + 2) --> 리스트에 더하기 연산을 하면 에러가 뜬다.


# 곱하기 연산
print(arr * arr2)
print(arr * 2)
print(arr * list1)
print(list1 * 2)  # --> 리스트에 곱하기 연산은 리스트 값이 곱해지는게 아니라 반복이 된다.

 

 

numpy array 인덱싱 & 슬라이싱

arr = np.array([[2, 4, 6], [1, 2, 3]])
print(arr[0])
print(arr[0][0])
print(arr[0, 0])
print(arr[0:2])

 

 

reshape(행, 열): 2차원 array생성

# reshape(행, 열): 2차원 array생성

arr2 = np.arange(50)
print(arr2)
print(arr2.shape)

arr2 = arr2.reshape(5, 10)
print(arr2)
print(arr2.shape)

 

 

indexiing 과 slicing의 차이

  • indexiing은 값 하나를 가리키기 때문에 그 값을 돌려줌
  • slicing은 여러 값을 되돌려주기 위해 array형태로 돌려줌

 

# arr = np.array([[0, 1, 2, 3,4,5,6,7,8,9], [10,11,12,13,14,15,16,17,18,19]])
# arr2 = np.array([ [ [1,2,3], [4,5,6] ], [ [7, 8, 9], [10, 11, 12] ] ])

# # 0행부터 1행까지 전체 열 출력
print(arr2[:2,:])
# # 전체행의 1열만 출력
print(arr2[:,0])
## 0행부터 3행까지 0열부터 4열까지 출력
print(arr2[:4, :5])

 

파일 읽기

  • loadtxt('파일이름', delimiter = '구분자'): 파일을 구분자로 구분하여 불러들임
# loadtxt('파일이름', delimiter = '구분자'): 파일을 구분자로 구분하여 불러들임

# 첫번째 행 키 (cm), 두 번째 행 몸무게(kg)
data =np.loadtxt('height_weight.txt',delimiter = ',' )
data

 

Boolean 색인

  • array와 단일값과 비교연산자를 통해 boolean array를 얻는다
  • array[boolean] 하면 곱할때 boolean이 True인 array만 나온다
  • boolean indexing

 

name = np.array(['운비', '세욱', '승준', '동원'])
boolean = np.array([True, False,True, False])
print(name[boolean])   # boolean이 트루인것만 나옴

 

name = np.array(['운비', '세욱', '승준', '동원'])
# 각 학생별 2과목 점수
name_score = np.array([[60, 60], [100, 90], [80, 80], [90, 90]])
print(name_score)

 

# 1.array와 단일값과 비교연산자를 통해 boolran array를 얻음
name == '운비'

# 2. array indexing에 boolean array를 사용하여 boolean indexing 진행
name_score[name == '운비']

 

 

univeraslly 함수

  • sum() : 합계
  • mean() : 평균
  • sqrt() : 제곱근
  • abs() : 절대값

 

# array의 합계: sum()
arr = np.random.randint(1, 10, size = (2, 5))
print(arr)

print(arr.sum())
print(np.sum(arr))


# array의 평균: mean()
print(arr.mean())
print(np.mean(arr))


# 모든 array값에 root씌우기(제곱근 구하기): sqrt()
np.sqrt(arr)  # 제곱근


# 절대값을 씌운 array구하기: abs()
arr = np.array([-1, 1, -7, 8, -11])
np.abs(arr)

 

csv파일로 저장

  • np.savetxt('파일이름', 저장하고싶은 데이터, delimiter='구분자', fmt ="포맷팅")

 

아래와 같은 방식으로 파일을 저장할 수 있다.

user_mean_list는 위에서 안만들어서 만약 아래 코드 그대로 실행하면 아무값도 안뜸

np.savetxt('user_id_mean.csv', user_mean_list, delimiter=',', fmt ="%.3f")  
# %.3f: 소수점 3자리까지만 표기 // %f: 소수로 나타내겠다

 

 

 

스마트인재개발원에서 진행된 수업내용입니다

https://www.smhrd.or.kr/

728x90