kt aivle

kt_aivle4

rainsky 2023. 8. 18. 00:23

데이터처리에 대해서 배웠다.

 

<데이터 전처리>

 

데이터 구조 만들기

모델링이 가능하려면 데이터의 모든 셋이 값이 있어야 하고 값은 모두 숫자여야 한다.

또, 필요시 숫자의 범위를 맞춰줘야 한다.

전처리를 할 때는 비어 있는 값은 값을 채워주고 숫자가 아닌 것은 숫자로 바꿔줘야 한다.

 

데이터프레임 변경

 - 열 이름 변경

  • 모든 열 이름 변경

Data.columns = [‘새로운칼럼이름’,…..] 모든 열의 새로운 열이름을 다 적어준다.

  • 일부 열 이름 변경

Data.rename(columns = {‘기존열’ : ‘새로운열이름’, …..}, inplace = True)

inplace = True는 변경사항이 실제 반영되게 해 준다.즉 새로운 변수에 할당하지 않아도 저렇게만 해주면 값이 반영되어 바뀐다.

 

- 열 추가

data[‘새롭게만든열’] = ~~

특정 위치 열에 넣고 싶으면 insert(열번호, ‘새로운열’, ~) -> 보통은 데이터프레임 칼럼 위치는 신경을 안 쓰기 때문에 잘 사용되지 않는다.

 

- 열 삭제

Data.drop(‘’, axis=1, inplace=True)

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

여러 열 삭제: Data.drop([‘1’,’2’], axis=1, inplace=True)


값 변경1

- 조건에 의한 값 변경 1

Data.loc[조건문, ‘열’] =

loc는 조건 가지고 조회, iloc은 인덱스 가지고 조회

 

- 조건에 의한 값 변경 2

Data[‘’] = Np.where(조건문, , 거짓)

 

값 변경 2

.map() – 주로 범주형 값을 다른 값으로 변경

Data[‘열’].map({‘a’:1, ‘b’:2})

 

pd.cut – 숫자형 변수를 범주형 변수로 변환해 준다.

Labels는 분할된 범주에 이름을 붙여준다.

Pd.cut(data[‘’], 몇등분몇 등분, labels = [‘이름’, …..])

내가 원하는 구간으로 자르기: bins=[]

Pd.cut(data[‘’], bins = [0,10,20], labels = [‘이름’, …..])

구간은 0에서 10까지, 마지막은 11에서 20까지 라는 의미!, 10< <=20 (구간 두 개)

 

데이터프레임 결합

concat – 이어 붙여라붙여라

pd.concat()

인덱스, 열이름 기준

방향 axis=0 인덱스() –> 행방향으로 붙여라(위, 아래로 붙여라) = 세로()로 합치기

axis=1이면 가로()로 붙여라(옆으로 붙여라)

 

이어 붙이는 방법 : join

‘outer’: 모든 행과 열 합치기(기본값)

‘inner’: 같은 행과 열만 합치기

Eg) pd.concat([df1, df2, ….], axis = 0, join = 'inner')

데이터프레임 구조에 맞게 합치기

 

merge

특정 칼럼의 값 기준으로 결합(옆으로만 붙인다)

pd.merge(df1, df2, how = 'inner')

how = inner, outer, left, right 기본값은 inner인 듯

데이터 값 기준으로 합치기

 

Pivot

pivot(‘인덱스’, ‘column’, ‘value’) – 이런순서로 원하는 자리에 특정 열 넣어주기

 

시계열 데이터

행과 행에 시간의 흐름이 있고, 행 사이의 시간간격이 동일해야 한다.

 

날짜 요소 뽑기

.dt.날짜요소(date, year, month, day, tiome, hour, week, ….)

 

날짜 타입으로 변환

  • pd.to_datetime(날짜데이터, format = '입력되는 날짜 형식')

기본 년, 월, 일이 아닌 다른 형식이면 format이용

Eg} format = '%d-%m-%Y'이런식으로 날짜 형식이 입력되어 있다고 알려주면 년월일에 맞게 출력

 

시간에 따른 흐름 추가하기 : 시계열데이터일 때만 사용

1. shift

Shift는 시간의 흐름 전후로 정보를 이동시킬 때 사용

Df[‘a’].shift() – 전날을 당겨온다

Df[‘a’].shift(2) – 이틀전을 당겨온다

Df[‘a’].shift(-1) – 다음날을 가져온다

 

2. rolling + 집계함수

