Pandas 데이터 프레임에서 열 정규화
- Pandas의 데이터 정규화
- 평균정규화로 Pandas 데이터 프레임 정규화
-
최소-최대
정규화로 Pandas 데이터 프레임 정규화 -
quantile
정규화로 Pandas 데이터 프레임 정규화
데이터의 표준화 또는 정규화는 기능 엔지니어링의 초기 단계입니다. 열의 정규화에는 열의 값을 공통 척도로 가져 오는 것이 포함되며, 주로 다양한 범위의 열에 대해 수행됩니다. Pandas에서 Dataframe의 열은 다양한 함수로 정규화 할 수 있습니다. 이 기사는 이러한 기능을 연습하고 올바른 상황에서 기능을 적용하는 데 도움이됩니다.
Pandas의 데이터 정규화
가장 널리 사용되는 두 가지 데이터 정규화 방법이 있습니다.
- 평균 정규화
- 최소-최대 정규화
- 분위수 정규화
Pandas에서 데이터 정규화를 수행하는 데 사용할 수있는 특정 방법은 없습니다. 이러한 정규화가 무엇인지, 네이티브 Pandas와 네이티브 Python 함수에서 약간의 터치를 사용하여 구현할 수있는 방법을 설명합니다.
다음 스 니펫을 모든 곳에서 사용하여 아래와 같이 임의의 요소로 데이터 프레임을 생성합니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))
print(df)
아래와 같이 유사한 데이터 프레임을 반환합니다.
A B C D
0 72 -53 17 92
1 -33 95 3 -91
2 -79 -64 -13 -30
3 -12 40 -42 93
4 -61 -13 74 -12
5 -19 65 -75 -23
6 -28 -91 48 15
7 97 -21 75 92
8 -18 -1 77 -71
9 47 47 42 67
10 -68 93 -91 85
11 27 -68 -69 51
12 63 14 83 -72
13 -66 28 28 64
14 -47 33 -62 -83
15 -21 32 5 -58
16 86 -69 20 -99
17 -35 69 -43 -65
18 2 19 -89 74
19 -18 -9 28 42
[20 rows x 4 columns]
평균정규화로 Pandas 데이터 프레임 정규화
평균정규화는 다양한 범위의 데이터 프레임을 정규화하는 가장 쉬운 방법 중 하나입니다. 정규화는 데이터 프레임의 모든 요소에 대해 평균을 빼고 표준 편차로 나누어 수행됩니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))
def mean_norm(df_input):
return df_input.apply(lambda x: (x - x.mean()) / x.std(), axis=0)
df_mean_norm = mean_norm(df)
print(df_mean_norm)
출력:
A B C D
0 1.452954 -1.090261 0.278088 1.247208
1 -0.514295 1.585670 0.037765 -1.333223
2 -1.376137 -1.289148 -0.236890 -0.473079
3 -0.120845 0.591236 -0.734701 1.261309
4 -1.038895 -0.367037 1.256545 -0.219266
5 -0.251995 1.043252 -1.301176 -0.374374
6 -0.420617 -1.777325 0.810231 0.161453
7 1.921346 -0.511681 1.273711 1.247208
8 -0.233260 -0.150069 1.308043 -1.051208
9 0.984561 0.717801 0.707236 0.894690
10 -1.170045 1.549509 -1.575831 1.148503
11 0.609847 -1.361470 -1.198181 0.669079
12 1.284333 0.121140 1.411038 -1.065309
13 -1.132573 0.374269 0.466913 0.852388
14 -0.776595 0.464672 -1.078020 -1.220417
15 -0.289467 0.446591 0.072097 -0.867899
16 1.715254 -1.379551 0.329586 -1.446028
17 -0.551766 1.115574 -0.751867 -0.966604
18 0.141455 0.211543 -1.541499 0.993395
19 -0.233260 -0.294714 0.466913 0.542172
Jupyter 노트북을 사용하는 경우 아래 코드와 같이Matplotlib
를 사용하여 두 데이터 프레임을 시각화 할 수 있습니다.
# %matplotlib inline
df["A"].plot(kind="bar")
정규화 전에 데이터 프레임의 A
열을 선택하고 막대 차트를 시각화하면 y 축에 -100에서 100 사이의 값이 포함됩니다.
# %matplotlib inline
df_mean_norm["A"].plot(kind="bar")
아래 그림은 정규화 후 데이터를 보여줍니다. 동일한 열이 시각화되면 y 축은 -1.5에서 +1.5 범위에 있습니다.
최소-최대
정규화로 Pandas 데이터 프레임 정규화
이것은 정규화에 널리 사용되는 방법 중 하나입니다. 정규화 출력은 데이터 프레임의 최소값을 빼고 해당 열의 최고 값과 최저값의 차이로 나눕니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))
def minmax_norm(df_input):
return (df - df.min()) / (df.max() - df.min())
df_minmax_norm = minmax_norm(df)
print(df_minmax_norm)
출력:
A B C D
0 0.857955 0.204301 0.620690 0.994792
1 0.261364 1.000000 0.540230 0.041667
2 0.000000 0.145161 0.448276 0.359375
3 0.380682 0.704301 0.281609 1.000000
4 0.102273 0.419355 0.948276 0.453125
5 0.340909 0.838710 0.091954 0.395833
6 0.289773 0.000000 0.798851 0.593750
7 1.000000 0.376344 0.954023 0.994792
8 0.346591 0.483871 0.965517 0.145833
9 0.715909 0.741935 0.764368 0.864583
10 0.062500 0.989247 0.000000 0.958333
11 0.602273 0.123656 0.126437 0.781250
12 0.806818 0.564516 1.000000 0.140625
13 0.073864 0.639785 0.683908 0.848958
14 0.181818 0.666667 0.166667 0.083333
15 0.329545 0.661290 0.551724 0.213542
16 0.937500 0.118280 0.637931 0.000000
17 0.250000 0.860215 0.275862 0.177083
18 0.460227 0.591398 0.011494 0.901042
19 0.346591 0.440860 0.683908 0.734375
위 출력에서각 열의 최소값이 0
으로 변환되고 각 열의 최대 값이 1
로 변환되는 것으로 추론 할 수 있습니다.
이 정규화에 대한 열 A
는 아래와 같이 시각화됩니다.
# %matplotlib inline
df_minmax_norm["A"].plot(kind="bar")
이것은 근거리 데이터 프레임에 적합하지만 MinMax 정규화는 이상 값이 많은 데이터 프레임에 적합하지 않을 수 있습니다.
quantile
정규화로 Pandas 데이터 프레임 정규화
분위수 정규화는 고차원 데이터 분석의 경우에 사용됩니다. 모든 컬럼의 통계적 분포가 동일하다고 관찰하고 가정합니다. 분위수 정규화는 다음 단계로 구성됩니다.
- 각 열의 순서 값 (순위)
- 각 행에서 평균을 내고 행의 각 요소 값을 평균으로 바꿉니다.
- 값을 처음과 같이 원래 주문으로 다시 정렬합니다.
import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))
def quantile_norm(df_input):
sorted_df = pd.DataFrame(
np.sort(df_input.values, axis=0), index=df_input.index, columns=df_input.columns
)
mean_df = sorted_df.mean(axis=1)
mean_df.index = np.arange(1, len(mean_df) + 1)
quantile_df = df_input.rank(method="min").stack().astype(int).map(mean_df).unstack()
return quantile_df
df_quantile_norm = quantile_norm(df)
print(df_quantile_norm)
출력:
A B C D
0 77.00 -58.25 8.25 77.00
1 -36.50 92.00 -10.50 -79.25
2 -90.00 -66.50 -20.00 -20.00
3 24.75 44.00 -36.50 92.00
4 -66.50 -36.50 71.75 -3.00
5 -3.00 71.75 -73.00 -10.50
6 -20.00 -90.00 54.00 8.25
7 92.00 -41.00 77.00 77.00
8 8.25 -10.50 87.00 -58.25
9 54.00 54.00 44.00 44.00
10 -79.25 87.00 -90.00 71.75
11 44.00 -73.00 -66.50 24.75
12 71.75 -3.00 92.00 -66.50
13 -73.00 18.00 24.75 31.75
14 -58.25 31.75 -58.25 -73.00
15 -10.50 24.75 -3.00 -36.50
16 87.00 -79.25 18.00 -90.00
17 -41.00 77.00 -41.00 -41.00
18 31.75 8.25 -79.25 54.00
19 8.25 -20.00 24.75 18.00
분위수 정규화에 대한 출력은 아래와 같이 열 A에 대해 시각화 할 수 있습니다.
관련 문장 - Pandas DataFrame
- Pandas DataFrame 열 헤더를 목록으로 가져 오는 방법
- Pandas DataFrame 열을 삭제하는 방법
- Pandas 에서 DataFrame 열을 Datetime 으로 변환하는 방법
- Pandas DataFrame에서 float를 정수로 변환하는 방법
- 한 열의 값으로 Pandas DataFrame 을 정렬하는 방법
- Pandas 그룹 및 합계를 집계하는 방법