데이터 전처리 2가지 단계
1) 데이터 구조 만들기 (raw > dataset)
2) 모델링을 위한 전처리 (dataset > 모델링 가능한 형태)
⭐ 모델링 가능한 형태
: 모든 셀은 값이 있다, 모든 값은 숫자, (필요시) 숫자의 범위를 맞춘다.
.columns = ['모든 열 이름']: 개수 맞춰야함
.rename(columns={'원래' : '바꿈'}): 지정한 열 이름 변경
inplace = True 옵션: 원래 df에 변경사항 적용
.drop()
axis = 1 : 열
++
얕은 복사: 주소값 참조
깊은 복사: 데이터 값 자체 복사
파이썬의 .copy()는 얕은 복사
.map({'원래 값':'새 값'}): 딕셔너리 입력
pd.cut(): 함수를 이용하여, 숫자>범주
변환
값을 균등 분할 (주: 각 등분의 개수가 균형 X)
pd.cut(df['열 이름'], 등분, labels=['등분 수 만큼'])
원하는 구간으로 자르려면 등분 자리에 bins = []
구간은 (left,right]가 됨 (left < 구간 <= right)
++
map은 기존의 값들을 맵핑하여 변환하기 때문에, 딕셔너리에 값이 존재하지 않으면 맵핑할 수 없어 NaN을 반환한 것이고, replace는 값을 바꿔주는 용도이기 때문에, 값이 존재하지 않아도 기존 값을 그대로 유지한다는 차이가 있다.
숫자>범주
: 관점은 비즈니스
묶는다 : 공통된 특징이 있다.
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)
⭐시계열 데이터
행과 행에 시간의 순서(흐름)가 있음
행과 행의 시간간격의 동일한 데이터
시계열 데이터 < 시퀀셜 데이터
날짜 요소 뽑기
.dt.날짜요소
시계열만 사용 가능
.shift(): 시간의 흐름 전후로 정보를 이동
.rolling().집계함수(): 일정 기간 동안 집계함수를 이동하면서 구하기
.diff(): 특정 시점 데이터, 이전 시점 데이터와의 차이 구하기 (차분)
파일럿 : 전체 프젝 전 범위 축소해서 한 바퀴 돌고 가능성 보는 방법
밑의 순서는 그 과정을 설명
1) 무엇이 문제인가?
문제는 수치화
2) 데이터 수집/가설 검증
3) 모델링에 적합한 구조로 데이터 처리
4) 모델링
하나의 수식으로 표현, 오차를 최소화하는 패턴을 데이터로부터 추출
5) 문제는 해결되었는가?
test set 등을 이용 + 비즈니스 기대가치 평가
6) 배포
수 많은 데이터를 파악하는 2가지 방법 : 그래프, 통계량
데이터에는 비즈니스가 담겨 있다. 통계적인 해석을 넘어 인사이트를 파악
한계: 요약된 정보 표현, 관점에 따른 다른 해석 결과, 정보의 손실
간단한 그래프 그리기
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번 쓰면 된다.
IQR = Q3-Q1
박스플롯 : 이상치 판정 기준 제시 (정규분포 하에)
양측 펜스는 1.5*IQR 값을 가지고 산정
히스토그램, 밀도함수, 박스 그래프 등을 사용
bar plot, pie plot 등을 사용