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)
size : 배열의 개수
# size: 배열의 전체 요소 개수 확인
print(arr.size)
print(arr2.size)
print(arr_3D.size)
dtype : 배열의 타입
# dtype: ndarray안의 값 타입을 확인하는 키워드
print(arr.dtype) # int32 중 32: 이 데이터를 나타내는 비트 수
print(arr2.dtype)
print(arr_3D.dtype)
ndim : 배열의 차원
# ndim: ndarray의 차원의 수를 알려줌
print(arr.ndim)
print(arr2.ndim)
print(arr_3D.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: 소수로 나타내겠다
스마트인재개발원에서 진행된 수업내용입니다
728x90
'파이썬 > Data Science' 카테고리의 다른 글
[Data Science] 데이터 퀄리티 높이기 (0) | 2021.06.18 |
---|---|
[Data Science] 큰데이터 프레임/큰 시리즈를 살펴볼때 도움이 되는 함수 (0) | 2021.06.06 |
[Data Science] pandas라이브러리 정리 (0) | 2021.06.06 |
[Data Science] 데이터 사이언스 프로세스 (0) | 2021.05.31 |