본문 바로가기

python 시작하기

Python Numpy

728x90
반응형

우리가 드디어 파이썬 좀 만져 봤다던 사람들이 입에 달고사는 Numpy에 왔습니다.

(다른 다양한 모듈도 많은데 왜 항상 넘파이만 인기가 있는지는 잘모를겠네요 ;-))

 

NUMPY

  • NumPy는 python에서 다차원 배열과 수치 계산을 효율적으로 처리하기 위한 라이브러리입니다.
  • Numerical Python의 줄임말
  • NumPy의 중심은 ndarray(n-dimensional array)라는 다차원 배열 객체입니다
  • 배열의 형태(shape), 크기(size), 데이터 타입(dtype)을 지정할 수 있습니다.
  • 크기가 다른 배열 간에도 연산이 가능하도록 자동으로 크기를 맞추는 브로드캐스팅 기능이 있습니다.
  • 더 자세한 내용은 공식사이트를 찾아가 보시길 바랍니다.
 

NumPy -

Use the interactive shell to try NumPy in the browser

numpy.org

언제 필요한가?

단순 배열을 목적으로 한다면 python의 내장된 함수로도 충분하지 않은가? 라고 생각하실 수 있습니다.

하지만 크롤링이나 데이터 배열 연산이나 변환이 필요할때는 pythond의 기능만으로는 한계가 너무 분명하기에 사용됩니다.

  • 크롤링 데이터에서 수치 계산이 필요할 때
  • 데이터 배열 연산이나 변환이 필요할 때
    • list 를 Numpy배열로 변환
    • 배열 연산(예: 합계, 평균, 정규화)

Ndarray 타입이란?

  • 배열의 종류로 N-dimension array의 약자, 다차원 배열을 의미

 

만약에 뭔가 몇 차원인지 눈에 안들어온다 하시면, 끝 숫자 뒤에 대괄호의 개수를 보시면 몇 차원인지 알수 있습니다!

이제 모듈에대한 전반적인 설명은 하였으니, 메서드와 속성을 학습해봅시다.

배열 속성

  • shape : 배열의 크기(모양) 반환, 튜플형태
  • ndim : 배열의 차원을 반환
  • dtype : 배열의 각 원소의 자료형을 반환
  • itemsize : 배열의 각 원소 하나의 크기(바이트 단위)
  • size : 배열의 전체 원소 개수를 반환

 

그리고 또 배열 접근에 매우 용이한 기능들을 갖추고 있습니다.

  • 배열이름[0,1] = 1행 2열의 값을 가져온다.
  • cols[0,2], row[1,2] -> 배열이름([cols],[row]) = 1행(col(0)) 2열(row(1)) 값과 3행(cols(2)) 3열(row(2))값을 가져온다.
  • 부등호를 사용가능하다.

<예시>

어? 그런데  Numpy 리스트는 출력될 때 뭔가 이상하지 않나요?

네 바로 구분 콤마가 존재하지 않습니다. 그렇기에 연산을 진행할 때 오히려 더 용이합니다.

배열 메서드

  • zeros() : 모든 값이 0인 배열 생성
  • ones() : 모든 값이 1인 배열 생성
  • arange(start, stop, step, type) : 연속된 숫자로 배열 생성
  • linspace() : 구간을 일정하게 나눈 값으로 배열 생성(매개 변수, 아래표 참고)

 

그럼 이제 간단한 실습을 해봅시다.

실습(배열생성)

  • 0으로 이루어진 2행 3열 배열을 생성
  • 1로 이루어진 3행 2열 배열을 생성
  • 1부터 10까지, 2의 간격으로 배열생성
  • 0에서 1까지 무작위 5개 값 반환

해답

 

어 그럼 배열 생성후 바꾸고 싶으면 어떻게 할까요?

또 메서드를 써야 겠죠 ㅎㅎ;;

