✔ Python/1. Data Science

파이썬으로 데이터 마스킹하기 - Numpy.ma

  • -
주제: 마스킹 데이터(Masking Data) 만들기
작성: 2024-01-10

1. 마스크 배열이란?

마스크(Mask) 배열은 데이터과학 및 프로그로밍에서 중요한 개념으로, 특정 조건에 따라 배열 내의 데이터 요소를 선택적으로 '숨기는'데 사용됩니다. 마치, 사람이 마스크로 얼굴을 가리는 것과 유사합니다. 이 방식은 배열의 일부 데이터를 처리에서 제외하거나 다르게 처리할 필요가 있을 때 유용합니다.

마스킹 데이터 생성 (출처: Free Vector, 상세출처는 하단 참조)

 

2. 마스킹 데이터가 필요한 이유

그럼, 마스킹 데이터가 필요한 이유에 대해 알아보도록 하겠습니다.
4가지(데이터 필터링, 개인정보 보호, 오류데이터 처리, 성능) 측면에서 고려해 볼 수 있습니다. 

  1. 데이터 필터링: 특정 기준에 따라 데이터를 선택적으로 분석하거나 표시할 필요가 있을 때 마스킹을 사용
  2. 개인정보 보호: 민감한 정보를 포함하는 데이터를 다룰 때, 특정 정보를 숨김으로써 개인정보 보호를 강화
  3. 오류 데이터 처리: 데이터 세트 내의 오류나 이상값을 처리할 때 마스킹을 이용해 이러한 값을 제외 가능
  4. 성능 최적화: 대규모 데이터 세트를 처리할 때, 마스킹을 통해 분석 대상 데이터를 줄임으로써 계산 효율성 증대

 

3. 마스킹 배열의 응용 : 위성데이터 육지와 해양 마스킹

데이터 마스킹은 개인정보 보호, 법적 규정 준수, 데이터 보안 등 다양한 분야에서 필수적인 기술입니다. 필자의 경우, 대기과학 학도로써 사용할 수 있는 방안으로는 위성 이미지분석에서 사용할 수 있을 듯합니다. 예를 들면, 해수면 온도 또는 지표면 온도를 위성으로 모니터링하는 경우, 필요 없는 영역 또는 반대로 관심있는 지역만을 마스킹을 적용하여 보다 정확한 분석 결과를 얻을 수 있습니다. 다른 예시로는 센서 데이터가 잘못 또는 오류 데이터를 기록하는 경우, 마스킹 데이터를 이를 처리하여 정확한 분석을 할 수 있습니다.

마스킹 데이터 생성(출처: Free Vector, 상세출처는 하단 참조)

 

4. 전체코드

Python의 NumPy와 Matplotlib 라이브러리를 사용하여 마스킹된 배열과 원본 배열을 시각화해 보도록 하겠습니다.
예제 코드에 서는 짝수 값만 표시하고 홀수 값은 마스킹하여 숨기도록 하겠습니다. 참고로, 마스크 된 항목이 계산에 사용되지 않습니다.

마스킹데이터 예제 코드

import numpy as np 
import numpy.ma as ma
import matplotlib.pyplot as plt
  
# 예시로 값 생성 : 0부터 9까지의 정수를 포함하는 NumPy 배열 생성
in_arr1 = np.arange(10) 

# MaskedArray.masked_where 조건을 적용하여 홀수값을 마스킹
mask_arr1 = ma.masked_where(in_arr1%2 == 1, in_arr1) 

# scatter로 값 표출하기
plt.scatter(range(len(in_arr1)), in_arr1, label='Original Array', color='blue', marker='o')
plt.scatter(range(len(mask_arr1)), mask_arr1, label='Masked Array', color='red', marker='x')

plt.title('Scatter Plot of Original and Masked Arrays')
plt.xlabel('Index')
plt.ylabel('Value')
plt.legend()
plt.show()

 

5. 코드 설명

그럼, 소스코드 확인해보도록 하겠습니다. 우선, 0~9까지 정수 배열을 생성합니다.

