빅데이터 공부

Pandas DataFrame의 데이터 전처리

왕초보코딩러 2023. 7. 12. 10:13
728x90

<데이터 변환>

1. 파생변수 생성

2. 표준화

3. 정규화

 

dic1={'first':['a','b','c'], 'second':['d','e','f']}

df1=pd.DataFrame(dic1)
df1

파생변수 생성

새로운 열을 만들어준다.

 

1. 각 열 원소의 합

df1["str_plus"]=df1['first']+df1['second']
print(df1)

>>
  first second str_plus
0     a      d       ad
1     b      e       be
2     c      f       cf

2. []를 사용

3. insert() 사용

insert(삽일될 열 번호, 열 이름, 삽입될 값, 중복 열 삽입 허용)

중복 열 삽입 허용 기본값은 False

https://wikidocs.net/151527

4. assign() 사용

5. loc[] 사용

print(df1)
x=[1,2,3]

#다 같은 기능
df1['number']=x
df1.insert(3,"number",x, True) #3번 째 열에 number라는 이름으로 x값 넣음. 중복 열 삽입 허용 
df1=df1.assign(number = x)  #inplace 안됨
df1.loc[:,'number']=x       #전체 행, number라는 열에 x값 넣음

print(df1)


>>
  first second str_plus
0     a      d       ad
1     b      e       be
2     c      f       cf
  first second str_plus  number
0     a      d       ad       1
1     b      e       be       2
2     c      f       cf       3

 

 

표준화와 정규화

https://dacon.io/forum/406086

 

[BASIC, TIP] 피처 스케일링이란? 정규화 vs 표준화?

 

dacon.io

https://bskyvision.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-%EC%A0%95%EA%B7%9C%ED%99%94normalization%EC%99%80-%ED%91%9C%EC%A4%80%ED%99%94standardization

 

정규화(normalization)와 표준화(standardization), 머신러닝 성능 향상을 위한 필수 단계

오늘은 꽤 중요한 이야기를 하고자 합니다. 기본적이기 때문에 중요합니다. 이것을 간과하면 성능에 치명적인 영향을 끼치기 때문에 중요합니다. 바로 정규화(normalization)와 표준화(standardization)

bskyvision.com

표준화: 데이터가 평균을 기준으로 얼마나 떨어져 있는지를 표현하는 값으로 변환하여 평균은 0, 표준편차는 1로 만드는 과정. 데이터가 정규분포를 따를 때 유용하지만, 그렇지 않아도 사용 가능

모든 데이터들이 [0,1] 사이의 범위를 가짐

정규화: 데이터의 범위를 0과 1사이로 변환하여 데이터의 분포를 조정하는 것. 데이터의 분포가 정규분포를 따르지 않을 때 사용하는 것이 좋음 

 

공식은 사이트 참고

 

(이기적 빅데이터분석기사의 데이터셋을 사용했습니다)

2. 표준화 

-numpy

import numpy as np
mid_mean=np.mean(df['중간'])
mid_std=np.std(df['중간'])
print((df['중간']-mid_mean)/mid_std)

-scipy.stats의 zscore()

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.zscore.html

import scipy.stats as st

st.zscore(df['중간'])

-sklearn.preprocessing의 StandardScaler().fit_transform() 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kiakass&logNo=222085098701

 

# sklearn StandardScaler - fit, trasform

데이터를 학습할 때 사용되는 sklearn.StandardScaler을 사용한 스케일링은 데이터의 전처리 과정으로 전...

blog.naver.com

from sklearn.preprocessing import StandardScaler

sk=StandardScaler()
print(sk.fit_transform(df[['중간']]))

 

>>
0    1.231167
1    0.436866
2    0.238290
3    0.039715
4    1.529030
5   -0.655299
6   -1.747463
7   -0.556011
8   -1.251025
9    0.734729

똑같은 결과 나온다.

 

3. 정규화 

-numpy

mid_min=np.min(df['중간'])
mid_max=np.max(df['중간'])

