KT AIVLE [2주차] - 데이터 처리

김채원·2023년 2월 7일
0

KT_AIVLE

목록 보기
5/18

이론 📝

1. 과정 Overview 📌

데이터 전처리 2가지 단계
1) 데이터 구조 만들기 (raw > dataset)
2) 모델링을 위한 전처리 (dataset > 모델링 가능한 형태)

⭐ 모델링 가능한 형태
: 모든 셀은 값이 있다, 모든 값은 숫자, (필요시) 숫자의 범위를 맞춘다.

2. 데이터 프레임 변경 📌

1) 열 이름 변경

.columns = ['모든 열 이름']: 개수 맞춰야함
.rename(columns={'원래' : '바꿈'}): 지정한 열 이름 변경
inplace = True 옵션: 원래 df에 변경사항 적용

2) 열 삭제

.drop()
axis = 1 : 열

++
얕은 복사: 주소값 참조
깊은 복사: 데이터 값 자체 복사

파이썬의 .copy()는 얕은 복사

3) 값 변경

.map({'원래 값':'새 값'}): 딕셔너리 입력

pd.cut(): 함수를 이용하여, 숫자>범주 변환
값을 균등 분할 (주: 각 등분의 개수가 균형 X)
pd.cut(df['열 이름'], 등분, labels=['등분 수 만큼'])
원하는 구간으로 자르려면 등분 자리에 bins = []
구간은 (left,right]가 됨 (left < 구간 <= right)

++
map은 기존의 값들을 맵핑하여 변환하기 때문에, 딕셔너리에 값이 존재하지 않으면 맵핑할 수 없어 NaN을 반환한 것이고, replace는 값을 바꿔주는 용도이기 때문에, 값이 존재하지 않아도 기존 값을 그대로 유지한다는 차이가 있다.

숫자>범주 : 관점은 비즈니스
묶는다 : 공통된 특징이 있다.

3. 데이터 프레임 결합 📌

1) pd.concat()
: 매핑 기준 - 인덱스(행), col 이름(열) (=df의 구조)

axis = 0: 세로로 합치기 (행이 추가)
axis = 1: 가로로 합치기 (열이 추가)

join = 'outer': 모든 행열 합치기
join = 'inner': 매핑되는 행열만 합치기

2) pd.merge()
: 매핑 기준 - 특정 col(key)의 값 기준 (=데이터의 값)
= DB의 join

how = '': left,right,outer,inner
on = '열 이름': key 값
방향은 항상 옆으로 합쳐짐

3) pivot
: 집계된 데이터 재구성
df.pivot(index,col,values)

4. 시계열 데이터 처리 📌

시계열 데이터
행과 행에 시간의 순서(흐름)가 있음
행과 행의 시간간격의 동일한 데이터
시계열 데이터 < 시퀀셜 데이터

날짜 요소 뽑기
.dt.날짜요소

시계열만 사용 가능
.shift(): 시간의 흐름 전후로 정보를 이동

.rolling().집계함수(): 일정 기간 동안 집계함수를 이동하면서 구하기

  • min_periods =1 : 값이 하나라도 있으면 NaN처리 말고 만들어내!

.diff(): 특정 시점 데이터, 이전 시점 데이터와의 차이 구하기 (차분)

5. 데이터 분석 방법론 📌

파일럿 : 전체 프젝 전 범위 축소해서 한 바퀴 돌고 가능성 보는 방법
밑의 순서는 그 과정을 설명

1) 무엇이 문제인가?

  • 문제 정의 (평가 지표 설계) : 문제는 수치화
  • 분석 목표 설정
  • 가설 수립

2) 데이터 수집/가설 검증

  • 데이터 원본 식별 (최대한 가용 영역으로 끌어와서 사용)
  • 가설이 진짜인지 확인 (EDA:그래프, 통계량, CDA:가설 검정 등)
  • 목적: 가설 확인, 전처리 대상 정리, data와 비즈니스 이해
    (EDA에서 단변량, 이변량(feature-target), 이변량(features) 분석)

3) 모델링에 적합한 구조로 데이터 처리

  • 결측치 X
  • 전부 숫자
  • (옵션) 값의 범위 일치

4) 모델링
하나의 수식으로 표현, 오차를 최소화하는 패턴을 데이터로부터 추출

5) 문제는 해결되었는가?
test set 등을 이용 + 비즈니스 기대가치 평가

6) 배포

6. 데이터의 시각화 📌

수 많은 데이터를 파악하는 2가지 방법 : 그래프, 통계량

데이터에는 비즈니스가 담겨 있다. 통계적인 해석을 넘어 인사이트를 파악
한계: 요약된 정보 표현, 관점에 따른 다른 해석 결과, 정보의 손실

matplotlib

간단한 그래프 그리기

plt.plot(data['X'], data['y']
         ,color='green'                
         , linestyle='dotted'         
         , marker='o',				   
         label='y)                

plt.xlabel('X legend') 
plt.ylabel('y legend')
plt.title('Title of Plot')
plt.xticks(rotation=45)
plt.legend(loc='upper right')   
plt.grid()

plt.show()

여러 feature를 겹쳐서 그리려면 plt.plot을 2번 쓰면 된다.

7. 단변량 분석 📌

1) 숫자형 변수

  • 숫자로 요약: 정보의 대표값 (ex. mean,median,mode,quantile 등)
  • 구간을 나누고 빈도수 계산 (도수분포표)
  • 평균
    산술평균 : sum(모든 값)/개수 (평균의 함정...)
    기하평균
    * 조화평균 : 분자가 동일한 두 비율의 평균

IQR = Q3-Q1
박스플롯 : 이상치 판정 기준 제시 (정규분포 하에)
양측 펜스는 1.5*IQR 값을 가지고 산정

히스토그램, 밀도함수, 박스 그래프 등을 사용

2) 범주형 변수

  • 범주별 빈도수: 시리즈.value_counts()
  • 범주별 비율: 범주별 빈도수/전체 count(df.shape[0])

bar plot, pie plot 등을 사용

profile
잡다한 공부 기록용

0개의 댓글