Eg) 시간의 흐름에 따라 일정기간 동안 합을 이동하면서 구하기

Df[‘a’].rolling(n, min_periods=?).sum()

N 기본값은 1, min_periods는 최소 데이터 수

N일 이동합(평균 등) 매출액을 구해준다.

 

3. diff

특정 시점 데이터, 이전 시점 데이터와의 차이 구하기

전날 대비 오늘의 증감 –> df[‘a’].diff()

기본값 1

eg) df[‘a’].diff(2) = 이틀전 대비 오늘의 증감


차트 그리기

plt.plot()

X: 인덱스, y: 1차원 값

plt.plot(x축,y축)

 

차트 꾸미기

X축 값 조정 – plt.xticks(rotation=각도)

X축 이름 지정 – plt.xlabel(‘이름’)

y축 이름 지정 – plt.ylabel(‘이름’)

타이틀 – plt.title(‘이름’)

 

라인스타일 조정하기

plt.plot(data['a'], data['b']
         ,color='green'   (g)             # 칼러
         , linestyle='dotted'          # 라인스타일 or ‘--'
         , marker='o')                 # 값 마커(모양)

 

여러 그래프 겹쳐서 그리기

X축이 같아야 한다

- 범례, 그리드 추가

plt.plot(data['a'], data['b'], label = 'b')  # label = : 범례추가를 위한 레이블값
plt.plot(data['a'], data['c'], label = 'c')
plt.legend(loc = 'upper right')    # 레이블 표시하기. loc = : 위치
plt.grid() #그래프에 선(행,열)
plt.show()

 

그래프 크기

eg) plt.figure(figsize = (12,8))

eg) data.plot(x='a', y=['b', 'c', 'd'], figsize=(12,8))

 

여러 그래프 나눠서 그리기

plt.subplot(row, column, index(순서))

eg) plt.subplot(3,1,1)

 

- 그래프 간 간격을 적절히 맞추기

plt.tight_layout()

 

- 주피터에서 이미지를 복사하려면 shift를 누른 후 마우스 오른쪽 눌러서 이미지 복사

- .T는 행과 열을 뒤바꿔준다.


비즈니스 이해 단계

문제정의 데이터분석의 방향과 목표 가설수립

 

데이터를 분석하는 방법

Eda: 그래프, 통계량

Cda: 가설검정, 실험

 

순서

1.     단변량 분석: 개별 변수의 분포

2.     이변량분석이변량분석 1 : feature와 target 간의 관계

3.     이변량 분석 2:들 간의 관계

 

시각화

밀도함수 그래프

히스토그램의 단점을 해결. 구간 잡는 부분 문제를 해결!

eg) sns.kdeplot(x='a', data = df)

 

히스토그램

eg) sns.histplot(x='a',data=df, bins=10)

 

옵션으로 kde = True 지정하면 히스토그램과 밀도함수를 함께 나타내줄 있다.

sns.histplot(x='a', data=df, bins=16, kde=True)

 

boxplot

주의사항: 값에 NaN이 있으면 그래프가 그려지지 않는다.

박스는 4분위수

eg) plt.boxplot(temp['Age'], vert = False) -> vert = False은 옆으로 그려져 나온다.

 

sns.boxplot()

seaborn 패키지 함수들은 NaN 알아서 빼준다.

eg) sns.boxplot(x = df['a'])

 

IQR = 3 사분위수사분위수 - 1 사분위수사분위수

IQR*1.5 범위 이내의 최소, 최댓값 결정: 이상치를 판정해 주는 기준 (범위를 넘는 값은 이상치)

 

범주형 변수에 사용하는 시각화

수치화: 기초통계량

 

범주별 빈도수

.value_counts() : 범주의 개수와 상관 없이 범주 개수를 count해준다.

 

범주별 비율

.value_counts(normalize = True)

 

bar chart

sns.countplot(x = 'a', data = df)

order=[ ]을 넣어주면 순서를 지정할 수 있다.

 

pie chart

  • 범주별 비율 비교할 파이차트 사용
  • 먼저 집계를 한 후 사용
  • plt.pie( , labels=범주이름, autopct = ‘%.3f%%’)

autopct: 그래프에 표시할 비율 값 설정

.3f%: 소수점 세 자리까지 퍼센트로 표기

 

각도와 방향 추가

startangle = 90: 90도부터 시작

counterclock = False: 시계 방향으로


많은 도움이 되고, 재밌고 유익한 시간이었다.