print((df['중간']-mid_min)/(mid_max-mid_min))

-sklearn.preprocessing의 MinMaxScaler(). fit_transform()

https://www.dinolabs.ai/183

import sklearn.preprocessing as sk

print(sk.MinMaxScaler().fit_transform(df[['중간']]))
 

[머신러닝] MinMaxScaler : 0~1 스케일로 정규화 하기 (파이썬 코드)

MinMaxScaler는 스케일을 조정하는 정규화 함수로, 모든 데이터가 0과 1 사이의 값을 갖도록 해주는 함수입니다. 따라서 최댓값은 1로, 최솟값은 0으로 데이터의 범위를 조정해줍니다. 한편, MinMaxScale

www.dinolabs.ai

 

>>
0    0.909091
1    0.666667
2    0.606061
3    0.545455
4    1.000000
5    0.333333
6    0.000000
7    0.363636
8    0.151515
9    0.757576

똑같은 결과가 나온다

 

<데이터 요약>

1. 집계함수 적용

2. 행 또는 열에 지정한 함수 적용

 

1. 집계함수 적용

groupby(dataframe['열이름'])

df1_group=df1.groupby('cls')
print(df1_group['중간'].mean())

print(df1.groupby('cls')['중간'].mean())

#둘이 결과 똑같음
>>
cls
1    82.666667
2    72.666667
3    82.500000
4    72.500000
Name: 중간, dtype: float64

 

새로운 데이터프레임 객체로 만들 수 있다

df2=pd.DataFrame(df1.groupby('cls')['중간'].count())
print(df2)

>>
     중간
cls    
1     3
2     3
3     2
4     2

 

<결측값 식별>

1. .info()

2. .describe()

3. .count()

4. .isnull()

5. .notnull()

 

NaN인 특정 행 추출

https://hyemin-kim.github.io/2020/06/12/S-Python-Pandas6/

 

Python >> Pandas 데이터 파악 - (6) 결측값 확인 및 추출

결측값 확인 및 추출 1. 결측값에 대하여 2. column별 (비)결측값 개수 확인 – info() 3. (비)결측값 위치 확인 3-1. 전체 Data 3-2. 특정 column 4. (비)결측값 추출 4-1. 해당 column만 추출 4-2. 전체 column 추출 4

hyemin-kim.github.io

 

<결측값 대치>

1. 결측값이 있는 행 삭제

.dropna(axis=0)

 

2. 결측값 대체

.fillna()

inplace 옵션 있음

 

- 평균으로 대치

.fillna(df['열'].mean(), inplace=True)

 

- 주변 값으로 대치

https://rfriend.tistory.com/262

 

[Python pandas] 결측값 채우기, 결측값 대체하기, 결측값 처리 (filling missing value, imputation of missing valu

지난번 포스팅에서는 결측값 여부 확인, 결측값 개수 세기 등을 해보았습니다. 이번 포스팅에서는 결측값을 채우고 대체하는 다양한 방법들로서, (1) 결측값을 특정 값으로 채우기 (replace missing v

rfriend.tistory.com

앞의 값의로 대치

.fillna(method='ffill')

뒤의 값으로 대

.fillna(method='bfill')

 

- 확률 분포를 이용한 대치

아직

 

<이상값 식별>

사분위함수 사용

1사분위수: quantile(0.25)

2사분위수: quantile(0.5)

3사분위수: quantile(0.75)

4사분위수: quantile(1.0)

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

1사분위수-1.5*IQR 보다 작거나 3사분위수+1.5*IQR 보다 크면 이상값

 

 

'빅데이터 공부' 카테고리의 다른 글

데이터 클리닝  (0) 2023.11.29
판다스 기본 제공 메소드로 시각화하기  (2) 2023.11.23
DataFrame 다루기  (1) 2023.10.26
판다스(Pandas)  (0) 2023.06.17
넘파이(Numpy)  (0) 2023.06.03