[1] 데이터 과학 수업 복습 - 전처리,시각화
1-1) 데이터 전처리
1. 데이터 전처리란 무엇인가?
데이터 전처리는 원시 데이터를 분석이나 머신러닝에 적합한 형태로 변환하는 과정이다.
데이터 과학 프로젝트의 약 70~80% 시간이 여기에 쓰일 만큼, 분석의 성패를 좌우하는 단계라고 할 수 있다.
2. 왜 전처리가 중요한가?
- 모델 성능 향상: 정제된 데이터는 머신러닝 모델의 예측력을 높인다.
- 정확한 분석: 결측치, 이상치, 중복 데이터는 분석 결과를 왜곡
- 자원 효율성: 불필요한 변수를 제거하면 처리 시간과 비용이 줄어듦
- 데이터 통합 가능성: 형식이 통일되면 시계열 결합 등 고급 분석이 쉬워짐3. 주요 전처리 단계 및 코드
3. 주요 전처리 단계 및 코드
1) 결측치(Missing Value) 처리
누락된 값을 식별하고 삭제하거나 적절한 값으로 대체한다.
df = pd.DataFrame({
'A' : [1,2,np.nan,4,5],
'B' : [np.nan, 2,3,4,5],
'C' : [1,2,3,np.nan,np.nan]
})
#결측치 확인
print(df.isna())
#결측치 개수 확인
print(df.isna().sum())
#결측치 행 삭제
df_dropped = df.dropna()
#결측치 채우기
df_filled = df.fillna(0)
df_mean = df.fillna(df.mean())
2) 이상치(Outlier) 처리
이상치는 통계적 기준을 벗어난 데이터로, 모델을 오염시킬 수 있기 때문에 반드시 처리를 해줘야 한다.
🔸 IQR (Interquartile Range)
def detect_outliers_iqr(data):
"""
IQR 방법으로 이상치 탐지
"""
Q1 = data.quantile(0.25) # 1사분위수
Q3 = data.quantile(0.75) # 3사분위수
IQR = Q3 - Q1 # 사분위 범위
# 이상치 경계 계산 (일반적으로 1.5 * IQR 사용)
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 이상치 식별
outliers = (data < lower_bound) | (data > upper_bound)
return outliers, lower_bound, upper_bound
# 사용 예시
outliers_mask, lower, upper = detect_outliers_iqr(df['Score'])
print(f"\nIQR 방법 - 이상치 경계: {lower:.2f} ~ {upper:.2f}")
print(f"이상치 개수: {outliers_mask.sum()}개")
print("이상치 값들:")
print(df[outliers_mask]['Score'].values)
3) 중복(Duplicate) 제거
중복된 행을 제거해 데이터의 무결성을 보장한다.
duplicated()함수로 중복 행을 필터링하고 subset을 사용하면 특정 열의 중복 여부를 알 수 있다.
duplicate_rows = df.duplicated() #모든 열이 동일한 행 탐지
#2. 특정 열 기준 중복 확인
name_duplicates = df.duplicated(subset=['Name']) #이름 기준 중복
이렇게 여러 방법으로 중복된 행을제거할 수 있다.
#방법1: 완전 중복 행 제거
df_no_duplicates = df.drop_duplicates()
# 방법2 : 특정 열 기준 중복 제거
df_unique_names = df.drop_duplicates(subset=['Name'])
#방법3: 조건부 중복 제거
df_max_salary = df.loc[df.groupby('Name')['Salary'].idxmax()]
4) 데이터 타입 변환
정확한 분석을 위해 숫자, 날짜, 범주형 데이터의 타입을 지정한다.
df['A'] = df['A'].astype(int)
# 문자열 '1', '2' → 정수 1, 2
# 수학적 연산(덧셈, 곱셈 등)이 가능해짐
df['C'] = pd.to_datetime(df['C'])
# 예: '2020-01-01' → datetime 객체로 변환
# 날짜 차이 계산, 월/년 추출 등이 가능
df['D'] = df['D'].astype(bool)
# 주의: 문자열 'False'도 True로 변환됨 (비어있지 않기 때문)
import pandas as pd
df_original = pd.DataFrame({
'D': ['True', 'False', 'True', 'False', 'True']
})
# 방법 1: map() 사용
df_original['D_correct1'] = df_original['D'].map({'True': True, 'False': False})
# 방법 2: 조건문 사용
df_original['D_correct2'] = (df_original['D'] == 'True')
5) 정규화(Normalization) & 표준화(Standardization) 스케일링
서로 다른 범위의 데이터를 일관된 스케일로 맞춥니다. sklearn 라이브러리를 사용한다.
구조는 둘 다 똑같다고 볼 수 있다.
우선 라이브러리를 임포트 해주고
어떤 전처리,함수를 쓸건지 정의하고 기준을 정해서 그 기준으로 변환하는 방식이다.
fit()함수는 정의했던 방식으로 기준을 정하고
transform()함수는 정의한 기준으로 데이터를 변환하는 역할을 한다.
🔹 표준화 (StandardScaler)
처음 데이터를 fit() 해줬으면 다음 valid 데이터를 정규화 시킬때는 transform()으로만 적용시켜줘도 된다.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(x_train)
scaler.transform(x_valid)
🔹 정규화 (MinMaxScaler)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler() #우선 정의해주고
scaler.fit_transform(x_train)
scaler.transform(x_valid)
1-2) 데이터 전처리
1. 데이터 시각화란?
데이터 시각화는 숫자나 표로 표현된 데이터를 시각적인 형태로 표현하여,
데이터 안에 숨겨진 패턴, 추세, 관계를 쉽게 파악할 수 있게 해준다.
2. 시각화의 목적
- 변화 추적: 시간에 따른 추세 (예: 매출 그래프)
- 패턴 인식: 이상치나 군집 파악 (예: 박스 플롯, 산점도)
- 비교 분석: 범주 간 비교 (예: 막대 그래프, 파이 차트)
- 분포 파악: 데이터가 어떻게 분포되어 있는지 (예: 히스토그램)
3. 파이썬 시각화 도구
| 라이브러리 | 특징 |
| Matplotlib | 기본 도구. 자유도 높고 다양한 커스터마이징 가능 |
| Seaborn | 통계적 시각화에 특화. 스타일 예쁨 |
| Pandas Plot | 간단한 시각화는 바로 .plot()으로 가능 |
| Plotly | 인터랙티브한 웹 기반 시각화 가능 |
4. Matplotlib의 구성 요소
| 구성 요소 | 설명 |
| Figure | 전체 그래프 영역 (캔버스 전체) |
| Axes | 실제 그래프가 그려지는 구역 (x/y축 포함) |
| Axis | 숫자가 적히는 축 그 자체 (x축, y축) |
| Artist | 선, 점, 텍스트, 레이블 등 시각화 구성요소 |
5. 기본 사용법 예제
import matplotlib.pyplot as plt
x = [1, 2, 3, 4] y = [10, 20, 25, 30]
plt.plot(x, y, label='가격 추이', color='blue', linestyle='--', marker='o')
plt.title('시간별 가격 변화')
plt.xlabel('시간')
plt.ylabel('가격')
plt.legend()
plt.grid(True)
plt.show()
6. 주요 차트별 설명 & 코드
● 선 그래프 (Line Plot)
시계열 데이터나 연속적인 데이터의 추세 파악에 사용한다.
plt.plot(months, sales, linestyle='-', marker='o', color='green') plt.title('월별 매출 변화')
● 막대 그래프 (Bar Chart)
범주형 데이터의 비교에 적합하다.
labels = ['A사', 'B사', 'C사']
values = [100, 250, 130]
plt.bar(labels, values, color='skyblue', edgecolor='black', width=0.6)
plt.title('회사별 매출 비교')
● 히스토그램 (Histogram)
데이터의 분포를 확인할 때 사용
plt.hist(df['Age'], bins=10, color='lightgreen', edgecolor='black', alpha=0.7)
plt.title('연령 분포') plt.xlabel('나이') plt.ylabel('빈도수')
● 박스 플롯 (Boxplot)
데이터의 분포와 이상치를 시각적으로 표현한다.
plt.boxplot(df['Salary'], vert=False) plt.title('급여 분포')
● 산점도 (Scatter Plot)
두 변수 간의 관계 탐색할 때 사용한다.
본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.
'카카오클라우드 AIaaS 교육 > AIaaS를 위한 머신러닝&AI' 카테고리의 다른 글
| [스나이퍼팩토리] AIaaS 마스터 클래스 12주차 - OCR (2) | 2025.06.10 |
|---|---|
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY - FastAPI (0) | 2025.06.03 |
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY 42 - python 심화 (0) | 2025.05.27 |
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY 43 - numpy,pandas (0) | 2025.05.26 |
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY 41 - python 심화 (0) | 2025.05.26 |