데이터 처리 1
<Chapter1. 프레임 변경>
0. 데이터 전처리
1) 데이터 구조 만들기
2) 모델링을 위한 전처리
1. 열 이름 변경
1) columns 속성 변경: 모든 열 이름 변경
tip.columns = ['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size']
2) rename() 메소드 사용: 지정한 열 이름 변경
tip.rename(columns={'total_bill_amount': 'total_bill',
'male_female': 'sex',
'smoke_yes_no': 'smoker',
'week_name': 'day',
'dinner_lunch': 'time'}, inplace=True)
3) 맨 뒤에 열 추가 -> 맨 뒤에 열을 추가하면
# final_amt 열 추가
tip['final_amt'] = tip['total_bill'] + tip['tip']
4) 지정한 위치에 열 추가 -> insert() 메소드를 사용하면 원하는 위치에 열을 추가할 수 있음
# tip 열 앞에 div_tb 열 추가
tip.insert(1, 'div_tb', tip['total_bill'] / tip['size'])
*️⃣연습문제
2. 열 삭제
열 삭제를 하려면 항상 조심해야 함!
# data를 복사합니다.
data2 = data.copy()
1) drop() 메소드를 사용해 열 삭제
- axis=0: 행 삭제(기본 값)
- axis=1: 열 삭제
- inplace = False : 삭제한 것처럼 보여줘, True : 진짜 삭제해!
# 열 하나 삭제
tip.drop('final_amt', axis=1, inplace=True)
# 열 두 개 삭제
tip.drop(['div_tb', 'day'], axis=1, inplace=True)
3. 값 변경
1) 열 전체 값 변경
# tip[‘tip’] 의 모든 값을 0으로 바꾸기
tip[‘tip’] = 0
2) 조건에 의한 값 변경 1
# tip[‘tip’] 의 값이 10보다 작을 경우, 0으로 바꾸기
tip.loc[tip[‘tip’] < 10, ‘tip’] = 0
3) 조건에 의한 값 변경 2
# tip[‘tip’] 의 값이 10보다 작을 경우 0, 아니면 1로 바꾸기
tip[‘tip’] = np.where(tip[‘tip’] < 10, 0, 1)
5) .map()
: 기존 값을 다르게 매핑
# Male -> 1, Female -> 0
tip['sex'] = tip['sex'].map({'Male': 1, 'Female': 0})
4. cut 메소드
1) pd.cut() :숫자형 ➔ 범주형 변수로 변환
e.g., 나이➔나이대, 고객 구매액➔고객 등급
2) 값 크기를 기준으로 지정한 개수의 범위로 나누어 범주 값 지정
# 크기로 3등분해서 등급 구하기
tip['tip_grp'] = pd.cut(tip['tip'], 3, labels=['c', 'd', 'e'] )
- tip['tip'] 열에 대해서
- 3 : 균등 간격 3 등분하고(구간을 지정할 수도 있음.
- labels=['c', 'd', 'e'] : 값을 'c', 'd', 'e'로 바꾸시오.
<Chapter2. 데이터 프레임 결합>
1. pd.concat()
- 매핑 기준: 인덱스(행), 칼럼이름()
1-1) 방향 axis = 0
- 세로(행)로 합치기(위, 아래로 붙여라)
- 칼럼 이름 기준
2-1) 방법 join
- ‘outer’ : 모든 행과 열 합치기 (기본값)
- ‘inner’ : 같은 행과 열만 합치기
1-2) 방향 axis = 1
- 가로(열)로 합치기(옆으로 붙여라)
- 행 인덱스 기준
2-2) 방법 join
- ‘outer’ : 모든 행과 열 합치기 (기본값)
- ‘inner’ : 같은 행과 열만 합치기
2. pd.merge()
: 지정한 칼럼의 값을 기준으로 병합
- 옆으로만 병합
- 어떤 칼럼을 기준 삼을 것인가?
- 방법 how (default는 inner)
- inner : 같은 값만
- outer : 모두
- left : 왼쪽 df는 모두, 오른쪽 df는 같은 값만
- right : 오른쪽 df는 모두, 왼쪽 df는 같은 값만
3. pd.pivot
- 집계된(group by) 데이터를 재구성
- 문법 : dataframe.pivot(index, column, values)
temp3 = temp2.pivot(index ='Category', columns = 'Date', values = 'Qty')
sns.heatmap으로 시각화 가능
plt.figure(figsize = (20, 6))
sns.heatmap(temp3)
plt.show()
<Chapter3. 시계열 데이터>
1. 시계열 데이터
- 행과 행에 시간의 순서(흐름)가 있고
- 행과 행의 시간간격이 동일한 데이터
✅ Time Series Data ⊂ Sequential Data
2. 날짜 요소 뽑기
- .dt.날짜요소
# pd.to_datetime(date, format = '%d/%m/%Y') # format = '%d/%m/%Y' 입력되는 날짜가 이런 형태야~~ 라고 알려주는 옵션
date = pd.Series(['03-01-2023', '03-02-2023', '03-03-2023'])
date = pd.to_datetime(date)
*️⃣연습문제
3. 시간에 따른 흐름 추출하기
1) Time Lag
- .shift()
- 시계열 데이터에서 시간의 흐름 전후로 정보를 이동시킬 때 사용
temp = data.loc[:,['Date','Amt']]
# 전날 매출액 열을 추가합시다.
temp['Amt_lag'] = temp['Amt'].shift() #default = 1
# 전전날 매출액 열을 추가.
temp['Amt_lag2'] = temp['Amt'].shift(2) # 2행 shift
# 다음날 매출액 열을 추가합시다.
temp['Amt_lag_1'] = temp['Amt'].shift(-1)
temp.head()
2) Moving Average
- .rolling().mean()
- 시간의 흐름에 따라 일정 기간 동안 평균을 이동하면서 구하기
2) 차분
- .diff()
- 특정 시점 데이터, 이전시점 데이터와의 차이 구하기
<Chapter 4. 데이터 분석 방법론>
1. CRISP-DM 🌟
1) Business Understanding - 가설 수립
- 문제를 정의하고 요인을 파악하기 위해서 가설을 수립합니다.
- 과학 연구에서는
- 기존 연구 결과로 이어져 내려오는 정설을 [귀무가설] 이라고 부르고
- 기존의 입장을 넘어서기 위한 새로운 연구 가설을 [대립가설] 이라고 부릅니다.
- 여기서 우리가 수립하는 가설을 대립가설로 부르기도 합니다.
- 가설 수립 절차
- ① 해결해야 할 문제가 무엇인가? (목표, 관심사, 𝒚)
- ② Y를 설명하기 위한 요인을 찾아라. (𝒙)
- ③ 가설의 구조를 정의하라. (𝒙 → 𝒚)
2) Data Understanding
- 데이터 원본 식별 및 취득
- (초기)가설에서 도출된 데이터의 원본을 확인
- 데이터 탐색 : EDA, CDA
- 데이터를 탐색하는 두 가지 방법
- EDA (Exploratory Data Analysis)
- 개별 데이터의 분포, 가설이 맞는지 파악
- - NA, 이상치 파악 ▪ CDA (Confirmatory Data Analysis)
- - 탐색으로 파악하기 애매한 정보는 통계적 분석 도구(가설 검정) 사용
- 개별 데이터의 분포, 가설이 맞는지 파악
- EDA & CDA
- 정리된 2차원 구조의 데이터셋을 분석하는 방법
- Exploratory Data Analysis 탐색적 데이터 분석
- Confirmatory Data Analysis 확증적 데이터 분석
- 정리된 2차원 구조의 데이터셋을 분석하는 방법
✅다음의 사항을 알아야 한다!
① (언제, 어떤) 그래프를 그리고 (어떻게) 해석
② (언제, 어떤) 통계량을 구하고 (어떻게) 해석
③ (언제, 어떤) 가설검정 방법을 사용하고 (어떻게) 해석
- EDA 및 CDA를 진행 순서
- 단변량 분석 : 개별 변수의 분포
- e.g., 타이타닉 탑승객의 나이 분석
- 이변량 분석1 : feature와 target 간의 관계 (가설을 확인하는 단계)
- e.g., 객실등급 → 생존여부 (객실등급에 따라 생존여부에 차이가 있나?)
- 이변량 분석2 : feature들 간의 관계
- 단변량 분석 : 개별 변수의 분포
3) Data Preparation
- 개요
- ① 모든 셀에 값이 있어야 한다.
- ② 모든 값은 숫자이어야 한다.
- ③ (옵션) 값의 범위를 일치시켜야 한다.
- 수행되는 내용
- 결측치 조치
- 가변수화
- 스케일링
- 데이터 분할
4) Modeling
- 모델링(학습, Learning, Training)
- 데이터로부터 패턴을 찾는 과정.
- 오차를 최소화 하는 패턴
- 결과물 : 모델(모델은 수학식으로 표현됨!)
- 모델링을 위해 필요한 두가지
- 학습 데이터
- 알고리즘
[2주차 01]