정규분포를 가정하고 각 데이터가 평균으로부터 얼마나 떨어져 있는지를 표준편차 단위로 측정하는 방식
정규분포에서 강력하나 평균/표준편차에 민감
Z-Score =
(데이터 값 - 평균) / 표준편차
Z-score를 통한 이상치 탐색 예시
class="highlight">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
점수_평균=df['점수'].mean()점수_표준편차=df['점수'].std()df['점수_Z']=(df['점수']-점수_평균)/점수_표준편차threshold=2df['이상치여부']=df['점수_Z'].abs()>thresholdprint("학생 성적 Z-score 분석 결과:")print("="*50)print(df)print("\n이상치로 판별된 데이터:")print("="*50)print(df[df['이상치여부']==True])이상치_비율=df['이상치여부'].mean()*100print(f"\n이상치 비율: {이상치_비율:.2f}%")
pandas를 이용한 데이터 문제 해결
데이터 문제 해결 전략
데이터의 특성, 문제의 유형, 분석 목적, 그리고 데이터의 크기 등 여러 요소를 고려하여 선택
주요 문제 해결 전략
제거: 결측치나 이상치를 포함하는 행/열을 삭제
dropna() 메소드를 사용하여 행이나 열을 제거
정보의 손실 가능성으로, 데이터셋의 규모가 작거나 결측치가 특정 패턴을 가지고 있는 경우 사용에 신중
대치: 결측치나 이상치를 적절한 값으로 대체
데이터 손실을 최소화하면서 데이터의 활용도 향상
보간
주변 데이터 포인트의 관계를 이용하여 결측치를 추정
대치 전략
대체 방법
설명
적용 대상
평균 값 대치
결측치를 해당 열의 평균 값으로 대체
연속형 변수
중앙 값 대치
결측치를 해당 열의 중앙 값으로 대체
연속형 변수
최빈 값 대치
결측치를 해당 열에서 가장 빈번하게 나타나는 값으로 대체
범주형 변수
특정 값 대치
결측치를 사용자가 지정한 특정 값으로 대체
모든 유형
전방/후방 채우기
이전/이후 관측 값으로 결측치를 대체
시계열 데이터
k-최근접 이웃 대치
유사한 샘플을 기반으로 결측치를 추정
다변량 관계가 있는 데이터
보간 전략
보간 방법
설명
특징 및 장단점
선형 보간
결측치 전후의 두 데이터 포인트를 직선으로 연결하여 추정
기본 보간 방법으로 간단하고 계산이 빠름, 그러나 급격한 변화가 있는 데이터에서는 부정확
다항식 보간
주변 데이터 포인트를 다항식으로 근사하여 추정
더 부드러운 추정이 가능하나, 과적합 위험이 있음
스플라인 보간
여러 개의 다항식을 연결하여 결측치를 추정
복잡한 패턴을 더 잘 포착할 수 있으나 계산 비용이 높음
시간 기반 보간
시계열 데이터에서 시간 간격을 고려하여 보간
시간 간격을 반영할 수 있어 시계열 데이터에 적합하지만, 일정한 간격이 아닌 경우 부정확
pandas 데이터 값 변경 메소드
replace()
특정 값을 다른 값으로 바꿀 때 사용
map()
각 요소에 함수나 딕셔너리를 적용하여 값을 변경
apply()
데이터의 각 요소에 함수를 적용할 때 사용
loc 인덱서
특정 조건을 만족하는 행이나 열을 선택하고, 값을 변경
where()
특정 조건을 만족하는 값만 유지하거나, 다른 값으로 변경
pandas 데이터 값 변경의 예
class="highlight">
1
2
3
4
5
6
7
8
9
10
11
12
13
importpandasaspddata={'age':[25,30,None,22,35],'score':[90,85,None,80,92],'city':['Seoul',None,'Incheon','Seoul','Daejeon']}df=pd.DataFrame(data)df['city']=df['city'].replace('Seoul','서울')df['age_str']=df['age'].map(lambdax:f"{x}살"ifpd.notna(x)else"알수없음")print("\nmap함수를 이용한 age 변경:\n",df['age_str'])df.loc[df['score']<90,'score']=90df['age_where']=df['age'].where(df['age']>=30,other=0)