안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.
Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.
<Numpy 패키지 관련 이전 글>
2021.06.16 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념
2021.06.18 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_Numpy 2편. 인덱싱과 슬라이싱
arrange
arrange 함수는 규칙적으로 나열된 배열을 얻고싶을 때 사용하는 함수입니다.
파이썬 문법에서 for문 뒤에 주로 사용하는 range 함수와 비슷하면서 조금은 다른 np.arrange 함수입니다.
np.arrange(start=1, stop=11, step=1)
>>> array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 파라미터명을 생략하고 순서대로 적어줘도 됨 (step은 기본값 1)
np.arange(1,11)
>>> array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
참고로 range(1, 11)을 변수에 저장해도 출력해보면 그냥 range(1, 11)로 나오지 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]으로 나오지 않습니다.
즉, range는 list나 array를 생성하는 것이 아니라 for문 안에서만 작동하는 자료의 형태라고 생각하시면 되겠습니다.
sort
1차원 정렬
sort는 내림차순(큰 값 우선) 정렬과 오름차순(작은 값 우선) 정렬을 해주는 함수입니다.
sort 함수를 사용하는 방법은 두 가지입니다.
1) sort(arr)
2) arr.sort( )
다만, arr.sort( )를 사용하면 원래의 array가 변경되므로, arr2 = np.sort(arr)와 같이 따로 저장해서 사용하는 것을 추천드립니다.
arr = np.array([4,1,5,7,6,3,9,2,8])
# 오름차순
np.sort(arr)
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 내림차순
np.sort(arr)[::-1]
>>> array([9, 8, 7, 6, 5, 4, 3, 2, 1])
# 만약 arr을 sort된 상태로 변경하고 싶다면
arr.sort()
arr
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])
2차원 정렬
2차원 정렬은 축에 대한 이해가 필요합니다. 이를 위해 지난 시간에 다루었던 축에 대한 그림을 가져와봤습니다.
2차원 배열은 앞서 배운 sort( ) 함수를 사용하기 위해서 axis 파라미터를 설정해주어야 합니다.
axis = 0 으로 설정해주었을 때는 같은 행 내에서 정렬합니다. 행 내에서 열이 다른 요소들을 정렬하므로 "열정렬"이라 합니다.
axis = 1 로 설정해주었을 때는 같은 열 내에서 정렬합니다. 열 내에서 행이 다른 요소들을 정렬하므로 "행정렬"이라 합니다.
저는 축의 방향과 정렬되는 방향이 90도여서 여러분들은 어떠신가요?
arr_2d = np.array([[15,5,20,10],[9,3,6,12],[8,4,6,2]])
arr_2d
>>> array([[15, 5, 20, 10],
[ 9, 3, 6, 12],
[ 8, 4, 6, 2]])
#같은 행 내에서 오름차순 정렬 (열정렬)
np.sort(arr_2d, axis=1)
>>> array([[ 5, 10, 15, 20],
[ 3, 6, 9, 12],
[ 2, 4, 6, 8]])
#같은 열 내에서 오름차순 정렬 (행정렬)
np.sort(arr_2d, axis=0)
>>> array([[ 8, 3, 6, 2],
[ 9, 4, 6, 10],
[15, 5, 20, 12]])
argsort
일반적은 sort( )는 값을 반환하지만 argsort( )는 인덱스를 반환합니다. 데이터 분석을 하다보면 변할 수 있는 값보다 index 정보를 필요로 할 때가 있는데 이 때 사용한다고 합니다. 당장 쓸 일은 많이 없을 것 같으니 그냥 이런게 있구나 하고 넘어가시는 걸 추천드립니다.
arr_2d = np.array([[15,5,20,10],[9,3,6,12],[8,4,6,2]])
arr_2d
>>> array([[15, 5, 20, 10],
[ 9, 3, 6, 12],
[ 8, 4, 6, 2]])
#같은 행 내에서 오름차순 정렬 (열정렬)
np.argsort(arr_2d, axis=1)
>>> array([[1, 3, 0, 2],
[1, 2, 0, 3],
[3, 1, 2, 0]])
#같은 열 내에서 오름차순 정렬 (행정렬)
np.argsort(arr_2d, axis=0)
>>> array([[2, 1, 1, 2],
[1, 2, 2, 0],
[0, 0, 0, 1]])
오늘 준비한 내용은 여기까지입니다.
사칙연산 및 broadcasting까지 다루려 했으나 내용이 많이 길어질 듯 하여 다음 글에서 다루도록 하겠습니다.
오늘도 공부하시느라 고생 많으셨습니다!
<참고자료>
패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.
'파이썬 패키지 > 데이터분석' 카테고리의 다른 글
[파이썬 데이터 분석] 8편. 전처리 지옥 맛보기 (ft. loc[ ] 제대로 이해하기) (0) | 2021.07.22 |
---|---|
[코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링) (0) | 2021.07.21 |
[파이썬 데이터 분석] 12편. 채널별 유튜브 조회수 순위 데이터 분석 (ft. Kaggle / YouTube 인기 급상승 동영상 데이터 셋) (0) | 2021.07.17 |
[Python/Numpy] 데이터 분석 수치연산 패키지_ numpy 2편. 인덱싱과 슬라이싱 (0) | 2021.06.18 |
[Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념 (2) | 2021.06.16 |