미식가의 개발 일기

[KT 에이블스쿨(6기, AI)] 2주차, 데이터 처리(데이터 프레임 조작, 단변량 분석) 본문

KT 에이블스쿨(6기, AI)

[KT 에이블스쿨(6기, AI)] 2주차, 데이터 처리(데이터 프레임 조작, 단변량 분석)

대체불가 핫걸 2024. 9. 23. 00:00

데이터 프레임 조작

데이터 프레임 변경

추가

 

`df['추가할 열'] = 추가할 값`

 

변경

 

`df['변경할 열'] = 변경할 값`

  • `.loc`
# 나이가 10 이하인 나이 컬럼을 모두 0으로 변경
df.loc[df['Age'] < 10, 'Age'] = 0

 

  • `np.where(조건, True일 때 출력할 값, False일 때 출력할 값)`
# 나이가 10 이하인 나이 컬럼을 모두 0으로 변경
df['Age'] = np.where(df['Age'] < 10, 0, df['Age'])

 

  • `map`: 주로 범주형 값을 변경할 때 사용 
# Gen 컬럼의 값이 Male이면 1, Female이면 0으로 변경
df['Gen'] = df['Gen'].map({'Male': 1, 'Female': 0})

 

  • `cut`: 숫자형 변수 → 범주형 변수 
    • 균등 분할: `age_group = pd.cut(df['Age'], 2, labels = ['baby', 'adult'])`
    • 원하는 범주로 분할: `age_group = pd.cut(df['Age'], bins =[0, 20, 100] , labels = [ 'baby', 'adult'])`

 

삭제

 

`df.drop('열 이름', axis=1, inplace=True)`

`df.drop(['열 이름1', '열 이름2', '열 이름3' ], axis=1, inplace=True)`

  • axis=0: 행 삭제(기본 값)
  • axis=1: 열 삭제

 

컬럼 이름 변경

 

  • 전체 변경: `df.columns = [(변경할 컬럼 이름 나열)]`
  • 일부 변경: `data.rename(columns={'c1' : 'change_c1', 'c2' : 'change_c2'}, inplace=True)`-> inplace=True를 해줘야 변경 사항이 실제 반영된다.

 

데이터 프레임 결합

`concat`: 구조를 기준으로 병합
pd.concat([df1, df2], axis = 0, join = 'inner')
  • `axis`
    • `axis = 0`: 세로로 합치기
    • `axis = 1`: 가로로 합치기
  • `join`
    • `inner`: 교집합
    • `outer`: 합집합(기본값, 없는 경우 `NaN`으로 채워짐)

 

`merge`: 값을 기준으로 병합
pd.merge(df1, df2, how = 'inner', on = 'A')
  • `how`: 결합하는 방식
    • `inner`: 교집합(기본값)
    • `outer`: 합집합
    • `left`: 왼쪽 기준 결합, `right`: 오른쪽 기준 결합
  • `on`: 두 데이터 프레임을 결합할 때 기준이 되는 컬럼

 

시계열 데이터 처리

 

날짜 타입으로 변환
pd.to_datetime(df['Date'])

# 입력받은 날짜 형식을 지정해 줄 때
pd.to_datetime(df['Date'], format = '%d-%m-%Y')

 

날짜 요소 추출
  • 연도: `date.dt.year`
  • 월: `date.dt.month`
  • 일 : `date.dt.day`
  • 연도, 월, 일: `date.dt.date`
  • 요일: `date.dt.weekday`
  • 요일 이름: ` date.dt.day_name()`

 

시간 차이 계산
  • `shift`: 이동
# 이전 행의 값
df['new_s'] = df['v'].shift() 

# 전전 행의 값
df['new_s2'] = df['v'].shift(2)

 

  • `rolling`: 구간 계산
# 지정된 구간 미만까지는 NaN, 그 이후 지정된 구간만큼 연산(sum, mean, min, max)
df['new_r'] = df['v'].rolling(5).mean() 

# 지정된 구간 미만일 때도 min_periods 값만큼 데이터가 있으면 연산을 수행 
df['new_r'] = df['v'].rolling(5, min_periods = 1).mean()

 

  • `diff`: 차분
# 이전 값과의 차이 계산
df['new_d'] = df['value'].diff()  

# 다음 값과의 차이 계산
df['new_d2'] = df['value'].diff(-1)

 

 

단변량 분석

  기초 통계량 시각화
숫자형(양적, 정량적 데이터) min, max, mean, std, 사분위수 Histogram, Density plot, Box plot
범주형(질적, 정성적 데이터) 범주 별 빈도수, 비율 Bar plot, Pie chart

 

※ 시각화에 대해서는 따로 정리해 놓은 글이 있어서 첨부하겠습니다! 

 

데이터 시각화(matplotlib, seaborn)

캐글 -> Datasets -> Amazon Stock csv 파일 다운로드 후 실습 진행  데이터 불러오기 import matplotlib.pyplot as pltimport seaborn as snsimport pandas as pddata = pd.read_csv('datas/amazon_stock.csv')display(data.head())display(len(data)

irreplaceablehotgirl.tistory.com

 

반응형