많은 양의 데이터를 다룰 때 활용하기 좋은 파이썬의 라이브러리 중 하나인 Numpy에 대해 학습해보고
Numpy를 이용해 어떻게 데이터 처리를 하는 지에 대해 학습하는 내용이다.
목차
Numpy
1. Numpy란?
1.1. Numpy란?
- Numerial Python, 파이썬 산술 계산을 위한 패키지
- 효율적인 다차원 배열 ndarray를 제공
- 데이터 배열에 대해 빠른 계산을 할 수 있는 수학 메소드
- 배열을 디스크에 빠르게 읽고 쓸 수 있으며 효율적으로 가공할 수 있음
- 선형 대수 난수 생성 푸리에 변환 등의 고급 수학 기능도 제공함
1.1.1. 사용하는 이유
- 데이터는 이미지, 오디오, 텍스트, 숫자 등의 다양한 형태로 존재
- 결국 이 데이터들은 컴퓨터가 이해하기 위해선 숫자로 변환 해야함.
- 모든 데이터는 숫자로 이루어진 배열의 형태로 표현됨.
- 빠르고 효율적인 배열 연산이 필요
파이썬의 리스트도 가능하지만 데이터가 커질수록 비효율적이지만 Numpy는 저장과 가공의 효율성이 좋음.
1.2. Numpy 데이터 생성 및 타입
import numpy as np
data = [1,3,5,10,2]
array1 = np.array(data1)
- numpy의 다차원 배열은 ndarray
- np.array() 메소드를 통해 파이썬 list를 인자로 받을 것을 numpy 배열로 생성
- np.zeros : 모든 원소가 0인 배열
- np.ones : 모든 원소가 1인 배
- np.arrange : 주어진 범위에 따라 증가/감소하는 배열
- np.eye : 단위 행렬에 해당하는 배열
1.2.1. numpy 데이터 타입
배열은 다양한 데이터 타입을 가질 수 있음.
- int : 정수
- float : 실수
- bool : True /False
- String : 문자열
데이터 타입을 원하는 대로 변환도 가능
2. Numpy 연산
2.1. ndarray 산술연산
- for문 작성이 필요하지 않고 일괄 처리 가능
- 같은 크기 배열간의 연산은 각 원소 단위로 대응되어 적용
2.2. 크기가 다른 배열 간의 연산
- 두 배열의 차원 크기가 중요
- 차원의 크기가 맞으면 알아서 차원의 크기에 맞게 연산을 수행
※ 차원의 크기가 다른 경우 Error가 발생하여 연산이 이루어지지 않음.
2.2. 색인/슬라이스
- 데이터를 저장되어 있는 위치를 의미하며 이를 이용하여 데이터를 선택하고 추출
- 데이터의 일부 혹은 전체를 추출할 때 슬라이스
- 데이터를 복사하기 위해서는 [:]로 슬라이싱해서 변수에 집어넣는 방법이 있음.
※ 슬라이싱 할 때 항상 주의할 꺼
[1:4] → 1부터 4미만임
2.2.1 ndarray 색인
- n차원 배열의 데이터를 선택하기 위해서는 재귀적으로 접근해야함
- d차원 배열의 개별 원소를 선택하기 위해서는 []를 d개 사용해야함
2.2.2. ndarray 슬라이스
- 슬라이스를 사용하여 배열의 일부를 편리하게 선택할 수도 있음.
- n차원 배열의 경우 슬라이스를 하고 싶으면 n개 차원에 대해 각각 적용할 수 있음.
2.2.3. ndarray 전치(transpose)
- transpose : 행과 열을 뒤바꿈
- n차원 배열에 대해서도 사용 가능
- 행과 열의 개념이 아닌 차원을 뒤바꾸는 개념으로 이해해야함.
3. numpy 연산 메소드
3.1. 유니버셜 메소드
- 하나 이상의 배열을 인자로 받아서 연산을 수행하는 메소드
- ex.
- square()
- sqrt() : 루트연
- log10()
- ceil : 올림
- round : 반올림
- 2개의 배열을 인자로 받아서 연산을 수행하는 메소드도 존재
- 덧셈, 뺄셈 곱하기 나누기
- 두 배열을 비교해서 더 큰값과 작은 값을 연산
- power() 지수 연
3.2. numpy 조건절
- boolean 값이 들어있는 배열도 존재
- np.where을 사용하여 if 연산을 배열 단위로 수행
array1 = np.array([1, -1, -2, 3, 1, 2, -3])
new_array = np.where(array1 > 0, 1, -1)
np.where 코드 해석
더보기
array1 > 0 : 조건
조건이 참이면 1
아니면 -1을 반환하는 조건문 형식
3.3. 수학/통계 메소드
- 전체 혹은 축을 따라서 수학/ 통계 연산을 수행하는 메소드
- axis를 인자로 받으면 해당 축을 기준으로 연산을 수행
- max, min은 최대 최소를 반환
- argmax, argmin은 최대, 최소를 가지는 index를 반환
3.4. numpy 정렬
- sort 메소드를 사용해 정렬, 해당 배열의 순서를 바꾸는 메소드
- axis에 따라서 정렬을 수행하는 축이 달라짐
3.5. 집합 메소드
- 배열 내 고유한 값을 추출할 수 있는 unique 메소드
- 배열의 원소가 다른 배열에 포함되어 있는지 알 수 있는 in1d 메소드
3.6. 행렬 연산 메소드
- dot 메소드로 두 행렬을 곱할 수도 있음
- 차원이 맞지 않으면 Error
마무리
2차원 배열까진 무리없이 이해가 가는데 3차원부터 뇌에서 약간 버벅이는 듯한 느낌을 느낌.
개념 자체가 이해가 안되는건 아닌데 배열만 딱 봤을 때 이게 어떤 데이터인지 잘 이해가 안가는 인지부조화?
실습을 여러 번 돌리면서 데이터에 대한 이해를 높이는 것이 필요하다고 판단됨.
행과 열이라는 개념 자체에 익숙해지다보니 차원이라는 개념이 약간 낯설다는 점.
특히 transpose될 때 왜 이렇게 되는지 이해가 잘 안가는 부분.
행렬 관련으로 좀 찾아볼 필요가 있음.
그리고 인덱싱이나 슬라이싱을 할 때 [] 안에 들어가는 숫자에 대한 의미를 잊지 말 것.
'IT > Python' 카테고리의 다른 글
[데이터 시각화] Python-라이브러리 matplotlib 기초 내용 정리 (0) | 2023.03.31 |
---|---|
[데이터 처리] Python-pandas 기초 공부 내용 정리(연산, 데이터프레임 구조,통계 추출, 데이터 입출력) (0) | 2023.03.31 |
[데이터 처리] Python pandas-기초 공부 내용 정리 (자료구조) (0) | 2023.03.31 |
[Python] 기초 내용 정리 (파일입출력, 클래스, 모듈, 패키지 등) (0) | 2023.03.22 |
[Python] 기초 공부 내용 정리(변수, 자료형, 내장함수) (0) | 2023.03.20 |
댓글