배열 형태 메서드

  • reshape()
    • 배열의 형태를 변경하지만, 기존 배열의 데이터 크기를 유지
    • 새롭게 지정한 shape의 총 원소 개수는 기존 배열의 원소 개수와 같아야 함
    • 원소 개수가 틀리면 에러
  • resize()
    • 배열의 형태를 변경하면서, 새로운 크기에 맞게 배열을 조정
    • 새 shape의 총 원소 개수가 기존 배열과 달라도 가능
    • 새 shape에 원소가 부족하면 데이터를 반복하여 채움

실습 (주어진 배열을 이용하여 형태를 변경하세요)

  • ([1,2,3,4,5,6])의 배열을 2x3배열로 출력하세요
  • ([1,2,3,4,5,6])을 새 shape (3x5)에 맞게 조절하세요

 

그리고 위에서 말했듯 Numpy를 쓰는 이유는 수학적 연산이 가능하면서 매우 편하기 때문입니다.

그러면 여기서 간단한 문제를 하나 내드리겠습니다.

 

Numpy리스트의 합과 기본 list의 합의 결과가 같을까요?

 

아뇨 다릅니다. 무엇이 다른지 알아 봅시다.

실습 (list 와 numpy차이)

  • 리스트 목록 2개를 만듭니다.(요소의 개수는 동일)
  • 넘파이 리스트 목록 2개를 만듭니다. (요소의 개수는 동일)
  • 그후 합차곱나눔을 출려해 보십시오.

 

이게 바로 기본 리스트가 아닌 넘파이 리스를 사용하는 가장큰 이유입니다.

이외에도 제곱근, 로그, 삼각함수 등등이 있습니다.

 

근데 list는 합으로 간단히 새로운 배열을 기초배열에 추가하기가 쉬웠는데 Numpy리스트를 사용하면 합치기가 안되느냐?

라고 의문이 생기실 겁니다.

 

그래서 Numpy에는 배열을 합쳐주는 메서드가 또 존재합니다.

  • hstack : 수평 합치기 (리스트 합과 같은 상황)
  • vstack : 수직 합치기 (행x열 배열에서 행을 추가하는 메서드)
  • column_stack : 열 기준 합치기 (첫번째 배열을 기준으로 두번째 배열을 열로써 가져온다.)

 

또 우리가 리스트 배열할 때 무엇을 더 배웠었죠????????

바로바로 배열 슬라이싱입니다.

솔직히 저희가 나중에 데이터 분석을 할때 데이터를 가져올텐데 데이터를 합치는 경우가 많을까요? 분할하는 것이 많을까요?

네 당연히 분활이 많습니다.

Nympy 배열 분할

  • hsplit : 수평 분할
  • vsplit : 수직 분할

 

마지막으로 브로드캐스팅 기능이 있습니다.

  • 서로 다른 크기의 배열 간 연산을 지원하는 기능
  • 작은 배열의 크기를 큰 배열의 크기에 맞게 확장
  • 필요한 경우 배열의 차원을 추가하여 크기를 일치

 

이제 우리들도 파이썬 하면 아 그 넘파이 쓰는 코딩! 이라고 당당히 말 할 수 있습니다. 근데 솔직히 쫌 삐리 하죠ㅋㅋㅋㅋ 그냥 파이썬을 이루는 대표적인 코인중 하나를 배운 것입니다.

 

오늘도 과제 하나를 내드리고 마무리를 짓겠습니다.

 

과제 (야구 기록 데이터 정렬)

  • KBO > 기록,순위 > 팀순위
  • 팀 순위 데이터를 크롤링하여 데이터를 정렬한 후 txt 파일에 저장하고 아래와 같이 출력결과를 내보내십시오.
  • 해설예시는 하루코딩에 올려 놓겠습니다.

가상 환경을 활성화 하시고 jupyter lab에서 작업하시는 것이 출력 결과가 더욱 잘 나옵니다.

오늘도 같이 공부하시느라 수고 많으셨습니다!!!!!!

반응형

'python 시작하기' 카테고리의 다른 글

Python 데이터 시각화  (1) 2024.12.16
python Pandas  (2) 2024.12.15
Python 웹 자동화  (1) 2024.12.12
Python 예외 처리  (0) 2024.12.11
Python 파일입출력  (1) 2024.12.07