반응형
Notice
Recent Posts
Recent Comments
Link
개발은 처음이라 개발새발
파이썬 데이터 정규화[python/pandas] 본문
반응형
오랜만입니다. 오늘은 데이터분석에서 가장 중요한 정규화 작업에 대해 알아보도록하겠습니다. 정규화는 여러 열의 데이터가 들어 있을 때 모든 열의 데이터의 단위가 동일하면 더할나위 없이 좋지만 저희에겐 그런 행운은 없기에 단위가 서로 다른 열을 가지고 머신러닝을 하게 되면 머신러닝 분서 결과가 달라질 수 있습니다. 그렇기에 숫자 데이터간의 상대적인 크기 차이를 제거해 각 열에 속하는 데이터 값을 동일한 크기 기준으로 나눈 비율로 나타내는데 이를 두고 정규화(normalization)이라고 합니다. 정규화를 거친 데이터의 범위는 0~1 또는 -1~1이 됩니다.
정규화 작업중 기본적인 방법으로는 해당 열의 데이터를 열의 최대값의 절대값으로 나누는 방법이 있습니다. 이렇게 되면 가장 큰 값은 자기 자신과 나눈 것이니 1이 되겠죠. 이번 시간에는 auto-mpg 파일에서 horsepower 컬럼을 활용해 해보겠습니다.
import pandas as pd
import numpy as np
df= pd.read_csv('auto-mpg.csv',header=None)
#열 이름 저장
df.columns = ['mpg','cylinders','displacement','horsepower',
'weight','acceleraiton','model year','origin','name']
#horsepower 누락 데이터 삭제하고 실수형으로 변환
df['horsepower'].replace('?', np.nan, inplace=True) # ?값을 nan으로 변경
df.dropna(subset=['horsepower'], axis=0, inplace=True) # 누락 데이터 행 삭제
df['horsepower']= df['horsepower'].astype('float') # horsepower 열의 타입을 실수로 변경
print(df['horsepower'].describe())
print('\n')
#절대값으로 나눠서 저장
df.horsepower = df['horsepower']/abs(df['horsepower'].max())
print(df.horsepower.head())
print('\n')
print(df.horsepower.describe())
count 392.000000
mean 104.469388
std 38.491160
min 46.000000
25% 75.000000
50% 93.500000
75% 126.000000
max 230.000000
Name: horsepower, dtype: float64
0 0.565217
1 0.717391
3 0.652174
4 0.608696
Name: horsepower, dtype: float64
count 392.000000
mean 0.454215
std 0.167353
min 0.200000
25% 0.326087
50% 0.406522
75% 0.547826
max 1.000000
Name: horsepower, dtype: float64
네 이렇게 최대 230이었던 마력이 최대 1로 정규화가 됐습니다. 여기서 알아야 할 건 abs() 함수인데요. abs 함수를 통해 절대값을 구할 수 있다는 걸 알아가시면 좋을 듯 합니다. 다음에는 "최소최대 정규화(minmax normalization)"를 활용해보겠습니다. 최소최대 정규화는 각 열 데이터에서 해당 열의 최소값을 뺀 값을 분자로, 해당 열의 최대값과 최소값의 차를 분모로 하는 수를 계산하는 것으로 가장 큰 값은 1이 됩니다. 이를 가지고도 정규화를 시켜보도록 하겠습니다.
min_x = df['horsepower']-df['horsepower'].min()
min_max = df['horsepower'].max() - df['horsepower'].min()
df.horsepower = min_x /min_max
print(df.horsepower.head())
print('\n')
print(df.horsepower.describe())
0 0.456522
1 0.646739
2 0.565217
3 0.565217
4 0.510870
Name: horsepower, dtype: float64
count 392.000000
mean 0.317768
std 0.209191
min 0.000000
25% 0.157609
50% 0.258152
75% 0.434783
max 1.000000
Name: horsepower, dtype: float64
반응형
'파이썬 > 판다스' 카테고리의 다른 글
파이썬 날짜 분리 - 시계열 데이터 활용1 [python/pandas] (0) | 2022.08.11 |
---|---|
Timestamp & Period 배열 [python/pandas] (0) | 2022.08.11 |
누락 데이터 치환하기 2 [python/pandas] (1) | 2022.07.29 |
누락 데이터 치환하기1 [python/pandas] (2) | 2022.07.28 |
산점도 그래프 그리기 [python/seaborn] (0) | 2022.07.24 |