wisdiom 아니고 wisdom

[빅분기 실기 예시문제] 작업형 제1유형 : 데이터 처리 영역 본문

👩‍🎓✍/BigData 분석기사

[빅분기 실기 예시문제] 작업형 제1유형 : 데이터 처리 영역

글로랴 2021. 6. 1. 15:01

🔥 선행 필수 내용

https://spreadyourwisdiom21.tistory.com/8

 

2. 데이터 사전 처리

Data Preprocessing 데이터 분석의 정확도는 분석 데이터의 품질에 의해 좌우된다. 데이터 품질을 높이기 위해 누락 데이터, 중복 데이터 등 오류를 수정하고 분석 목적에 맞게 변형하는 과정이 필요

spreadyourwisdiom21.tistory.com

 

 

 

작업형 제1유형 : 데이터 처리 영역

 

Q. mtcars 데이터셋(mtcars.csv)의 qsec 컬럼을 최소최대 척도(Min-Max Scale)로 반환한 후 0.5보다 큰 값을 가지는 레코드 수를 구하시오.

 

📚 Library

In [ ]:
import pandas as pd
import numpy as np
 



🔍 데이터 살펴보기

In [ ]:
path = '/content/drive/MyDrive/bigdata/빅분기_실기/[Dataset] 작업형 제1유형/mtcars.csv'
df = pd.read_csv(path)
In [ ]:
df.head()
Out[ ]:
  Unnamed: 0 mpg cyl disp hp drat wt qsec vs am gear carb
0 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
1 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
2 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
3 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
4 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
In [ ]:
df = df.iloc[:, 1:]
df.head()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
0 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
1 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
2 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
In [ ]:
df.info()
 
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32 entries, 0 to 31
Data columns (total 11 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   mpg     32 non-null     float64
 1   cyl     32 non-null     int64  
 2   disp    32 non-null     float64
 3   hp      32 non-null     int64  
 4   drat    32 non-null     float64
 5   wt      32 non-null     float64
 6   qsec    32 non-null     float64
 7   vs      32 non-null     int64  
 8   am      32 non-null     int64  
 9   gear    32 non-null     int64  
 10  carb    32 non-null     int64  
dtypes: float64(5), int64(6)
memory usage: 2.9 KB
In [ ]:
df.describe()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
count 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.0000
mean 20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750 0.437500 0.406250 3.687500 2.8125
std 6.026948 1.785922 123.938694 68.562868 0.534679 0.978457 1.786943 0.504016 0.498991 0.737804 1.6152
min 10.400000 4.000000 71.100000 52.000000 2.760000 1.513000 14.500000 0.000000 0.000000 3.000000 1.0000
25% 15.425000 4.000000 120.825000 96.500000 3.080000 2.581250 16.892500 0.000000 0.000000 3.000000 2.0000
50% 19.200000 6.000000 196.300000 123.000000 3.695000 3.325000 17.710000 0.000000 0.000000 4.000000 2.0000
75% 22.800000 8.000000 326.000000 180.000000 3.920000 3.610000 18.900000 1.000000 1.000000 4.000000 4.0000
max 33.900000 8.000000 472.000000 335.000000 4.930000 5.424000 22.900000 1.000000 1.000000 5.000000 8.0000
 

 

Min-Max Normalization(최소-최대 정규화)

 

1) 수식 이용

  • $\frac{x - min(x)}{ max(x) - min(x)}$

In [ ]:
df1 = df
df1.head()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
0 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
1 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
2 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
In [ ]:
x_min = df1.qsec - df1.qsec.min()
max_min = df1.qsec.max() - df1.qsec.min()

df1.qsec = x_min / max_min
In [ ]:
df1.qsec.head()
Out[ ]:
0    0.233333
1    0.300000
2    0.489286
3    0.588095
4    0.300000
Name: qsec, dtype: float64
In [ ]:
mask1 = (df1.qsec > 0.5)
answer1 = df1.loc[mask1, :].qsec.count()

print('0.5보다 큰 값을 가지는 레코드 수 >> ', answer1)
 
0.5보다 큰 값을 가지는 레코드 수 >>  9
 



2) Scikit-learn 라이브러리 이용

In [ ]:
df2 = df
df2.head()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
0 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
1 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
2 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
In [ ]:
from sklearn import preprocessing
In [ ]:
df2 = preprocessing.MinMaxScaler().fit_transform(df2)
In [ ]:
df2 = pd.DataFrame(df2, columns=df.columns)
df2.head()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
0 0.451064 0.5 0.221751 0.204947 0.525346 0.283048 0.233333 0.0 1.0 0.5 0.428571
1 0.451064 0.5 0.221751 0.204947 0.525346 0.348249 0.300000 0.0 1.0 0.5 0.428571
2 0.527660 0.0 0.092043 0.144876 0.502304 0.206341 0.489286 1.0 1.0 0.5 0.000000
3 0.468085 0.5 0.466201 0.204947 0.147465 0.435183 0.588095 1.0 0.0 0.0 0.000000
4 0.353191 1.0 0.720629 0.434629 0.179724 0.492713 0.300000 0.0 0.0 0.0 0.142857
In [ ]:
mask2 = (df2.qsec > 0.5)
answer2 = df2.loc[mask2, :].qsec.count()

print('0.5보다 큰 값을 가지는 레코드 수 >> ', answer2)
 
0.5보다 큰 값을 가지는 레코드 수 >>  9
 



 

📍 데이터 정규화

 

1) min-max normalization

  • $\frac{x - min(x)}{ max(x) - min(x)}$

    0 ~ 1 사이의 값으로 변환
 

2) z-score strandardization

  • $\frac{x - mean(x)}{std(x)}$

    평균이 0 이고 분산이 1 인 표준 정규 분포로 변환
 

📌 Z-Score 정규화

In [ ]:
z_df1 = df
z_df1.head()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
0 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
1 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
2 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
In [ ]:
z_df1.qsec = (z_df1.qsec - z_df1.qsec.mean()) / (z_df1.qsec.std())

print(f'mean: {z_df1.qsec.mean()}, std: {z_df1.qsec.std()}')
 
mean: -1.465841337200402e-15, std: 1.0
In [ ]:
z_df2 = df
df.head()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
0 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
1 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
2 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
In [ ]:
from sklearn import preprocessing
z_df2 = preprocessing.StandardScaler().fit_transform(z_df2)

z_df2 = pd.DataFrame(z_df2, columns=df.columns)
z_df2.head()
Out[ ]:
  mpg cyl disp hp drat wt qsec vs am gear carb
0 0.153299 -0.106668 -0.579750 -0.543655 0.576594 -0.620167 -0.789601 -0.881917 1.208941 0.430331 0.746967
1 0.153299 -0.106668 -0.579750 -0.543655 0.576594 -0.355382 -0.471202 -0.881917 1.208941 0.430331 0.746967
2 0.456737 -1.244457 -1.006026 -0.795570 0.481584 -0.931678 0.432823 1.133893 1.208941 0.430331 -1.140108
3 0.220730 -0.106668 0.223615 -0.543655 -0.981576 -0.002336 0.904736 1.133893 -0.827170 -0.946729 -1.140108
4 -0.234427 1.031121 1.059772 0.419550 -0.848562 0.231297 -0.471202 -0.881917 -0.827170 -0.946729 -0.511083
In [ ]:
print(f'mean: {z_df2.qsec.mean()}, std: {z_df2.qsec.std()}')
 
mean: -1.4693107841523556e-15, std: 1.0160010160015238
In [ ]:
 
반응형
Comments