주제: 마스킹 데이터(Masking Data) 만들기
작성: 2024-01-10
1. 마스크 배열이란?
마스크(Mask) 배열은 데이터과학 및 프로그로밍에서 중요한 개념으로, 특정 조건에 따라 배열 내의 데이터 요소를 선택적으로 '숨기는'데 사용됩니다. 마치, 사람이 마스크로 얼굴을 가리는 것과 유사합니다. 이 방식은 배열의 일부 데이터를 처리에서 제외하거나 다르게 처리할 필요가 있을 때 유용합니다.
2. 마스킹 데이터가 필요한 이유
그럼, 마스킹 데이터가 필요한 이유에 대해 알아보도록 하겠습니다.
4가지(데이터 필터링, 개인정보 보호, 오류데이터 처리, 성능) 측면에서 고려해 볼 수 있습니다.
- 데이터 필터링: 특정 기준에 따라 데이터를 선택적으로 분석하거나 표시할 필요가 있을 때 마스킹을 사용
- 개인정보 보호: 민감한 정보를 포함하는 데이터를 다룰 때, 특정 정보를 숨김으로써 개인정보 보호를 강화
- 오류 데이터 처리: 데이터 세트 내의 오류나 이상값을 처리할 때 마스킹을 이용해 이러한 값을 제외 가능
- 성능 최적화: 대규모 데이터 세트를 처리할 때, 마스킹을 통해 분석 대상 데이터를 줄임으로써 계산 효율성 증대
3. 마스킹 배열의 응용 : 위성데이터 육지와 해양 마스킹
데이터 마스킹은 개인정보 보호, 법적 규정 준수, 데이터 보안 등 다양한 분야에서 필수적인 기술입니다. 필자의 경우, 대기과학 학도로써 사용할 수 있는 방안으로는 위성 이미지분석에서 사용할 수 있을 듯합니다. 예를 들면, 해수면 온도 또는 지표면 온도를 위성으로 모니터링하는 경우, 필요 없는 영역 또는 반대로 관심있는 지역만을 마스킹을 적용하여 보다 정확한 분석 결과를 얻을 수 있습니다. 다른 예시로는 센서 데이터가 잘못 또는 오류 데이터를 기록하는 경우, 마스킹 데이터를 이를 처리하여 정확한 분석을 할 수 있습니다.
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
- 파이썬 몫, 나머지 구하기 : https://dpdpwl.tistory.com/93
- MaskedArray.masked_where() : https://www.geeksforgeeks.org/numpy-maskedarray-masked_where-function-python/
- 데이터 : https://numpy.org/doc/stable/reference/maskedarray.generic.html
- The Numpy.ma Module: https://het.as.utexas.edu/HET/Software/Numpy/reference/maskedarray.generic.html
Image Reference
- 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
- 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"
'Python > 2️⃣ 데이터 처리' 카테고리의 다른 글
GK2A LSM(Land/Sea Mask) 데이터 이해와 활용 방법 (2/2) (18) | 2024.01.14 |
---|---|
GK2A LSM(Land/Sea Mask) 데이터 이해와 활용 방법 (1/2) (14) | 2024.01.14 |
웹크롤링으로 SST(Surface Sea Temperature) 데이터 다운로드 자동화하기 (0) | 2023.07.31 |
[머신러닝] 랜덤포레스트 예시 - Pima Indians Diabetes Database (0) | 2023.03.04 |
[머신러닝] 결정트리 실습 - Pima Indians Diabetes Database (0) | 2023.03.03 |