데이터 전처리 - 데이터 표준화

2022. 11. 8. 20:09·Pandas
반응형

데이터셋은 여러 사람, 국가에서 만들어지기 때문에 단위, 대소문자, 약칭 등 여러가지 형태로 표현된다.

잘 정리되어 있어 보이는 데이터셋이라도 서로 다른 단위가 섞여 있거나 같은 대상을 여러 형식으로 표현한 경우가 존재한다. 이러한 경우를 표준화 시켜서 일관성을 갖게 해야 좋은 품질의 데이터를 얻을 수 있다.

 

### 단위 환산 ###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import pandas as pd
import numpy as np
 
##### 데이터 표준화 #####
### 단위 환산 ###
# 하나의 데이터 셋 안에 있는 데이터들은 같은 측정 단위를 가질 필요가 있다 #
# 외국에서 사용하는 야드, 온스 등의 단위는 우리에게 익숙한 평, 그램 등으로 바꿀 필요가 있다 #
 
df = pd.read_csv("C:/Users/ZenBook/Desktop/code/sample/part4/auto-mpg.csv", header=None)
 
 
df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 
              'acceleration', 'model year', 'origin', 'name']
# 파일의 'mpg' 열은 mile per gallon 이라는 단위를 사용하고 있다.
# 이것을 우리에게 익숙한 km/L (리터 당 킬로미터) 단위로 바꿀 필요가 있다.
 
mpg_to_kpl = 1.60934 / 3.78541
# mile per gallon 을 km/L로 변환
 
df['kpl'] = df['mpg'] * mpg_to_kpl
# mpg의 단위를 km/L로 변환한 'kpl'열 추가
 
df['kpl'] = df['kpl'].round(2)
# round(n) : 소수점 아래 n번째 자리에서 반올림
'''
    mpg  cylinders  displacement horsepower  weight  acceleration  model year  origin                       name   kpl
0  18.0          8         307.0      130.0  3504.0          12.0          70       1  chevrolet chevelle malibu  7.65
1  15.0          8         350.0      165.0  3693.0          11.5          70       1          buick skylark 320  6.38
2  18.0          8         318.0      150.0  3436.0          11.0          70       1         plymouth satellite  7.65
'''
Colored by Color Scripter
cs

 

 

 

### 자료형 변환 ###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
### 자료형 변환 ###
# 숫자가 문자열로 저장되어 있을 경우 숫자형으로 변환해줘야 함 #
# .dtypes, info() 을 통해 각 열의 자료형 확인 #
# astype('자료형') 으로 형변환 #
 
print(df.info())
'''
 #   Column        Non-Null Count  Dtype
---  ------        --------------  -----
 0   mpg           398 non-null    float64
 1   cylinders     398 non-null    int64
 2   displacement  398 non-null    float64
 3   horsepower    398 non-null    object
 4   weight        398 non-null    float64
 5   acceleration  398 non-null    float64
 6   model year    398 non-null    int64
 7   origin        398 non-null    int64
 8   name          398 non-null    object
 9   kpl           398 non-null    float64
 '''
# horsepower가 문자열(object)로 구성되어있다. -> 숫자형이 적당하다.
# model year, origin이 숫자형으로 구성되어있다. -> 범주형이 적당하다.
 
print(df['horsepower'].unique())
'''
['130.0' '165.0' '150.0' '140.0' '198.0' '220.0' '215.0' '225.0' '190.0'
 '170.0' '160.0' '95.00' '97.00' '85.00' '88.00' '46.00' '87.00' '90.00'
 '113.0' '200.0' '210.0' '193.0' '?' '100.0' '105.0' '175.0' '153.0'
 '180.0' '110.0' '72.00' '86.00' '70.00' '76.00' '65.00' '69.00' '60.00'
 '80.00' '54.00' '208.0' '155.0' '112.0' '92.00' '145.0' '137.0' '158.0'
 '167.0' '94.00' '107.0' '230.0' '49.00' '75.00' '91.00' '122.0' '67.00'
 '83.00' '78.00' '52.00' '61.00' '93.00' '148.0' '129.0' '96.00' '71.00'
 '98.00' '115.0' '53.00' '81.00' '79.00' '120.0' '152.0' '102.0' '108.0'
 '68.00' '58.00' '149.0' '89.00' '63.00' '48.00' '66.00' '139.0' '103.0'
 '125.0' '133.0' '138.0' '135.0' '142.0' '77.00' '62.00' '132.0' '84.00'
 '64.00' '74.00' '116.0' '82.00']
 '''
 # horsepower 열 중간에 '?' 가 포함되어 있어서 read_csv 과정에서 문자열로 읽었다.
 # '?'를 삭제하고 자료형을 숫자형으로 변환하자.
 
df['horsepower'].replace('?', np.nan, inplace = True)
# '?'를 numpy 라이브러리의 np.nan로 변환
 
df.dropna(subset=['horsepower'], axis=0, inplace= True)
# 누락데이터 (NaN) 행 삭제
 
df['horsepower'] = df['horsepower'].astype('float')
# horsepower열을 float 형으로 형변환
 
df['origin'].replace({1:'USA', 2:'EU', 3:'JPN'}, inplace= True)
# origin에는 저장된 1,2,3 정수를 문자열로 변환
 
df['origin'] = df['origin'].astype('category')
# origin 처럼 유한개의 고유값이 반복적으로 나타나는 경우 범주형으로 저장하는 것이 효율적임.
# origin의 데이터를 범주형으로 변환
 
print(df['model year'].sample(3))
'''
296    79
177    75
248    78
'''
# model year 열에는 예시와 같이 상대적으로 년도를 표현하는 정수가 저장되어 있다.
# 이러한 자료형은 범주형으로 나타내는 것이 적절하다.
 
df['model year'] = df['model year'].astype('category')
 
print(df['model year'])
'''
Categories (13, int64): [70, 71, 72, 73, ..., 79, 80, 81, 82]
'''
Colored by Color Scripter
cs
반응형

'Pandas' 카테고리의 다른 글

데이터 전처리 - 정규화  (0) 2022.11.08
데이터 전처리 - 범주형(category) 데이터 처리  (0) 2022.11.08
데이터 전처리 - 중복 데이터 처리  (0) 2022.11.06
데이터 전처리 - 누락 데이터 처리  (0) 2022.11.06
Matplotlib 파이 차트 그리기  (0) 2022.11.05
'Pandas' 카테고리의 다른 글
  • 데이터 전처리 - 정규화
  • 데이터 전처리 - 범주형(category) 데이터 처리
  • 데이터 전처리 - 중복 데이터 처리
  • 데이터 전처리 - 누락 데이터 처리
김천종
김천종
  • 김천종
    김천종
    김천종
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 파이썬 (6)
      • Pandas (24)
      • 자료구조 (14)
      • 알고리즘 (4)
      • 아무거나 (16)
      • 머신러닝 (20)
      • ML 실습 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
김천종
데이터 전처리 - 데이터 표준화
상단으로

티스토리툴바