PYTHON LIBRARY/NumPy Library

Python NumPy로 데이터 분석하기 : Boolean 연산부터 Broadcasting까지

신강희 2024. 4. 8. 00:42
728x90

출처:  https://numpy.org/doc/stable/user/basics.broadcasting.html

< boolean 연산 >

Boolean 연산은 참(True) 또는 거짓(False) 값을 반환하는 연산을 말한다. NumPy에서는 이러한 Boolean 연산을 배열에 적용하여 각 요소의 조건을 평가할 수 있다. 예를 들어, 배열의 각 요소가 특정 조건을 만족하는지 여부를 판단하는 데 사용된다.

  • 비교 연산자: == (equal), != (not equal), >, <, >=, <= 등의 연산자를 사용하여 배열의 요소 간 비교가 가능하다.
  • 논리 연산자: & (and), | (or), ~ (not) 등의 논리 연산자를 사용하여 여러 조건을 결합할 수 있다.

코드 예시를 통해서 공부해보자.

 

# 100 시드값을 갖고 100개의 정수안에서 랜덤하게 4행 5열의 데이터를 생성해보자

np.random.seed(100)

x = np.random.randint(1, 100, (4,5))

 

x

array([[ 9, 25, 68, 88, 80],
       [49, 11, 95, 53, 99],
       [54, 67, 99, 15, 35],
       [25, 16, 61, 59, 17]])

 

# x가 80보다 큰 데이터를 가져오시오.

x > 80

array([[False, False, False,  True, False],
       [False, False,  True, False,  True],
       [False, False,  True, False, False],
       [False, False, False, False, False]])

 

x[ x > 80 ] # 난이도 중요도 최상!

array([88, 95, 99, 99])

 

# 여성이고, 자녀가 둘 이상이며, 40세 이상이고, 월 소비금액이 100만원 이상인 고객분들 데이터를 가져와라

# 고객 전체 데이터는 x

# 성별 == 여자 and/ 자녀수 >= 2 and/ 나이 >= 40 and/ 월소비금액 >= 1000000

# <조건문> 상단 예시는 데이터를 가져와라 즉 데이터를 억세스 하라는 말인데 조건문은 데이터를 엑세스 하지 않고, 그냥 조건에 맞을경우 행동을 하라는 형식임.

 

age = 50

gender = '여자'
if age >= 40 and gender == '여자' :
    print('40세 이상 여성입니다.')
elif age >= 40 and gender == '남자' :
    print('40세 이상 남자입니다.')

40세 이상 여성입니다.

 

# x의 데이터 중에서, 50보다 크고 80보다 작은 데이터만 가져오시오

x

array([[ 9, 25, 68, 88, 80],
       [49, 11, 95, 53, 99],
       [54, 67, 99, 15, 35],
       [25, 16, 61, 59, 17]])

 

x > 50

array([[False, False,  True,  True,  True],
       [False, False,  True,  True,  True],
       [ True,  True,  True, False, False],
       [False, False,  True,  True, False]])

 

x < 80

array([[ True,  True,  True, False, False],
       [ True,  True, False,  True, False],
       [ True,  True, False,  True,  True],
       [ True,  True,  True,  True,  True]])

 

x > 50 and x < 80

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[172], line 1
----> 1 x > 50 and x < 80

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

 

# 오류가 발생되는데 numpy에서는 and 사용문을 & 기호로 사용하여 데이터 억세스 기능으로 사용 한다. (numpy는 기계 친화적인 라이브러리 이다.)

(x > 50) & (x < 80)

array([False, False, False, False, False, False, False, False, False])

 

x[ (x > 50) & (x < 80) ]

array([], dtype=int32)

 

### 맞는 값이 없기때문에 값이 출력되지 않는다. 다른 예시를 실행해 보자

# x가 50 보다 작거나 80 보다 큰 데이터만 가져오시오.

x < 50

array([ True,  True,  True,  True,  True,  True,  True,  True,  True])

 

x > 80

array([False, False, False, False, False, False, False, False, False])

 

# numpy에서는 or 사용문을 | 기호로 사용하여 데이터 억세스 기능으로 사용 한다.

x[(x < 50) | (x > 80)]

array([ 2,  3,  4,  5,  6,  7,  8,  9, 10])

 

# if를 활용한 조건문은 백앤드 개발에만 사용되고 데이터 분석은 이렇게 데이터 어레이를 할줄 알아야함
# 데이터 분석과 백앤드 개발을 모두 할줄 아는것이 중요함

 

< Arithmetic operations and Broadcasting >

 

브로드캐스팅은 NumPy에서 배열 간의 연산을 수행할 때, 서로 다른 형상(shape)을 가진 배열 간에도 연산을 가능하게 하는 메커니즘이다. 브로드캐스팅은 배열의 형상(shape)이 다를 때 자동으로 배열의 형상을 재구성하여 연산을 수행한다.

1차원 배열 연산

# 결과값은 numpy

data = [10,20,5,8,10,33,56,9,11,45,87,9,22,548,362,92] => 리스트

 

data

[10, 20, 5, 8, 10, 33, 56, 9, 11, 45, 87, 9, 22, 548, 362, 92]

 

# (1) 모든 데이터 값에 5씩 더해서 출력하려면 반복문 사용 (기본이다 외워라)

new_data = []
for item in data :
    new_data.append(item+5)

 

new_data

[15, 25, 10, 13, 15, 38, 61, 14, 16, 50, 92, 14, 27, 553, 367, 97]

 

# (2) 리스트 컴프리헨션(List Comprehension) (반복문 , 조건문 모두 사용 가능)

new_data = [ item+5 for item in data ]

 

new_data

[15, 25, 10, 13, 15, 38, 61, 14, 16, 50, 92, 14, 27, 553, 367, 97]

 

# (3) 넘파이를 사용하면 반복문 사용없이 결과값을 출력시킬수도 있다.

np.array(data) + 5

2차원 배열 연산

X

array([[ 2,  4,  6,  8],
       [10, 12, 14, 16],
       [18, 20, 22, 24],
       [26, 28, 30, 32]])

 

X + 5

array([[ 7,  9, 11, 13],
       [15, 17, 19, 21],
       [23, 25, 27, 29],
       [31, 33, 35, 37]])

 

X - 10

array([[-8, -6, -4, -2],
       [ 0,  2,  4,  6],
       [ 8, 10, 12, 14],
       [16, 18, 20, 22]])

 

< 각 요소마다 연산이 수행됨, 브로드캐스팅 >

 

# 학생들 점수가 있습니다. [56, 75, 88, 92, 66]
# 이 학생들의 점수가 잘못 되어서, -5점씩 한 점수로 바꿔야 합니다.

score_list = [56, 75, 88, 92, 66]

 

np.array(score_list) - 5

array([51, 70, 83, 87, 61])

 

Numpy 기본 정리 끝 다음장부터는 Pandas 개념 정리

반응형