본문 바로가기

통계 소프트웨어

넘파이와 판다스를 활용해 결측치 생성 함수 구현하기

728x90

prod_na 함수를 원본 데이터프레임을 직접 수정하지 않도록 하며, 결측치 도입 인덱스를 선택해 효율적으로 코드를 작성했습니다.

import numpy as np
import pandas as pd

def prod_na(df, missing_rate=0.1):
    """
    주어진 비율에 따라 데이터프레임의 값에 무작위로 NaN을 할당합니다. 원본 데이터프레임은 변경하지 않습니다.

    Parameters:
    df (pd.DataFrame): 원본 데이터프레임
    missing_rate (float): 전체 데이터에 대한 결측치 비율 (0 ~ 1 사이의 값)

    Returns:
    pd.DataFrame: 결측치가 할당된 데이터프레임의 복사본
    """
    # 데이터프레임 복사본 생성
    df_copy = df.copy()

    # 전체 데이터 포인트 수 계산
    total_elements = df_copy.shape[0] * df_copy.shape[1]

    # 결측치를 도입할 요소 수 계산
    missing_elements = int(total_elements * missing_rate)

    # 결측치를 도입할 무작위 위치 선택
    missing_indices = np.random.choice(total_elements, missing_elements, replace=False)

    # 무작위로 선택된 위치에 결측치 할당
    for idx in missing_indices:
        # np.unravel_index를 사용하여 1차원 인덱스를 다차원 인덱스로 변환
        row, col = np.unravel_index(idx, dims=df_copy.shape)
        df_copy.iat[row, col] = np.nan

    return df_copy

# 사용 예시
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [6, 7, 8, 9, 10],
    'C': [11, 12, 13, 14, 15]
}
df = pd.DataFrame(data)

# 데이터프레임에 20% 결측치 도입
df_with_na = prod_na_refactored(df, 0.2)
print(df_with_na)

 

np.unravel_index 함수를 사용하여 1차원 인덱스를 원본 데이터프레임의 2차원 위치로 변환하는 방식은 인덱스 계산을 단순화하고 코드의 가독성을 높였습니다.

'통계 소프트웨어' 카테고리의 다른 글

sm.OLS - 다중회귀분석 python 구현  (0) 2024.03.11
python으로 상관행렬 시각화  (0) 2024.03.11
seaborn 벤치마크 데이터셋  (0) 2024.03.11
Python vs R  (0) 2024.01.26
R, JAMOVI, SPSS의 차이  (0) 2024.01.26