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 |