import numpy as np 
import numpy.ma as ma
import matplotlib.pyplot as plt
  
in_arr1 = np.arange(10)

 

이후, ma.masked_where(조건문, 적용할 데이터)을 적용하여 마스킹을 진행합니다. 필자의 경우, 홀수를 마스킹하기 위해 %(나머지 값)을 이용했습니다. 홀수는 2로 나눴을 때, 그 나머지가 1입니다. 이를 코드로 작성하면, 데이터 값 % 2 == 1 이 됩니다.

mask_arr1 = ma.masked_where(in_arr1%2 == 1, in_arr1)

 

원본 배열과 마스킹된 배열이 어떻게 다른지 산점도를 그려보도록 하겠습니다.
마스킹을 진행한 데이터(범례- Masked Array 참조)는 홀수값이 산점도에 그려지지 않는 걸 볼 수 있습니다.
마스킹된 배열(mask_arr1)을 plot 할 때, 홀수 값이 마스킹되어 있으므로 해당 위치에 아무것도 표시되지 않습니다.
반면, 짝수 값은 마스킹되지 않으므로 정상적으로 빨간색 X로 표시가 됩니다.

plt.scatter(range(len(in_arr1)), in_arr1, label='Original Array', color='blue', marker='o')
plt.scatter(range(len(mask_arr1)), mask_arr1, label='Masked Array', color='red', marker='x')

plt.title('Scatter Plot of Original and Masked Arrays')
plt.xlabel('Index')
plt.ylabel('Value')
plt.legend()
plt.show()

마스킹데이터 확대화면


Reference

  1. 파이썬 몫, 나머지 구하기 :  https://dpdpwl.tistory.com/93
  2.  MaskedArray.masked_where() : https://www.geeksforgeeks.org/numpy-maskedarray-masked_where-function-python/
  3. 데이터 : https://numpy.org/doc/stable/reference/maskedarray.generic.html
  4. The Numpy.ma Module: https://het.as.utexas.edu/HET/Software/Numpy/reference/maskedarray.generic.html
 

The numpy.ma module — NumPy v1.9 Manual

Masking an entry The recommended way to mark one or several specific entries of a masked array as invalid is to assign the special value masked to them: >>> x = ma.array([1, 2, 3]) >>> x[0] = ma.masked >>> x masked_array(data = [-- 2 3], mask = [ True Fals

het.as.utexas.edu

 

The numpy.ma module — NumPy v1.26 Manual

Masking an entry The recommended way to mark one or several specific entries of a masked array as invalid is to assign the special value masked to them: >>> x = ma.array([1, 2, 3]) >>> x[0] = ma.masked >>> x masked_array(data=[--, 2, 3], mask=[ True, False

numpy.org

 

Numpy MaskedArray.masked_where() function | Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

[Python]파이썬 몫,나머지 구하기(/,%,divmod)

많은 언어에서 몫과 나머지를 구할때, /와 %를 사용하여 구한다. 파이썬에서는 divmod를 사용하여 몫과 나머지를 한번에 구할 수 있다. 3나누기15 의 몫과 나머지 / (나누기), %(나머지)>>> 3/150.2>>> 3%15

dpdpwl.tistory.com

Image Reference

  1. https://kr.freepik.com/free-vector/comedy-and-tragedy-theatrical-mask-isolated-on-a-blue-curtain-background_27399318.htm#query=%EA%B0%80%EB%A9%B4&position=2&from_view=search&track=sph&uuid=e8656837-42f9-4989-a616-0c6ea77ed38f
  2. https://kr.freepik.com/free-vector/big-data-circular-perspective-visualization-futuristic-infographic-hud-information-aesthetic-design-visual-data-complexity-complex-data-threads-graphic-social-network-abstract-graph_24380375.htm#query=%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%A7%88%EC%8A%A4%ED%82%B9&position=6&from_view=search&track=ais&uuid=a3371205-c9c3-46a8-b3d8-e1861dc6bc7a"

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.