본문 바로가기

IT/Python

[파이썬] Data wrangling

 

- #Datawrangling, sometimes referred to asdata munging, is the process of transforming andmapping datafrom one "raw" data form into anotherformatwith the intent of making it more appropriate and valuable for a variety of downstream purposes such as analytics. Adata wrangleris a person who performs these transformation operations.

 

Data wrangling은 raw data(flat data)에서 일정한 format이 있는 형태로 변경하여 Anylytics할 수 있도록 하는 과정을 말한다.즉 지저분한 데이터를 깔끔하게 정리해서 쓸 수 있는 데이터로 변형하는데 목표가 있다. 예를 들어 엑셀 업무를 해보면 어떤데이터에 NaN이라는 데이터 혹은 비어있는 데이터를 제거 하거나 평균값을 넣어줘서 어떤 결과를 도출 해 내는데 쓸모있는 데이터를 만드는 과정이라고 할 수 있겠다.

 

Process는 다음과 같다.

1. Identifying and Handle missing Data: 데이터를 확인하고 빠져 있는 데이터를 정리

2. Data Formating : 데이터를 form 형식에 맞게 변형

3. Data Normalization (Centering / Scaling) : 데이터를 정규화 한다

4. Data Binning: 데이터를 Category를 만든다. 예를들어 나이를 5살 단위로 나누어 분류(10~15, 16~20)

5. Turning Categorical value to Numerical Variables

 

1. Identifying and Handle missing Data: 데이터를 확인하고 빠져 있는 데이터를 정리

dropna 혹은 fillna or repalce 를 사용하여 데이터 빠져있는 데이터를 변경

예) #replace 사용하여 "?" 기호를 #NaN 으로 변경

 

import pandas as pd
import matplotlib.pylab as plt
import numpy as np

filename = "https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/auto.csv"

headers = ["symboling","normalized-losses","make","fuel-type","aspiration", "num-of-doors","body-style",
         "drive-wheels","engine-location","wheel-base", "length","width","height","curb-weight","engine-type",
         "num-of-cylinders", "engine-size","fuel-system","bore","stroke","compression-ratio","horsepower",
         "peak-rpm","city-mpg","highway-mpg","price"]

df=pd.read_csv(filename, names=headers)
print("before:\n",df.head())

df.replace("?", np.nan, inplace=True)
# df.replace("?", np.nan, inplace = True)
print("after:\n",df.head())

>>

 

 

 

 

예) #missingdata 확인 시, #isnull 혹은 #notnull 사용가능

missing_data = df.isnull()
print(missing_data.head(5))

missing_data = df.notnull()
print(missing_data.head(5))

>> isnull 시엔 빠진 값을 'True'로 표기 notnull 시엔 빠진 값을 'False'로 표시

 

예) #missingdata 확인 시, #value_counts() 사용하여 각 column별 몇 개 data가 문제 있는지 확인

import pandas as pd
import matplotlib.pylab as plt
import numpy as np

filename = "https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/auto.csv"

headers = ["symboling","normalized-losses","make","fuel-type","aspiration", "num-of-doors","body-style",
         "drive-wheels","engine-location","wheel-base", "length","width","height","curb-weight","engine-type",
         "num-of-cylinders", "engine-size","fuel-system","bore","stroke","compression-ratio","horsepower",
         "peak-rpm","city-mpg","highway-mpg","price"]

df=pd.read_csv(filename, names=headers)
print("before:\n",df.head(5))

df.replace("?", np.nan, inplace = True)
print("after:\n",df.head(5))

missing_data = df.isnull()
print(missing_data.head(5))

for column in missing_data.columns.values.tolist():
    print(column)
    print (missing_data[column].value_counts())
    print("")  

>>

before:

symboling normalized-losses make fuel-type aspiration num-of-doors body-style drive-wheels engine-location ... fuel-system bore stroke compression

0 3 ? alfa-romero gas std two convertible rwd front ... mpfi 3.47 2.68

1 3 ? alfa-romero gas std two convertible rwd front ... mpfi 3.47 2.68

2 1 ? alfa-romero gas std two hatchback rwd front ... mpfi 2.68 3.47

3 2 164 audi gas std four sedan fwd front ... mpfi 3.19 3.40

4 2 164 audi gas std four sedan 4wd front ... mpfi 3.19 3.40

 

[5 rows x 26 columns]

after:

symboling normalized-losses make fuel-type aspiration num-of-doors body-style drive-wheels engine-location ... fuel-system bore stroke compression

0 3 NaN alfa-romero gas std two convertible rwd front ... mpfi 3.47 2.68

1 3 NaN alfa-romero gas std two convertible rwd front ... mpfi 3.47 2.68

2 1 NaN alfa-romero gas std two hatchback rwd front ... mpfi 2.68 3.47

3 2 164 audi gas std four sedan fwd front ... mpfi 3.19 3.40

4 2 164 audi gas std four sedan 4wd front ... mpfi 3.19 3.40

 

[5 rows x 26 columns]

symboling normalized-losses make fuel-type aspiration num-of-doors body-style drive-wheels engine-location ... fuel-system bore stroke compression-

0 False True False False False False False False False ... False False False

1 False True False False False False False False False ... False False False

2 False True False False False False False False False ... False False False

3 False False False False False False False False False ... False False False

4 False False False False False False False False False ... False False False

 

[5 rows x 26 columns]

symboling

False 205

Name: symboling, dtype: int64

 

 

요약하자면 빠진데이터는 아래와 같다.

"normalized-losses": 41 missing data

"num-of-doors": 2 missing data

"bore": 4 missing data

"stroke" : 4 missing data

"horsepower": 2 missing data

"peak-rpm": 2 missing data

"price": 4 missing data

 

2. Data Formating: 데이터를 form 형식에 맞게 변형

데이터 형태가 type이 원하지 않는 형태로 되어 있거나 예를들어 Mile to Km같은 데이터를 변형해서 원하는 형태로 변경한다. #dataformat

 

 

 

3. Data Normalization (Centering / Scaling): 데이터를 정규화 한다

데이터가 너무 다른 범위로 만들어져 있으면 control하기 어렵기에 그 데이터를 다루기 쉽게 변형 하는데

 

3가지 Normalizing 방법이있다

Simple Feature Scaling / Min-Max / Z-scale

 

- Simple Feature Scaling ( #simplefeaturescaling )

 

 

- Min-Max ( #minmax )

 

 

- Z-scope ( #Zscope )

 

 

4. Data Binning: 데이터를 Category를 만든다.

예를들어 나이를 5살 단위로 나누어 분류(10~15, 16~20) #databinning 은 아래와 같이 가격대를 Low / Midium / High로 분류 해서 Category를 지정한다.

 

 

5. Turning Categorical value to Numerical Variables

예를들어 자동차는 디젤과 휘발류가 있으면 그렇게 String으로 두면 데이터 값을 구하기가 어려우니 수치화 할때 사용하는 방법이다. #dummies method 를 사용하여 우리가 원하는 수치화하여 데이터를 변경할 수있다.