feat. numpy의 개념, 배열 생성, 데이터 슬라이싱, 정렬
안녕하세요, 브래드입니다.
오늘은 파이썬으로 데이터 전처리하기 첫 시간으로 numpy의 개념과 기능에 대해 함께 공부해볼게요.
numpy를 알아보기 전에 먼저 라이브러리에 대해 함께 알아볼게요.
라이브러리는 모든 코드를 사용자가 직접 작성할 필요 없이, 간단하게 사용할 수 있게 해주는 함수와 메서드로 이루어진 모듈들의 집합입니다.
모듈은 파이썬 확장자로 이루어진 실행 가능한 하나의 파일이며, 하나의 모듈 안에는 함수, 클래스 변수 등으로 구성되어 있습니다.
라이브러리는 import 명령어로 불러올 수 있으며 구글 코랩에는 자주 사용하는 라이브러리가 설치되어 있습니다. 우리가 학습할 numpy는 라이브러리의 한 종류입니다.
파이썬에서는 기본적으로 배열 자료형을 지원하지 않습니다. 따라서 numpy와 같은 라이브러리를 활용하여 배열 자료형을 나타낼 수 있습니다.
앞서 배웠던 리스트형과 다른 점은 numpy를 활용한 배열은 같은 데이터 타입을 가지는 데이터가 나열된 집합이라는 점입니다.
위의 이미지는 import를 사용하여 numpy를 불러온 모습입니다. 또한, numpy라는 이름을 계속해서 작성하기엔 너무 긴 글자이므로, as를 활용하여 np로 축약해서 활용할 수 있게 만들어준 모습입니다.
우리가 numpy를 사용하는 이유는 다차원 배율을 쉽고 효율적으로 계산해주는 라이브러리이기 때문입니다. numpy는 대부분 Pandas와 함께 연계하여 사용합니다.
데이터는 다양한 형태로 존재하는데, 결국 모든 데이터는 숫자의 배열 형태로 해석 가능합니다. 따라서 숫자의 배열 형태로 된 자료형을 분석 및 계산하기 위해 numpy 라이브러리는 필수적으로 사용됩니다.
numpy 배열을 생성하는 방법은 크게 3가지가 존재합니다.
첫 번째 방법은 리스트 자료형에서 numpy로 변환하는 방법입니다. list 자료형을 만들어준 후, np.array()를 활용하여 numpy 배열을 만들어 줄 수 있습니다.
np.array 내에서 데이터 타입을 지정해줄 수 있습니다.
int, float이나 ' '를 활용하여 문자로 바꾸는 등의 데이터 타입 지정을 해줄 수 있습니다.
자체 생성함수는 다음과 같이 만들어줄 수 있습니다.
np.zeros((4,4))의 경우에는 0의 값들을 4열 4행의 numpy 배열을 만들어달라는 식입니다.
np.eye를 활용하면 단위 행렬을 만들어 수 있으며, np.full은 식 뒤에 원하는 숫자 값을 입력하여 사용자 지정 값을 출력할 수 있습니다.
numpy에서는 np.arange로 등간격 배열을 생성할 수 있습니다.
np.arange(a,b,c)는 a부터 b까지의 구간에서 c의 간격으로 값을 가져와 달라는 식입니다. 또한 np.linspae(a,b,c)는 a부터 b까지의 구간에서 c개의 값을 가져올 수 있는 식입니다.
슬라이싱은 원하는 부분만 추출하거나 형태를 변환할 때 사용할 수 있습니다.
슬라이싱의 기준은 다음과 같습니다.
arr = [ 행 인덱스, 열 인덱스, ... N축 인덱스]
위의 예시 이미지에서는 np.array라는 배열을 arr 변수에 넣은 후 값을 추출하는 모습입니다.
' : ' 의미는 모든 값을 가져오라는 의미로, arr[0,:]의 의미는 0번째 행에서 모든 열을 가져오라는 의미입니다.
슬라이싱의 예시를 함께 살펴보겠습니다.
먼저 첫 번째 식 의미는 1:3, 즉 2번째 행 이상 4번째 행 미만의 값을 가져온다는 의미이므로 2번째, 3번째 행을 가져오는 것입니다.
세 번째 식은 arr 변수 내의 마지막 행 값을 가져와 달라는 식입니다. 또한 네 번째 식도 -1을 사용하여 arr 변수 내의 마지막 행을 가져오라는 식입니다.
다섯 번째 식은 첫 번째 행부터 두 번째 행까지, 두 번째 열부터 세 번째 열까지 값을 가져오라는 식으로 해석할 수 있습니다.
Fancy 인덱싱은 지정된 Index에 해당하는 위치만 배열로 뽑아오고 싶을 때 사용할 수 있습니다.
arr[3,3]은 4번째 행과 4번째 열에 있는 값을 가져오라는 식입니다. 따라서 160이 출력된 모습입니다.
arr[[0,2],:]의 입력을 통해 1번째 행과 3번째 행을 인덱싱한 모습입니다.
arr[[0,1],[0,1]]은 1,2행과 1,2열에서 겹치는 부분을 인덱싱하여 10과 60을 가져온 모습입니다.
numpy에서 다양한 함수를 통해 최솟값 및 최댓값, 합계 및 평균 등을 파악할 수 있습니다.
또한, 해당 값의 인덱스 위치를 파악할 수도 있습니다.
N차원 정렬을 할 때는 sort를 활용하여 정렬할 수 있습니다.
축이라는 의미의 axis에 0값을 입력하여 행 방향으로 정렬한 모습입니다. 또한 [::-1]을 입력하여 행 방향 정렬을 반대로 나타낼 수 있습니다.
이번엔 열 방향으로 정렬해보겠습니다.
축이라는 의미의 axis에 1값을 입력하여 좌에서 우로 정렬된 모습입니다. 이번에도 마찬가지로 [::-1]을 입력한다면, 정렬이 완전히 반대되는 것을 알 수 있습니다.
지금까지 파이썬으로 데이터 전처리하는 방법으로 라이브러리 중 하나인 numpy의 개념과 여러 가지 기능에 대해 알아보았습니다.
다음 시간에는 numpy 행렬의 연산과 성능에 대해 함께 알아보며 numpy를 마무리해보아요.
브래드였습니다. 감사합니다.