방대한 데이터 세트에서 잘못된 정보를 제거하는 데는 데이터 과학 영역에서 엄청난 시간이 소요되며, 불완전한 데이터 세트는 실무자들이 자주 직면하는 장애물입니다. 그러나 데이터 조작 및 분석을 위한 탁월한 Python 기반 플랫폼인 판다스는 데이터 세트 내의 결측치 처리 등 이러한 문제를 쉽게 해결할 수 있도록 지원합니다.
이 글에서는 판다스 라이브러리를 활용하여 누락된 데이터를 임포트하는 다양한 방법을 설명하고 살펴봅니다.
판다 설치 및 데이터셋 준비
시작하기 위해서는 명령줄 인터페이스를 활용하여 파이썬 가상 환경 내에 pip를 통해 판다 라이브러리를 통합하는 것이 필수적입니다:
pip install pandas
Pandas로 처리된 Excel 파일 형식의 데이터 집합을 쉽게 따라갈 수 있습니다.
이 글에서는 “NaN”으로 표시된 누락되거나 채워지지 않은 값의 여러 인스턴스로 구성된 함께 제공되는 시뮬레이션 데이터셋을 활용하겠습니다.
import pandas
import numpy
df = pandas.DataFrame({
'A' :[0, 3, numpy.nan, 10, 3, numpy.nan],
'B' : [numpy.nan, numpy.nan, 7.13, 13.82, 7, 7],
'C' : [numpy.nan, "Pandas", numpy.nan, "Pandas", "Python", "JavaScript"],
'D' : ["Sound", numpy.nan, numpy.nan, "Music", "Songs", numpy.nan]
})
print(df)
앞서 언급한 데이터 세트는 다양한 숫자 값을 포함하는 여러 행과 열이 있는 표 형식의 배열로 표시되는 것처럼 보입니다.
팬더가 제공하는 다양한 기법을 활용하여 앞서 언급한 데이터 집합에 없는 값을 채울 수 있는 방법을 조사하십시오.
fillna() 메서드 사용
`fillna()` 함수는 데이터 집합의 예시를 순회하며 각 빈 행을 미리 계획된 가치로 대체합니다. 이러한 대체에는 산술 평균, 중앙값, 모드 또는 기타 숫자 표현이 수반될 수 있습니다.
비어 있는 공간에 삽입될 지정된 가치를 ‘값’이라고 합니다.
본 기술은 사용자가 시스템 프레임워크 내에서 “bfill” 또는 “ffill” 파라미터를 활용하여 누락된 데이터를 앞뒤로 채울 수 있는 방법에 관한 것입니다.
함수 `inplace`는 조건문을 입력으로 받습니다. 해당 조건의 진리 값이 참이면 데이터 프레임은 되돌릴 수 없게 수정됩니다. 반대로 진리 값이 거짓이면 데이터 프레임은 변경되지 않습니다.
fillna() 함수를 사용하여 누락된 데이터를 대입하는 방법을 준수하시기 바랍니다.
평균, 중앙값 또는 모드로 누락된 값 채우기
본 기법은 산술적 수단을 사용하여 누락된 값을 채우는 방법을 사용합니다. 이 접근 방식은 해당 열에 정수 및 부동 소수점 숫자로 구성된 숫자 데이터에 적합한 것으로 간주됩니다.
불완전한 데이터 집합을 완성하는 수단으로 가장 자주 나타나는 데이텀을 나타내는 모달 값을 활용할 수도 있습니다. 이 방법론은 숫자 및 문자열 기반 열 정보 모두에 똑같이 효과적입니다. 그러나 텍스트 필드로 작업할 때 특히 유리합니다.
데이터 프레임의 비어 있는 공간에 중앙값과 평균값을 주입하려면 이 프로세스를 따르십시오.
# To insert the mean value of each column into its missing rows:
df.fillna(df.mean(numeric_only=True).round(1), inplace=True)
# For median:
df.fillna(df.median(numeric_only=True).round(1), inplace=True)
print(df)
`numeric_only` 인수를 `True`로 설정하면 정수 및 부동 소수점 숫자로 구성된 열에 평균 경향을 적용하는 것이 제한됩니다.
문자열 열은 숫자 평균 계산을 적용할 수 없으므로 모달 값을 구하기 위해 수정된 방법이 사용됩니다.
string_columns = df.select_dtypes(include=['object']).columns
df[string_columns] = df[string_columns].fillna(df[string_columns].mode().iloc[0])
print(df)
앞서 언급한 코드는 데이터프레임에서 문자열 기반 열만 선택하고 해당 열 내의 모든 NaN 값을 해당 발생 모드로 대체합니다.
또는 셀 C와 같은 지정된 셀에 모드를 배치하도록 선택할 수 있습니다.
df['C'].fillna(df['C'].mode()[0], inplace=True)
데이터 입력 중에 특정 열에 중앙 경향의 특정 측정값(평균, 중앙값 또는 모드)을 삽입하려면 이 함수를 선택할 수 있습니다.
df.fillna({"A":df['A'].mean(),
"B": df['B'].median(),
"C": df['C'].mode()[0]},
inplace=True)
print(df)
ffill을 사용하여 값으로 빈 행 채우기
앞서 언급한 기법은 fillna() 함수 내에서 채우기의 방향을 지정하는 것과 관련이 있습니다. 이 함수는 바로 앞 행에서 값을 가져와 빈 공간을 채우는 역할을 합니다.
“앞으로 채우기”라는 용어는 이미 알려진 것을 기반으로 누락된 정보 또는 데이터 포인트를 채우는 동시에 미래 예측을 앞당기는 개념을 설명하는 데 사용할 수 있습니다.
df.fillna(method='ffill', inplace=True)
bfill을 사용하여 누락된 행을 값으로 채우기
앞서 언급한 ffill 기법을 bfill로 대체합니다. 이 작업은 데이터프레임 내의 모든 빈 공간에 가장 가까운 값을 삽입하여 그 아래에 있는 빈 공간을 채웁니다.
처음에는 분명하지 않았던 사건, 현상 또는 상황에 대해 그 이후의 전개 과정이나 결과를 조사하고 분석하여 원인이나 설명을 소급하여 귀속시키는 과정.
df.fillna(method='bfill', inplace=True)
불완전한 데이터 처리가 발생하지 않도록 양쪽 끝에서 누락된 데이터를 해결하기 위해 순방향 및 역방향 기능 채우기를 모두 활용하는 전략을 사용하는 것을 고려합니다.
replace() 메서드
본 기법은 NaN에 국한되지 않는 값을 대체하는 데 유용하며, 데이터 프레임 내의 지정된 요소를 효과적으로 수정할 수 있습니다.
또는 replace() 메서드를 사용하여 특정 열의 NaN 값을 평균, 중앙값, 모드 또는 기타 원하는 값으로 대체할 수 있습니다. 이 함수는 inplace 키워드 인수를 사용할 수도 있습니다.
평균, 중앙값 또는 모드를 사용하여 지정된 열에서 누락된 값을 대입했을 때의 효과를 관찰합니다.
import pandas
import numpy
# Replace the null values with the mean:
df['A'].replace([numpy.nan], df['A'].mean(), inplace=True)
# Replace column A with the median:
df['B'].replace([numpy.nan], df['B'].median(), inplace=True)
# Use the modal value for column C:
df['C'].replace([numpy.nan], df['C'].mode()[0], inplace=True)
print(df)
인터폴레이트()로 누락된 데이터 채우기
인터폴레이트() 함수의 활용은 데이터 프레임 내의 기존 데이터에 의존하며, 이러한 정보는 사용할 수 없는 값을 추정하는 근거가 됩니다. 또한, inplace 키워드를 실제 형식으로 설정하면 이 작업으로 인해 데이터프레임이 되돌릴 수 없는 변경이 발생합니다.
이 방법은 숫자 열의 누락된 값을 추정하고 채우는 데만 수학적 계산을 사용하므로 적용이 제한적입니다.
앞서 언급한 코드를 실행하면 그 기능을 이해할 수 있습니다.
# Interpolate backwardly across the column:
df.interpolate(method ='linear', limit_direction ='backward', inplace=True)
# Interpolate in forward order across the column:
df.interpolate(method ='linear', limit_direction ='forward', inplace=True)
앞서 언급한 코드는 수동 개입 없이도 데이터 프레임에서 숫자 열을 선택적으로 식별하고 자동으로 추출합니다.
누락된 행을 주의 깊게 처리
누락된 데이터를 해결하기 위해 주로 수단 및 모드와 같은 기본값 대입 방법의 활용을 검토했지만, 이 문제를 해결하는 데 사용할 수 있는 다른 접근 방식도 있습니다. 예를 들어, 데이터 분석가는 특정 상황에 따라 누락된 정보가 포함된 행을 제거할 수 있습니다.
특정 전략을 사용하기 전에 그 효과에 대해 비판적으로 사고하는 것이 필수적입니다. 그렇게 하지 않으면 분석과 예측 모두에서 원치 않는 결과를 초래할 수 있습니다. 또한, 예비 데이터 시각화 기법과 분석 도구를 활용하면 효과적인 전략을 수립하는 데 도움이 될 수 있습니다