본문 바로가기
python/pandas

pandas - 데이터 노멀라이징 전처리, 레인지 통일( StandardScaler, MinMaxScaler)

by leo104 2022. 11. 30.
728x90

데이터를 노멀라이징 하는 이유는 , 각각의 레인지를 통일하여, 해석하기 쉽게 하기 위함이다.

- m_scaler   or   s_scaler.fit_transform( 변수에서 가져온 노멀라이징 할 데이터 )

- 노멀라이징 하는 방법에는 2가지가 있다.

 

1. 표준화 방법

from sklearn import preprocessing


# 변수에 함수 저장
s_scaler = StandardScaler()

평균과 표준편차로 레인지 통일

# 예시
crime_anal.head()

강남구	449	21	13	3850	4284	77.728285	85.714286	76.923077	42.857143	86.484594
강동구	156	6	4	2366	2712	78.846154	100.000000	75.000000	33.347422	82.890855
강북구	153	14	7	1434	2649	82.352941	92.857143	100.000000	43.096234	88.637222
관악구	320	12	9	2706	3298	69.062500	100.000000	88.888889	30.561715	80.109157
광진구	240	14	4	3026	2625	91.666667	100.000000	100.000000	42.200925	83.047619



crime_anal.loc[ : , '강간' : '폭력'].head()

	강간	강도	살인	절도	폭력
구별					
강남구	1.000000	0.941176	0.916667	0.953472	0.661386
강동구	0.155620	0.058824	0.166667	0.445775	0.289667
강북구	0.146974	0.529412	0.416667	0.126924	0.274769
관악구	0.628242	0.411765	0.583333	0.562094	0.428234
광진구	0.397695	0.529412	0.166667	0.671570	0.269094

이 값을 표준화 방법으로 노멀라이징 한다.

s_scaler.fit_transform(crime_anal.loc[ : , '강간' : '폭력'])

array([[ 2.4800655 ,  2.07719547,  1.77393523,  2.15464706,  1.78208641],
       [-0.79378856, -1.20258685, -0.79767557,  0.08579553, -0.00559123],
       [-0.82730925,  0.54663039,  0.05952803, -1.21351014, -0.0772348 ],
       [ 1.03867583,  0.10932608,  0.6309971 ,  0.55979117,  0.66080769],
       [ 0.14479076,  0.54663039, -0.79767557,  1.0059047 , -0.10452759],
       [ 0.60290686,  0.76528254,  0.34526256,  0.04257828,  0.32988263],
       [-0.84965638, -1.20258685, -1.08341011, -1.0280942 , -0.75386852],
       [-0.33567247, -0.9839347 ,  0.91673163, -0.1553846 ,  0.00691796],
       [-1.39716099, -0.54663039, -1.08341011, -1.73072303, -1.39866064],
       [-0.60383799,  0.32797823, -0.51194104, -0.45093482, -0.19209195],
       [ 0.64760111, -0.54663039, -0.51194104, -0.61265097, -0.91762525],
       [ 0.74816318,  0.54663039,  0.34526256,  0.34928134,  0.30258984],
       [-0.81613569, -1.42123901, -1.36914464, -0.68653853, -0.75159412],
       [ 1.85434595, -0.54663039,  0.34526256,  0.46080973, -0.36153468],
       [-1.12899546, -0.54663039, -0.79767557, -0.97233001, -1.2565107 ],
       [-0.86082994, -1.42123901, -0.51194104, -0.72417936, -0.57760259],
       [-0.07868051,  0.32797823,  1.20246616,  1.30284903,  0.65739609],
       [ 1.73143676,  1.63989116,  0.91673163,  2.34424531,  3.41055613],
       [ 0.75933674,  2.29584763,  2.05966977,  0.91947021,  0.97240036],
       [-0.36919316,  0.54663039, -0.51194104, -1.04203525, -0.75841731],
       [-0.68205293, -0.54663039, -1.08341011, -0.54433984, -0.072686  ],
       [-0.17924258, -0.10932608, -0.22620651, -0.16793154, -0.48207783],
       [-0.63735868, -0.54663039, -1.08341011,  0.33952261, -0.5605446 ],
       [-0.4474081 , -0.10932608,  1.77393523, -0.23624268,  0.1479307 ]])
       
 
 위의 노멀라이징한 데이터를 X_scaled1에 저장했다.
 
 그 후 데이터를 적용 시켜준다.
 
 crime_anal.loc[: ,'강간' : '폭력'] = X_scaled1

 

 

 

