CS log
[Data analytics study] Week 1 - Chapter 4 : 수치 연산이 쉬운 넘파이 본문
[Data analytics study] Week 1 - Chapter 4 : 수치 연산이 쉬운 넘파이
sj.cath 2024. 5. 14. 00:410. intro
교재 : 데이터 분석을 위한 전처리와 시각화 with 파이썬
https://product.kyobobook.co.kr/detail/S000201770637
앞부분은 파이썬과 관련된 기본적인 함수 및 데이터 분석 개요 등이어서 skip하기로 했다.
이번 단원은 이미 교환학생 생활동안 <파이썬 머신러닝 완벽 가이드>로 혼자 공부하면서 넘파이에 관한 기본적인 지식은 습득한 상태로 어렵지 않게 공부할 수 있었다.
1. 넘파이 배열 개념 및 특징
1) 파이썬에서 리스트와 배열의 차이
https://siloam72761.tistory.com/entry/파이썬-자료구조-파이썬에서-배열과-리스트의-차이
파이썬에서 리스트란?
리스트는 파이썬에 내장된 데이터 구조로 items의 collections을 가진다.
- 리스트의 아이템들은 대괄호로 묶인다. [i1,i2,i3]
- 리스트는 인덱스로 정렬되어있다.
- 리스트는 변경 가능하다.
- 리스트는 중복 가능하다. [i1, i1]
- 리스트는 여러가지 데이터 타입이 가능하다. 같은 리스트에 object, string, integer를 같이 넣을 수 있다.
코드
list = [i1,i2,i3]
print(list)
print(type(list))
결과
[i1,i2,i3]
<class 'list'>
파이썬에서 배열이란?
배열도 리스트와 같이 파이썬에 내장된 데이터 구조로 items의 collections을 가진다.
리스트가 가졌던 특징들처럼 대괄호, 정렬, 변경 가능, 중복 가능하다.
하지만 어떤 배열을 배열의 종류로 사용하냐에 따라 여러가지 데이터 타입이 가능할 수도 있고 아닐 수도 있다.
2-1 Array module
코드
import array as arr
array_1 = arr.array("i", [2, 4, 6, 8])
print(array_1)
print(type(array_1))
결과
array('i', [2, 4, 6, 8])
<class 'array.array'>
파이썬의 array module은 모든 배열의 원소들이 같은 데이터 타입일 것을 요구한다.
여기서 "i" 부분은 array_1의 원소들이 다 정수인 것을 나타낸다.
2-2 Numpy
코드
import numpy as np
array_2 = np.array(["numbers", 2, 4, 6, 8])
print (array_2)
print(type(array_2))
결과
['numbers' '2' '4' '6' '8']
<class 'numpy.ndarray'>
numpy의 경우 서로 다른 데이터타입이 가능하다.
"numbers'는 문자열이고 2,4,6,8은 정수형이다.
리스트와 배열의 차이
- 배열은 선언돼야 하지만 리스트는 그렇지 않다.
- 배열은 array module이나 numpy를 이용하지만 리스트는 대괄호로 원소들을 감싸주기만 하면 된다.
- 배열은 데이터를 메모리에 조밀하게 저장가능하다. 리스트는 쉬운 원소 추가를 위해 큰 메모리가 필요하다.
- 배열은 한 원소에 대해 추가, 삭제, 업데이트를 하기에 변경이 어렵다. 리스트는 반면 변경이 쉽다.
- 배열은 사칙연산에 뛰어나다. 리스트는 직접적으로 수학적 연산이 안된다.
- 배열은 모든 원소가 같은 크기를 가져야 한다. 리스트는 리스트 안에 중첩이 가능하다.
언제 리스트, 배열을 쓰는게 좋을까?
- 리스트가 좋은 경우
- 상대적으로 적은 양의 아이템을 저장하고, 수학적 연산을 필요로 하지 않을 때 좋다.
- 리스트가 배열보다 속도가 더 빠르다.
- 파이썬의 배열은 파이썬의 리스트를 기반으로 한다.
- 배열이 좋은 경우
- 매우 큰 양의 양의 아이템을 저장할 때 좋다. 효과적인 데이터 저장을 한다.
- 각 아이템 간의 수학적 연산을 할 경우 배열이 좋다.
- 데이터 분석이나 데이터 사이언스는 주로 Numpy에 의존한다.
2) 넘파이
- 파이썬에서 베열을 사용하기 위한 표준 패키지
- 판다스와 맷플롯립의 기반
- 기본적으로 array라는 단위로 데이터를 관리
- 유용한 선형 대수학, 푸리에 변환 및 난수 기능
3) 넘파이 배열 생성
https://github.com/8-DAstudy-8/DAbook1/tree/sojeong
3. 넘파이 배열 조회
넘파이는 배열의 속성을 검사하는 방법을 제공한다.
- ndim : 배열 차원 수 또는 배열 축의 수
- shape : 배열 각 차원의 크기를 튜플 형태로 표현
- size : 배열 원소의 개수
- dtype : 배열 내 원소의 데이터형
- itemsize : 배열 내 원소의 크기를 바이트 단위로 기술
- nbytes : 배열 전체 바이트
4. 배열의 연산
axis=None : 전체 행렬을 하나의 배열로 간주하고 집계 함수의 범위를 전체 행렬로 정의한다.
axis = 0 : 열 방향 묶기
axis = 1 : 행 방향 묶기
4.2 브로드캐스팅 연산
두 배열간의 shape가 다르면 다음과 같이 두 배열 간의 형상을 맞추는 브로드캐스팅 과정을 거친다.
# case 2 : shape가 다른 배열들의 연산
a = np.arange(5).reshape((1,5))
print(a)
b = np.arange(5).reshape((5,1))
print(b)
print(a+b) # broadcasting
[[0 1 2 3 4]]
[[0]
[1]
[2]
[3]
[4]]
[[0 1 2 3 4]
[1 2 3 4 5]
[2 3 4 5 6]
[3 4 5 6 7]
[4 5 6 7 8]]
두 행과 열 모두!! 확장해서 더한다.
'AI > Machine Learning' 카테고리의 다른 글
[기계학습] Model assessment (0) | 2024.11.19 |
---|---|
[Data Analytics Study] Week 4 : 시각화 라이브러리 (0) | 2024.05.28 |
[Data Analytics Study] Week2 - Ch5. 데이터 처리가 쉬운 판다스 (0) | 2024.05.20 |