[AIVLE AI 6기] 무엇을 배우나요? 2주차-데이터 처리

·2024년 10월 24일
0

AIVLE

목록 보기
4/9
post-thumbnail

데이터 처리란?

  • 주어진 데이터의 구조를 이해하고 분석을 위해 변경하는 과정
  • 데이터 분석 절차를 이해하여 데이터를 변경하는 것
  • pandas를 활용한다!

데이터프레임 변경

열 이름 변경

  • 모든 열 이름을 변경하는 방식, 지정한 열 이름을 변경하는 방식이 있음

    df.columns: 모든 열 이름 변경
    df.rename(): 지정한 열 이름 변경

tip.columns = ['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size']
tip.rename(columns={'total_bill_amount': 'total_bill',
 'male_female': 'sex',
 'smoke_yes_no': 'smoker',
 'week_name': 'day',
 'dinner_lunch': 'time'}, inplace=True)

열 추가

  • 데이터 분석 시 열의 순서가 중요한 경우가 있음! -> 오류발생 가능성이 있음

    없는 열을 변경시 df['new] = []: 맨 뒤에 열 추가
    insert(): 지정한 위치에 추가

# final_amt 열 추가
tip['final_amt'] = tip['total_bill'] + tip['tip'] 

# tip 열 앞에 div_tb 열 추가
tip.insert(1, 'div_tb', tip['total_bill'] / tip['size'])

열 삭제

  • inplace를 False로 사용 시, 해당 값을 새로운 변수에 저장해야함

    df.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)

값 변경

  • 기본적으로 []을 활용하여 값을 변경할 수 있음

    []: 조건문 사용가능
    map: 값에 따라 변경 가능

# tip[‘tip’] 의 모든 값을 0으로 바꾸기
tip[‘tip’] = 0

# tip[‘tip’] 의 값이 10보다 작을 경우, 0으로 바꾸기
tip.loc[tip[‘tip’] < 10, ‘tip’] = 0

# tip[‘tip’] 의 값이 10보다 작을 경우 0, 아니면 1로 바꾸기
tip[‘tip’] = np.where(tip[‘tip’] < 10, 0, 1)

# Male -> 1, Female -> 0
tip['sex'] = tip['sex'].map({'Male': 1, 'Female': 0})

pd.cut

  • 숫자형 -> 범주형 변수로 변환하는 함수
# 크기로 3등분해서 등급 구하기
tip['tip_grp'] = pd.cut(tip['tip'], 3, labels=['c', 'd', 'e'] )

# 나이를 다음 구간으로 분할합니다.
# 'young'  : =< 40 
# 'junior' : 40 <   =< 50
# 'senior' : 50 < np.inf
# 값의 범위 중 오른쪽(큰값)이 아닌 왼쪽(작은값)이 포함되도록 하려면 pd.cut 함수 옵션에 right = False 라고 지정해야 합니다.
age_group = pd.cut(data2['Age'], bins =[0, 40, 50, 100], labels = ['young','junior','senior'])
age_group.value_counts()

데이터프레임 결합

pd.concat()

  • 단순히 합치는 방식
  • 행, 열 두 방향 모두 가능!

    axis: 0(세로, 행), 1(가로, 열) 방향으로 합친다
    join: outer(모든 행과 열 합치기), inner(같은 행만 합치기)

# 세로로 합치기
pd.concat([df1, df2], axis = 0, join = 'inner')
pd.concat([df1, df2], axis = 0, join = 'outer')

# 가로로 합치기
pd.concat([df1, df2], axis = 1, join = 'inner')
pd.concat([df1, df2], axis = 1, join = 'outer')

inner, outer의 차이

  • 기본 데이터
  • inner 결과
  • outer 결과

pd.merge()

  • 지정한 칼럼의 값을 기준으로 병합 / 옆으로만 병합
  • 테이블의 조인과 같음!!

    join: outer(모두 합치기), inner(같은 값만 합치기)
    left : 왼쪽 df는 모두, 오른쪽 df는 같은 값만
    right : 오른쪽 df는 모두, 왼쪽 df는 같은 값만
    on: 기준 설정

pd.merge(df1, df2, how = 'inner', on = 'A')
pd.merge(df1, df2, how = 'left')
pd.merge(df1, df2, how = 'right')

pd.pivot()

  • 집계된(group by) 데이터를 재구성
temp = pd.merge(sales1, products)
temp2 = temp.groupby(['Date', 'Category'], as_index = False)['Qty'].sum()
temp3 = temp2.pivot(index = 'Category', columns = 'Date' , values = 'Qty')

단변량 분석

  • 하나의 변수만을 대상으로 수행하는 데이터 분석 기법
  • 데이터를 요약하고 그 변수의 분포나 특성을 이해하는 데 초점
  • 숫자형과 범주형에 따라 방식이 다름!

숫자형 단변량 분석

  1. 숫자로 요약하기 : 정보의 대푯값
  2. 구간을 나누고 빈도수(frequency) 계산 -> 도수 분포표

숫자로 요약하기

np.mean(t['Fare'])
t['Fare'].mean()

np.median(t['Fare'])
t['Fare'].median()

titanic['Pclass'].mode()

# 기초 통계량
df.describe() 

시각화 하기

Histogram

  • 도수 분포를 정보 그림으로 나타낸 것
  • bins는 구간의 수로 적절히 조절하는 것이 중요
plt.hist(titanic.Fare, bins = 30, edgecolor = 'gray')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.show()

Density Plot

  • 밀도함수 그래프
  • 그래프의 아래 면적의 합은 1
sns.kdeplot(titanic['Fare'])
plt.show()

Box Plot

  • 사전에 반드시 NaN을 제외(sns.boxplot 은 NaN을 알아서 제거해 줌)
  • vert 옵션 : 횡(False), 종(True, 기본값)
plt.boxplot(temp['Age'] , vert = False)
plt.grid()
plt.show()

범주형 단변량 분석

숫자로 요약하기

titanic['Embarked'].value_counts()
titanic['Embarked'].value_counts(normalize = True)

시각화 하기

Bar Plot

sns.countplot(titanic['Pclass'])
plt.grid()
plt.show()
profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보