2. 정규화 방법

 

from sklearn import preprocessing

# 변수에 함수 저장

m_scaler = MinMaxScaler()

최솟값과 최댓값으로 레인지 통일

# 예시

crime_anal.head()

강남구	449	21	13	3850	4284	77.728285	85.714286	76.923077	42.857143	86.484594
강동구	156	6	4	2366	2712	78.846154	100.000000	75.000000	33.347422	82.890855
강북구	153	14	7	1434	2649	82.352941	92.857143	100.000000	43.096234	88.637222
관악구	320	12	9	2706	3298	69.062500	100.000000	88.888889	30.561715	80.109157
광진구	240	14	4	3026	2625	91.666667	100.000000	100.000000	42.200925	83.047619



crime_anal.loc[ : , '강간' : '폭력'].head()

	강간	강도	살인	절도	폭력
구별					
강남구	1.000000	0.941176	0.916667	0.953472	0.661386
강동구	0.155620	0.058824	0.166667	0.445775	0.289667
강북구	0.146974	0.529412	0.416667	0.126924	0.274769
관악구	0.628242	0.411765	0.583333	0.562094	0.428234
광진구	0.397695	0.529412	0.166667	0.671570	0.269094

이 값을 정규화 방법으로 노멀라이징 한다.

m_scaler.fit_transform(crime_anal.loc[ : , '강간' : '폭력'])

array([[1.        , 0.94117647, 0.91666667, 0.95347246, 0.66138567],
       [0.1556196 , 0.05882353, 0.16666667, 0.44577489, 0.28966659],
       [0.14697406, 0.52941176, 0.41666667, 0.12692439, 0.27476945],
       [0.62824207, 0.41176471, 0.58333333, 0.56209374, 0.42823362],
       [0.39769452, 0.52941176, 0.16666667, 0.6715703 , 0.26909435],
       [0.51585014, 0.58823529, 0.5       , 0.43516935, 0.35942303],
       [0.14121037, 0.05882353, 0.08333333, 0.17242559, 0.13407425],
       [0.27377522, 0.11764706, 0.66666667, 0.38658912, 0.29226768],
       [0.        , 0.23529412, 0.08333333, 0.        , 0.        ],
       [0.20461095, 0.47058824, 0.25      , 0.3140609 , 0.25088673],
       [0.52737752, 0.23529412, 0.25      , 0.27437564, 0.10002365],
       [0.55331412, 0.52941176, 0.5       , 0.51043449, 0.35374793],
       [0.14985591, 0.        , 0.        , 0.25624359, 0.13454717],
       [0.83861671, 0.23529412, 0.5       , 0.53780363, 0.21565382],
       [0.06916427, 0.23529412, 0.16666667, 0.18611016, 0.02955782],
       [0.13832853, 0.        , 0.25      , 0.2470065 , 0.17072594],
       [0.34005764, 0.47058824, 0.75      , 0.74444064, 0.42752424],
       [0.80691643, 0.82352941, 0.66666667, 1.        , 1.        ],
       [0.55619597, 1.        , 1.        , 0.65035922, 0.49302436],
       [0.26512968, 0.52941176, 0.25      , 0.16900445, 0.1331284 ],
       [0.18443804, 0.23529412, 0.08333333, 0.29113924, 0.2757153 ],
       [0.31412104, 0.35294118, 0.33333333, 0.38351009, 0.19058879],
       [0.19596542, 0.23529412, 0.08333333, 0.50803969, 0.17427288],
       [0.24495677, 0.35294118, 0.91666667, 0.36674649, 0.32158903]])
       
 
 위의 노멀라이징한 데이터를 X_scaled2에 저장했다.
 
 그 후 데이터를 적용 시켜준다.
 
 crime_anal.loc[: ,'강간' : '폭력'] = X_scaled2

 

* 추가

- 데이터의 값이 0과 1사이의 값만 있다면 feature 스케일링을 할 필요가 없다.

728x90