프로그래밍/Python

파이썬 데이터 분석 준비! - Numpy배열 다루기 - 1(객체 만들어보기)

Dibrary 2022. 3. 15. 09:30
반응형

안녕하세요 Dibrary입니다.

최근 화두가 되는 데이터 분석 및 빅데이터 등등 데이터가 들어가는 것에 파이썬이 안쓰이는 곳이 없습니다.

데이터를 다루려면 Numpy와 Pandas를 다룰 줄 아는 것이 거진 필수가 되었죠.

그래서, Numpy를 사용하는 방법을 간단하게 정리 해 두고자 합니다. 
먼저 따라해보기 위해서는 Jupyter를 실행 해 주세요.

그리고, 터미널을 열어서 pip install numpy를 해 주시면 됩니다.

그러면 알아서 설치가 완료 됩니다.

 


이제 준비는 끝났습니다. 본격적으로 Numpy를 익혀보겠습니다.
제일 먼저 numpy모듈을 불러들어와야 합니다. 아래와 같이 입력 해 주세요.

위 입력에서 as np는 'numpy라는 명칭을 np라는 별칭으로 앞으로 사용하겠다~' 고 컴퓨터에게 알려주는 겁니다.

5글자를 쳐야 할 순간에 2개만 입력하면 되니까 굉장히 나름 속도가 빨라지겠죠?

 

가장 기본적인 Numpy배열을 만들어보겠습니다.

10개의 숫자를 0부터 시작해서 np.array라는 함수에 집어 넣었고, 반환된 값이 tmp1에 담겨졌습니다.
type을 확인 해 보면 numpy.ndarray라고 나오는 것을 확인 할 수 있습니다.

 

여기서 핵심!

ndarray가 바로 Numpy배열입니다. 기존 배열과 모양이 똑같은데 뭐가 다르냐구요?

그럼 기존 배열과 비교를 해 보겠습니다.

임의의 배열 normal을 만들고, ndarray랑 비교를 했더니? 에러가 납니다. 비교 자체가 성립하지 않는군요!.

그러면 하나의 값만 꺼내어서 비교를 하면 어떨까요? 같다고 인식합니다.

 

 

자 그러면, 해당 Numpy배열의 모양은 항상 print로 출력을 해야 알 수 있을까요?

그렇지 않습니다. shape라는 속성을 확인 하시면 Numpy배열의 모양을 튜플로 확인할 수 있습니다.

네 임의로 3X3 배열인 tmp2를 만들고 shape로 확인 해 보니 (3,3)으로 Numpy배열의 정보를 알 수 있습니다.

이 외에도, dtype속성은 데이터 자료형을 확인할 수 있고, (Numpy는 반드시 자료형이 같아야 합니다. 아래 참고)

ndim은 차원을 확인할 수 있습니다.

 

한가지 팁을 드리자면, 이 shape 값을 언패킹 해서 반복문을 돌면 원소의 값을 모두 확인 해 볼 수 있습니다. (파이썬 코딩의 기술 way 13 참고)

 

Numpy배열의 또 하나 특징으로는, 내부에 들어있는 값들의 자료형은 모두 같아야 합니다.

보시면 정수와 실수를 섞어서 Numpy배열을 만들었고,
확인 하니 자료형은 float64 라고 알려줍니다.

정수로 넣은 값을 확인 해 보니 numpy.float64라고 변환을 합니다.

Numpy는 파이썬과 자료형에 차이를 둬서, C같은 저수준 언어와도 연동이 쉽게 만들었습니다. 

Numpy의 자료형을 대략적으로 몇 개만 소개 하겠습니다.

int8, uint8 부호가 있는 8비트 정수, 부호가 없는 8비트 정수
int64, uint64 부호가 있는 64비트 정수, 부호가 없는 64비트 정수
float16 반정밀도 부동소수점
float32 단정밀도 부동소수점
bool 불리언형
string_ 고정길이 아스키 문자열 형

 


Numpy배열을 사용해 간단한 산술 연산을 해 보겠습니다.

먼저 배열을 하나 만들어서 사칙연산을 해 보겠습니다.

너무 쉽죠? 그저 Numpy배열에 사칙연산만 하면 내부 데이터들이 모두 적용됩니다.

그러면, 일반 리스트에는 어떨까요? 에러가 납니다.

말 그대로 list에는 사칙연산을 적용할 수 없다는 말이죠.

 

바로 이 부분에서, 굉장한 속도 차이를 보일 수 있습니다. 임의의 2차원 배열의 모든 원소에 3을 곱하는 계산을 해보겠습니다.

위쪽이 단순 list를 사용한 코드고, 아래쪽이 Numpy를 사용한 코드입니다.

약 3배 이상 차이가 나죠? 데이터가 더 많으면 기하급수적으로 속도 차이가 나게 됩니다.

그래서 Numpy를 파이썬으로 데이터 다룰 때 많이 사용합니다.

 

 

만일 프로그램을 만들다가 데이터의 양 + 연산 때문에 병목이 잡힌다면, Numpy를 생각해 보는 것도 좋습니다.

728x90
반응형