프로그래밍/Pandas

[Pandas] 데이터 전처리 | 데이터 표준화 | 단위 변환 | 자료형 변환

LeeSeunghyuk 2021. 2. 10. 11:05
반응형

 

실무에서 접하는 데이터 셋은 다양한 형태로 만들어 집니다.

여러 곳에서 수집한 데이터는 대문자와 소문자 , 풀네임과 축약어 등 다양하게 표현됩니다.

또, 단위가 다르게 같은 대상을 표현하는 경우도 많습니다.

그에 따라 단위 환산과 같은 과정을 통해 변환을 해 줄 필요가 있습니다.

 

### 데이터 표준화

 

동일한 대상을 표현하는 방법에 차이가 존재합니다.

이는 분석의 정확도를 낮추는 것으로 일관성 있는 포맷으로 변환해줍니다.

 

## 단위 환산

 

같은 데이터 셋 안에서 다른 측정 단위를 사용하면 일관성 측면에서 문제가 발생합니다.

또한 외국 데이터를 사용해 우리나라에서 적용하려면 화폐, 거리 등의 단위를 변경해주어야 합니다.

 

UCI 자동차 연비 데이터셋을 활용해 해당 예시를 적용해 보겠습니다.

 

mpg.csv
0.02MB

mpg(mile per gallon) : 우리나라는 연비로 km/L 단위를 사용하지만, 영국과 미국은 갤런당 마일로 표시한다.

 

1갤런 : 3.78541L

1마일 : 1.60934km

1mpg : 1.6 / 3.8 = 0.4211

 

import pandas as pd
df=pd.read_csv('d:\\판다스 실습\\mpg.csv')

# 변환 값
mpg_to_km=0.42514
# 변환
df['km/L']=df['mpg']*mpg_to_km
df.head(3)

 

## 자료형 변환

 

위 데이터셋의 자료형을 확인해 보았습니다.

 

마력을 나타내는 horsepower 데이터가 문자형입니다.

-> 숫자 데이터는 숫자 자료형을 가지고 있는 것이 적절합니다.

 

출시 국가를 뜻하는 orgin, 출시 연도를 나타내는 model_year 데이터의 자료형은 숫자형입니다.

-> 카테고리를 나타내는 범주형 자료형태가 적절합니다.

 

 

astype() 함수를 사용해 horsepower 칼럼의 데이터를 변경하려고 합니다.

에러가 발생했습니다.

 

string '?' 를 float으로 변경할 수 없다고 합니다.

 

다시 horesepower 칼럼의 데이터를 확인합니다.

unique() 함수를 사용해 확인하겠습니다.

중복 값을 제외하고 단일 값만을 확인합니다.

'?' 데이터가 존재해 변경할 수 없던 것입니다.

 

 

# ? 데이터 처리하기

 

1. 해당 데이터를 제거

2. NaN 값으로 치환하기

 

제거하는 방법은 지난 포스팅에서 확인할 수 있습니다.

 

2021/02/09 - [프로그래밍/Pandas] - [Pandas] 데이터 전처리 | Seaborn | 누락 데이터 | 중복 데이터

 

[Pandas] 데이터 전처리 | Seaborn | 누락 데이터 | 중복 데이터

딥러닝과 다르게 머신러닝은 데이터의 전처리가 중요합니다. 데이터의 품질이 분석 모델의 성능을 좌우합니다. 데이터의 평균, 분포 등을 파악한 후 누락 데이터, 중복 데이터와 같은 이상 데이

lsh-story.tistory.com

 

데이터를 NaN 값으로 변경한 후 데이터 타입을 float형태로 바꾸겠습니다.

 

import numpy as np
df.replace('?',np.nan,inplace=True)
df.horsepower=df.horsepower.astype('float')
df.horsepower

 

'?' 문자를 numpy 모듈의 np.nan 사용해 변경한 후,

astype 함수를 통해 float형태로 변환이 이루어졌습니다.

 

이제 model_year 변수와 origin 변수를 카테고리형 자료형으로 변경해보겠습니다.

 

orgin 열의 1,2,3 은 사실 USA , EU, JPN을 나타내는 값입니다.

replace 메소드를 사용해 이를 변환해 줍니다.

 

 

데이터 타입이 int 자료형에서 object(문자열) 자료형으로 자동 변경되었습니다.

 

국가 3개가 반복되는 자료형이므로 문자열 보다는 범주, 카테고리형이 더 적절합니다.

astype 함수에 category 옵션을 사용해 범주형 데이터로 변환합니다.

 

 

3개의 범주를 가진 카테고리 자료형으로 변경되었습니다.

 

model_year 변수도 78, 79, 80과 같이 시간적인 의미는 갖지만,

숫자의 상대적 크기는 의미가 없습니다.

 

따라서 model_year 칼럼도 범주형으로 표현하여 사용합니다.

 

 

 

 

반응형