안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.
Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.
<Numpy 패키지 관련 이전 글>
2021.06.16 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념
ndarray의 인덱싱과 슬라이싱
이미 이 글을 읽으시는 분들은 파이썬 기초 문법을 공부하시면서 리스트의 인덱싱과 슬라이싱에 대해서 한 번쯤 들어보셨을 것이라 생각됩니다. 기본적으로 ndarray의 인덱싱, 슬라이싱도 리스트와 같은 규칙을 따릅니다.
2021.03.12 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 4편_리스트 자료형
따라서 1차원 array의 인덱싱은 리스트 문법 글로 대신하고, 2차원 array에 대해서만 간단히 정리하고 넘어가겠습니다.
2차원 array의 인덱싱과 슬라이싱
기초문법 강의에서는 자세히 다루지 않았었지만 리스트 안에는 리스트가 들어갈 수 있습니다. 이런 식으로 말이죠.
arr_list = [[1,2,3],[4,5,6],[7,8,9]]
print(arr_list[0][2]) # 리스트의 0번 인덱스 안의 2번 인덱스
>>> 3
print(arr_list[2][0]) # 리스트의 2번 인덱스 안의 0번 인덱스
>>> 7
이 리스트를 numpy.array( ) 안에 넣어서 ndarray를 만들면 그것이 바로 행렬(matrix)가 되며, 거의 동일하게 인덱싱할 수 있습니다.
arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])
# 1행, 3열 --> 3
arr_2d[0,2]
# 3행, 1열 --> 7
arr_2d[2,0]
비슷한 개념의 슬라이싱도 해볼까요? 이미 아시겠지만 슬라이싱이란 간단히 '범위 인덱싱'이라고 생각하시면 됩니다.
참고로 슬라이싱의 0:2가 뜻하는 것은 0이상 2이하라는 뜻입니다.
# 2행 모두 --> array([4,5,6])
arr_2d[1, :]
# 1열 모두 --> array([1,4,7])
arr_2d[:, 0]
# 3행의 1,2열 --> array([4,5])
print(arr_2d[2,0:2])
# 1,2행의 1,2열 --> array([1,2],[4,5])
print(arr_2d[0:2,0:2]
fancy indexing
fancy는 동사로 원하다, 끌리다라는 뜻이 있죠. 대충 원하는거 골라서 다 가져오겠다라는 뜻으로 해석됩니다.
말로 표현해보려다 실패하고 코드로 설명드려 보겠습니다.
arr = np.array([10,20,30,40,50])
# 보통 인덱싱
arr[1]
>>> 20
# 팬시 인덱싱
arr[[0,2,4]]
>>> 10, 30, 50
여기서 주의하실 점은 꼭 [ ]를 한 번 더 써주셔야 한다는 것입니다. 그냥 arr[0,2,4] 이런 식으로 하시면 에러가 납니다.
당연히 리스트를 담은 변수를 넣어줘도 됩니다. arr[리스트] 이런 식으로 말이죠.
Bollean indexing
ndarray의 장점은 ndarray에 조건문을 적용하면 모든 값에 개별적으로 적용되어 그 결과를 True와 False로 돌려준다는 것입니다.
그렇게 나온 결과 array를 위에서 배운 fancy indexing 처럼 그대로 array[ ] 안에 넣어주면 해당 인덱스가 True인 값만 출력해줍니다.
이 개념은 데이터 분석에서 아주아주 유용하게 사용되므로 잘 이해하고 넘어가시는 것을 추천드립니다.
arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])
arr_2d
>>> array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Boolean indexing
arr_2d > 2
>>> array([[False, False, True],
[ True, True, True],
[ True, True, True]])
# Boolean indexing 사용법
arr2d[arr2d > 5]
>>> array([6, 7, 8, 9])
조금 특이한 점은 2차원 배열도 Boolean indexing을 통해 값을 얻으면 1차원 배열로 값을 출력한다는 것입니다.
다음 시간에는 numpy의 정렬과 사칙연산에 대해서 공부해보겠습니다.
<참고자료>
패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.
'파이썬 패키지 > 데이터분석' 카테고리의 다른 글
[Python/Numpy] 데이터 분석 수치연산 패키지_numpy 3편. 정렬(sort) (0) | 2021.07.18 |
---|---|
[파이썬 데이터 분석] 12편. 채널별 유튜브 조회수 순위 데이터 분석 (ft. Kaggle / YouTube 인기 급상승 동영상 데이터 셋) (0) | 2021.07.17 |
[Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념 (2) | 2021.06.16 |
[파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기 (3) | 2021.04.18 |
[파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수) (0) | 2021.04.17 |