데이터 전처리 단계
1. 데이터 구조 만들기 : Raw data에서 데이터 분석을 위한 Data set으로 만드는 단계
2. 모델링을 위한 전처리 : 하나의 Data set에서 ML, DL 모델링 가능한 Data set으로 만드는 단계
데이터 구조 만들기
먼저, 데이터 분석을 큰 그림으로 보자면 이러하다.
수립한 가설에 x와 y에 해당되는 부분을 '정보'라고 하는데, 분석할 수 있는 정보의 종류는 2가지로 나뉜다.
1. 범주형
범주형 정보는 질적 데이터(정성적 데이터)이다.
- 명목적 데이터 : 성별, 주소지, 흡연여부
- 순서형 데이터 : 연령대, 고객등급
2. 수치형
수치형 정보는 양적 데이터 (정량적 데이터)이다.
- 이산형 데이터 : 통화량, 소득수준, 가입기간, 나이
- 연속형 데이터 : 온도, 몸무게
* 용어 정리
x : feature, 요인, input, 독립변수
y : target, 결과, output, Label
행 : 분석 단위, 관측치
열 : 정보, 변수
*분석 단위 : 분석 대상에 대한 단위 (예를들어, 고객 별로 예측을 하게 되면 분석 단위는 고객 한 명, 한명)
데이터 프레임 변경
- 열 이름 변경
- columns 속성 변경 : 모든 열 이름 변경
arr.columns = ['day', time', 'size']
- rename() : 지정한 열 이름 변경
arr.rename(columns = {'week_name':'day',
'dinner' : 'time'}, inplace=True) #기본값은 inplace=False이다. True로 해야 기존 데이터프레임에 변경된 값으로 덮어진다!
- 열 추가
- 맨 뒤에 열 추가
arr['새로운 열이름'] = arr['day'] + arr['time']
- 지정한 위치에 열 추가
arr.insert(1, '새로운 열이름', arr['day'] / arr['time'])
- 열 삭제
- drop() : axis = 0은 행, axis = 1은 열
#열 하나 삭제
arr.drop('day', axis = 1, inplace=True)
#열 두 개 삭제
arr.drop(['day', 'time'], axis = 1, inplace=True)
- 값 변경
- 열 전체 값 변경
#arr['day']의 모든 값을 0으로 바꾸기
arr['day'] = 0
- 조건에 의한 값 변경
#arr['day']의 값이 10보다 작을 경우, 0으로 바꾸기
arr.loc[arr['day'] < 10, 'day'] = 0
#arr['day'] 의 값이 10보다 작을 경우 0, 아니면 1로 바꾸기
arr['day'] = np.where(arr['day'] < 10, 0, 1)
- .map() : 범주형 값을 다른 값으로 변경할 때 사용
# Male -> 1, Female -> 0
arr['sex'] = arr['sex'].map({'Male' : 1, 'Female' : 0})
#.map({'기존값':'새값', ...})
- cut() : 숫자형 변수를 범주형 변수로 변환
#크기로 3등분해서 등급 구하기
arr['tip_grp'] = pd.cut(arr['tip'], 3, labels=['c', 'd', 'e'])
#arr['tip']열에 대해 균등 간격 3등분하고 값을 'c', 'd', 'e'로 바꿔라
#pd.cut(숫자형변수, 분할방식, 범주값)
* tip
cut()메소드는 right=True가 default이다.
( , ] 즉, < , <=
right=False는 반대가 된다.
], ( 즉, <=, <
데이터 프레임 결합
1. pd.concat() : 인덱스(행), 칼럼이름(열)을 기준으로 매핑
- 방향
axis = 0 : 행
axis = 1 : 열
- 방법
join = 'outer' : 모든 행과 열 합치기 (없는 값은 NaN)
join = 'inner' : 매핑되는 행과 열만 합치기
#데이터프레임 구조에 맞게 합치기
pop = pd.concat([pop01, pop02], join='outer', axis=1)
pop = pd.concat([pop01, pop02], join='inner', axis=1)
2. pd.merge() : 특정 칼럼(key)의 값 기준으로 매핑 ( join과 같다)
merge는 방향이 존재하지 않고, 무조건 옆으로 합쳐진다.
- 방법
left / right / outer / inner join
#데이터 값 기준으로 합치기
pop = pd.merge(pop0, pop1, on='year', how='inner')
pop = pd.merge(pop0, pop1, on='year', how='outer')
- pivot
: 집계된 데이터를 재구성
#groupby로 집계한 후
dataframe.pivot(index, column, values)
시계열 데이터 처리
시계열 데이터란 ?
행과 행에 시간의 순서(흐름)가 있고, 행과 행의 시간 간격이 동일한 데이터
날짜 요소는 .dt.날짜요소 로 뽑아낼 수 있다.
* tip
csv 파일은 text file이므로 Data로 바꿔줘야 한다.
pd.to_datetime()
- 시간에 따른 흐름 추출하기 : Time Lag
- .shift() : 시간의 흐름 전후로 정보를 이동
temp['붙일 장소'] = temp['붙일 항목'].shift(이동칸수)
#-1이면 제일 오른쪽
- 시간에 따른 흐름 추출하기 : Moving Average
- .rolling().mean() : 시간의 흐름에 따라 일정 기간 동안 평균을 이동하면서 구하기
temp['붙일 장소'] = temp['붙일 항목'].rolling(이동칸수).mean()
temp['붙일 장소'] = temp['붙일 항목'].rolling(이동칸수).max()
temp['붙일 장소'] = temp['붙일 항목'].rolling(이동칸수, min_periods = 1).mean()
# min_periods = 1 은 값이 하나라도 존재하면 나타난다.
- 시간에 따른 흐름 추출하기 : 차분
- .diff() : 특정 시점 데이터, 이전시점 데이터와의 차이 구하기
temp['붙일 장소'] = temp['계산 항목'].diff(이동칸수)
temp['붙일 장소'] = temp['계산 항목'].diff(이동칸수)
'Add, > KT 에이블스쿨' 카테고리의 다른 글
[Final Project] 마지막 빅 프로젝트 (1) (0) | 2023.12.19 |
---|---|
AI Python 라이브러리 (넘파이 / 판다스) (0) | 2023.10.10 |
데이터 분석 및 의미 찾기 - 데이터 분석 (이변량 분석/seaborn 라이브러리) (1) | 2023.10.07 |
데이터 처리 - 모델링을 위한 전처리 (결측치 / 가변수화 / 스케일링) (1) | 2023.10.06 |
데이터 처리 - 데이터구조 만들기2 (데이터 분석 방법론 / 시각화 라이브러리 / 단변량 분석) (1) | 2023.10.06 |
댓글