-
파이썬 데이터사이언스 핸드북 2장 - Numpy 소개데이터 분석/NumPy 2020. 5. 12. 11:43
3장과 함께 이번 장에서는 파이썬에서 인메모리 데이터를 효과적으로 적재하고 저장하고 가공하는 기법을 설명하겠다. 이 주제는 매우 광범위하다. 데이터세트는 광범위한 원천으로부터 문서나 이미지, 사운드 클립, 수치 측정값 등 거의 모든 것을 아우르는 매우 다양한 형식으로 들어올 수 있다. 이렇게 명백한 다양성에더 볼구하고 모든 데이터를 근본적으로 숫자 배열로 간주하는 것이 도움이 될 것이다.
숫자 배열을 효과적으로 저장하고 가공하는 것은 데이터 과학을 수행하는 절차에서 가장 근본적인 작업이다. 이제 파이썬이 이러한 숫자 배열을 다루기 위해 제공하는 전문 도구인 NumPy 패키지(2장)와 Pandas 패키지(3장) 을 살펴보겠다.
NumPy 란?
NumPy(보통 "넘파이"라고 발음한다)는 2005년에 Travis Oliphant가 발표한 수치해석용 Python 패키지이다. 다차원의 행렬 자료구조인 ndarray 를 지원하여 벡터와 행렬을 사용하는 선형대수 계산에 주로 사용된다. (...) NumPy의 행렬 연산은 C로 구현된 내부 반복문을 사용하기 때문에 Python 반복문에 비해 속도가 빠르다. 행렬 인덱싱(array indexing)을 사용한 질의(Query) 기능을 이용하여 짧고 간단한 코드로 복잡한 수식을 계산할 수 있다.
NumPy 공식 소개 https://numpy.org/
NumPy is the fundamental package for scientific computing with Python. It contains among other things:
-
a powerful N-dimensional array object N차원 배열 객체
-
sophisticated (broadcasting) functions 복잡한 브로드캐스팅 기반의 함수들
-
tools for integrating C/C++ and Fortran code C/C++ C/C++와 포트란 기반으로 프로그램의 신속한 컴파일과 실행이 용이한 도구
-
useful linear algebra, Fourier transform, and random number capabilities 선형대수, 푸리에변환, 랜덤넘버 등 기능성 제공
** 브로드캐스팅이란?
기본적으로 배열에 대한 연산은 같은 배열 사이즈(size)와 형태(shape) 를 가지는 배열끼리만 가능하다. 하지만 NumPy 의 배열은 이 제약을 내부에서 처리해서 서로 다른 사이즈, 형태의 배열도 연산할 수 있게 도와준다. N차원 배열 과 Scalar 숫자, 또는 N차원 배열과 M차원 배열의 합을 특정한 방식으로 처리해준다. 자세한 설명은 아래 글에서!
https://machinelearningmastery.com/broadcasting-with-numpy-arrays/
NumPy (Numeric Python) 준비
아나콘다 스택을 설치했다면 NumPy 가 설치되어있다. 나는 Jupyter Python 으로 바로 접속했으므로 새로 import 해주었다. :D
파이썬의 데이터 타입 이해하기
C 나 Java 에서는 각 변수의 데이터 타입을 명시적으로 선언했지만, 파이썬은 타입을 동적으로 추론한다. 이것은 곧 모든 변수에 어떤 종류의 데이터든 할당할 수 있다는 뜻이다. 즉, C 나 Java 는 컴파일 언어, 파이썬은 동적 언어*이다.
이러한 유연성은 또한 파이썬 변수가 그 값 이상의 무언가를 나타낸다는 뜻이기도 하다. 즉, 변수는 그 값의 유형에 대한 부가 정보도 함께 담고 있다. C 와 같은 컴파일 언어**에서 정수를 지정하는 것에 비해 파이썬에서 정수를 저장할 때 어느 정도 오버헤드***가 있다. (오버헤드: 구체적인 작업을 수행할때 요구되는 간접적인 컴퓨팅 시간, 메모리, 대역대, 또는 다른 자원의 조합)
C 정수는 근본적으로 정숫값을 나타내는 바이트를 포함하는 메모리의 위치를 가리키는 레이블이고, 파이썬 정수는 정숫값을 담고 있는 바이트를 포함한 모든 파이썬 객체 정보를 포함하는 메모리의 위치를 가리키는 포인터이다. (...)
*컴파일 언어 vs. 인터프리터 언어 [간단 소개된 블로그 링크]
**정적 언어 vs. 동적 언어 [소개 블로그]
***오버헤드: 구체적인 작업을 수행할때 요구되는 간접적인 컴퓨팅 시간, 메모리, 대역대, 또는 다른 자원의 조합 [ENG Wikipedia]
파이썬의 리스트/배열 이해하기
- 리스트: 여러 개의 요소를 담는 가변적인 표준 컨테이너
- 배열: 단일 데이터타입을 담는 컨테이너, 리스트와 유사하나 데이터타입이 고정 1개로 제한된다. 데이터타입은 객체 생성 시점에 type code 를 명시해주어야 한다.리스트와 같이 이렇게 유연한 타입을 허용하려면 리스트의 각 항목에 타입 정보와 참조 횟수, 기타 정보가 들어가야 한다. 즉, 각 항목이 완전한 파이썬 객체인 셈이다. 모든 변수가 같은 타입인 경우에는 이 정보가 대부분 불필요하게 중복되므로 고정 타입 배열에 데이터를 저장하는 것이 더 효율적일 수 있다. 파이썬의 리스트는 동적 타입 리스트이고, 배열(그리고 Numpy 의 배열)은 고정타입이다.
파이썬의 array 객체는 배열 기반의 데이터에 효율적인 저장소를 제공하는 반면, NumPy 는 그 데이터에 효율적인 연산을 추가한다.
NumPy 의 배열에 서로 다른 데이터타입 값을 넣으면, 가능한 경우 상위 타입을 취하게 된다. (정수와 부동소수점이 섞여있을 경우 부동소수점으로 변환된다.) NumPy 의 배열은 데이터타입을 명시할 수 있다. 값을 명시된 데이터타입으려 변환하면서 일부 값이 훼손될 수 있으며, 변환 불가능할 경우 에러가 발생한다.
마지막으로 파이썬 리스트와는 달리 NumPy 배열은 명시적으로 다차원이 가능하다.
그 외 참고문서. Why is Python a dynamic language and also a strong typed language?
'데이터 분석 > NumPy' 카테고리의 다른 글
파이썬 데이터사이언스 핸드북 2 장 - NumPy 배열의 기본 기능 (0) 2020.05.16 파이썬 데이터사이언스 핸드북 2 장 - ndarray 소개 (0) 2020.05.16 파이썬 데이터사이언스 핸드북 1장 - 코드 프로파일링 및 시간 측정 (0) 2020.05.09 파이썬 데이터사이언스 핸드북 1장 - IPython 의 에러와 디버깅 (0) 2020.05.05 파이썬 데이터사이언스 핸드북 1장 - IPython 의 꿀팁 명령어 (0) 2020.05.05 -