본문 바로가기
IT/Python

[데이터 처리] Python-Numpy 라이브러리 기초 내용 정리

by dwoi 2023. 3. 31.

많은 양의 데이터를 다룰 때 활용하기 좋은 파이썬의 라이브러리 중 하나인 Numpy에 대해 학습해보고

Numpy를 이용해 어떻게 데이터 처리를 하는 지에 대해 학습하는 내용이다.

 

목차

     


    Numpy

     


    1. Numpy란?

    1.1. Numpy란?

    • Numerial Python, 파이썬 산술 계산을 위한 패키지
    • 효율적인 다차원 배열 ndarray를 제공
    • 데이터 배열에 대해 빠른 계산을 할 수 있는 수학 메소드
    • 배열을 디스크에 빠르게 읽고 쓸 수 있으며 효율적으로 가공할 수 있음
    • 선형 대수 난수 생성 푸리에 변환 등의 고급 수학 기능도 제공함

    1.1.1. 사용하는 이유

    • 데이터는 이미지, 오디오, 텍스트, 숫자 등의 다양한 형태로 존재
    • 결국 이 데이터들은 컴퓨터가 이해하기 위해선 숫자로 변환 해야함.
      • 모든 데이터는 숫자로 이루어진 배열의 형태로 표현됨.
    • 빠르고 효율적인 배열 연산이 필요

    파이썬의 리스트도 가능하지만 데이터가 커질수록 비효율적이지만 Numpy는 저장과 가공의 효율성이 좋음.

    1.2. Numpy 데이터 생성 및 타입

    import numpy as np
    
    data = [1,3,5,10,2]
    array1 = np.array(data1)
    • numpy의 다차원 배열은 ndarray
    • np.array() 메소드를 통해 파이썬 list를 인자로 받을 것을 numpy 배열로 생성

    • np.zeros : 모든 원소가 0인 배열 
    • np.ones : 모든 원소가 1인 배
    • np.arrange : 주어진 범위에 따라 증가/감소하는 배열
    • np.eye : 단위 행렬에 해당하는 배열

    1.2.1. numpy 데이터 타입

    배열은 다양한 데이터 타입을 가질 수 있음.

    • int : 정수
    • float : 실수
    • bool : True /False
    • String : 문자열

    데이터 타입을 원하는 대로 변환도 가능

     


     

    2. Numpy 연산

    2.1. ndarray 산술연산

    • for문 작성이 필요하지 않고 일괄 처리 가능
    • 같은 크기 배열간의 연산은 각 원소 단위로 대응되어 적용

    2.2. 크기가 다른 배열 간의 연산

    • 두 배열의 차원 크기가 중요
    • 차원의 크기가 맞으면 알아서 차원의 크기에 맞게 연산을 수행

    차원의 크기가 다른 경우 Error가 발생하여 연산이 이루어지지 않음.

     

    2.2. 색인/슬라이스 

    • 데이터를 저장되어 있는 위치를 의미하며 이를 이용하여 데이터를 선택하고 추출
    • 데이터의 일부 혹은 전체를 추출할 때 슬라이스

    • 데이터를 복사하기 위해서는 [:]로 슬라이싱해서 변수에 집어넣는 방법이 있음.

    ※ 슬라이싱 할 때 항상 주의할 꺼

    [1:4] → 1부터 4미만임 

    2.2.1 ndarray 색인

    • n차원 배열의 데이터를 선택하기 위해서는 재귀적으로 접근해야함
      • d차원 배열의 개별 원소를 선택하기 위해서는 []를 d개 사용해야함

    2차원 배열
    3차원 배열

    2.2.2. ndarray 슬라이스

    • 슬라이스를 사용하여 배열의 일부를 편리하게 선택할 수도 있음.
    • n차원 배열의 경우 슬라이스를 하고 싶으면 n개 차원에 대해 각각 적용할 수 있음.

     

    2.2.3. ndarray 전치(transpose)

    • transpose : 행과 열을 뒤바꿈
    • n차원 배열에 대해서도 사용 가능
    • 행과 열의 개념이 아닌 차원을 뒤바꾸는 개념으로 이해해야함.

     


     

    3. numpy 연산 메소드

    3.1. 유니버셜 메소드

    • 하나 이상의 배열을 인자로 받아서 연산을 수행하는 메소드
      • ex.
      • square()
      • sqrt() : 루트연
      • log10()
      • ceil : 올림
      • round : 반올림
    • 2개의 배열을 인자로 받아서 연산을 수행하는 메소드도 존재
      • 덧셈, 뺄셈 곱하기 나누기
      • 두 배열을 비교해서 더 큰값과 작은 값을 연산
      • power() 지수 연

     

    3.2. numpy 조건절

    • boolean 값이 들어있는 배열도 존재
    • np.where을 사용하여 if 연산을 배열 단위로 수행
    array1 = np.array([1, -1, -2, 3, 1, 2, -3])
    new_array = np.where(array1 > 0, 1, -1)

    np.where 코드 해석

    더보기

    array1 > 0 : 조건

    조건이 참이면 1

    아니면 -1을 반환하는 조건문 형식

    3.3. 수학/통계 메소드

    • 전체 혹은 축을 따라서 수학/ 통계 연산을 수행하는 메소드
    • axis를 인자로 받으면 해당 축을 기준으로 연산을 수행

     

    • max, min은 최대 최소를 반환
    • argmax, argmin은 최대, 최소를 가지는 index를 반환

     

    3.4. numpy 정렬

    • sort 메소드를 사용해 정렬, 해당 배열의 순서를 바꾸는 메소드
    • axis에 따라서 정렬을 수행하는 축이 달라짐

     

    3.5. 집합 메소드

    • 배열 내 고유한 값을 추출할 수 있는 unique 메소드
    • 배열의 원소가 다른 배열에 포함되어 있는지 알 수 있는 in1d 메소드

     

    3.6. 행렬 연산 메소드

    • dot 메소드로 두 행렬을 곱할 수도 있음
    • 차원이 맞지 않으면 Error

     

     


     

    마무리

    2차원 배열까진 무리없이 이해가 가는데 3차원부터 뇌에서 약간 버벅이는 듯한 느낌을 느낌.

    개념 자체가 이해가 안되는건 아닌데 배열만 딱 봤을 때 이게 어떤 데이터인지 잘 이해가 안가는 인지부조화?

    실습을 여러 번 돌리면서 데이터에 대한 이해를 높이는 것이 필요하다고 판단됨.

    행과 열이라는 개념 자체에 익숙해지다보니 차원이라는 개념이 약간 낯설다는 점.

     

    특히 transpose될 때 왜 이렇게 되는지 이해가 잘 안가는 부분.

    행렬 관련으로 좀 찾아볼 필요가 있음.

     

    그리고 인덱싱이나 슬라이싱을 할 때 [] 안에 들어가는 숫자에 대한 의미를 잊지 말 것.

     

     

     

    댓글