본문 바로가기
Add,/KT 에이블스쿨

데이터 처리 - 데이터구조 만들기1 (데이터프레임 변경/ 데이터프레임 합치기/ 시계열 데이터)

by 싱브이 2023. 10. 5.
728x90
반응형

 

데이터 전처리 단계

 

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(이동칸수)

 

728x90
반응형

댓글