AI

데이터 처리 1

0_hailey_0 2024. 2. 26. 17:09

<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차원 구조의 데이터셋을 분석하는 방법
      1. Exploratory Data Analysis 탐색적 데이터 분석
      2. Confirmatory Data Analysis 확증적 데이터 분석

 

다음의 사항을 알아야 한다!

① (언제, 어떤) 그래프를 그리고 (어떻게) 해석

② (언제, 어떤) 통계량을 구하고 (어떻게) 해석

③ (언제, 어떤) 가설검정 방법을 사용하고 (어떻게) 해석

 

  • EDA 및 CDA를 진행 순서
    • 단변량 분석 : 개별 변수의 분포
      • e.g., 타이타닉 탑승객의 나이 분석 
    • 이변량 분석1 : feature와 target 간의 관계 (가설을 확인하는 단계)
      • e.g., 객실등급 → 생존여부 (객실등급에 따라 생존여부에 차이가 있나?)
    • 이변량 분석2 : feature들 간의 관계

 

 

3) Data Preparation

  • 개요
    • ① 모든 셀에 값이 있어야 한다.
    • ② 모든 값은 숫자이어야 한다.
    • ③ (옵션) 값의 범위를 일치시켜야 한다. 
  • 수행되는 내용
    • 결측치 조치
    • 가변수화
    • 스케일링
    • 데이터 분할

 

4) Modeling

  • 모델링(학습, Learning, Training)
    • 데이터로부터 패턴을 찾는 과정.
    • 오차를 최소화 하는 패턴
    • 결과물 : 모델(모델은 수학식으로 표현됨!)
  • 모델링을 위해 필요한 두가지
    • 학습 데이터
    • 알고리즘

 

[2주차 01]