- #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 를 사용하여 우리가 원하는 수치화하여 데이터를 변경할 수있다.
'IT > Python' 카테고리의 다른 글
[파이썬] Model Development (Linear Regression (선형 회귀)) (0) | 2020.06.16 |
---|---|
[파이썬] Data Analysis (0) | 2020.06.13 |
[파이썬] Model Evaluation using Visualization (Model Development) (0) | 2020.06.12 |
[파이썬] Linear Regression (Model Development) (0) | 2020.06.12 |
[파이썬] 나의 파이썬 학습순서 (1) | 2020.06.08 |