Q. mtcars 데이터셋의 qsec컬럼을 최소최대 척도로 변환 후 0.5보다 큰 값을 가지는 레코드의 개수를 구하시오.
인터넷의 풀이를 보니 풀이방법은 크게 3가지인 것 같다.
1) MinMaxScaler의 개념을 이용해서 (X- X.min())/(X.max()-X.min()) 으로 qsec 컬럼을 변환하는 방법
2) MinMaxScaler을 전체 데이터에서 수치형 데이터가 아닌 항목을 [:,1:] 로 슬라이싱을 통해 제외한 뒤, data 전체에
스케일링을 적용하는 방법
3) 마지막은 MinMaxScaler을 특정 qsec열에만 별도로 적용하는 것이다.
--> 3번째 방법을 계속 시도했으나, 에러가 나서 애를 먹다가 방법을 찾았다
제일 애를 먹었던 부분은 a['qsec'] = mms.fit_transform(a['qsec']) 를 시행했을 때 ValueError가 발생하는 것이었다....ㅜㅠ

해결방법의 힌트는 Expected 2D array, got 1D array instead 였다.
fit_transform안에는 2D array만 소화가능한데 왜 1D를 주냐?!라는 컴퓨터의 에러메시지,,,,
방법1. [[ ]] 표기를 통해 하나의 data로 qsec 컬럼을 처리
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
a = pd.read_csv('data/mtcars.csv', index_col=0)
a['qsec'] = mms.fit_transform(a[['qsec']])
print(len(a.loc[a['qsec']>0.5,'qsec']))
: [[ ]] 로 1D array를 2D Array로 변환
방법2. qsec컬럼을 values.reshape(-1,1)을 이용해 qsec 컬럼의 값들을 2D array로 변환
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
a = pd.read_csv('data/mtcars.csv', index_col=0)
a['qsec'] = mms.fit_transform(a['qsec'].values.reshape(-1,1))
print(len(a.loc[a['qsec']>0.5,'qsec']))
: resahpe를 통한 2D array변환
**reshape(1,-1) 에서 -1의 의미가 무엇인지는 아래 링크에 잘 설명되어 있다.
간단하게 설명하면 -1의 의미는 '뭔지 모르겠지만, 원래의 shape에 맞게 잘 맞춰 넣어볼께' 라는 의미이다
(뭔지 모르는 ?의 값이 행 열 둘다 있으면 컴퓨터는 shape를 맞출 수 없기 때문에 reshape(-1,-1).이 안된다)
예를 들어 기존에 (3,4) 형태의 shape를 가진 array가 있다면 .reshape(2,-1)을 적용하며 2 x ? = 3 x 4를 numpy가 계산해서
shape(2,6)형태의 array를 반환한다.
따라서, 위의 values.resahpe(-1,1)은 1이라는 열을 고정해서 qsec이라는 칼럼을 2D array로 변환시키라는 의미이다.
a = np.array([[1,2],[3,4]])
a.reshape(-1,1)
array([[1],
[2],
[3],
[4]])
https://stackoverflow.com/questions/18691084/what-does-1-mean-in-numpy-reshape
'‼ ERROR RECORD' 카테고리의 다른 글
Leetcode 02. Add Two Numbers (0) | 2022.09.15 |
---|---|
Leet code #1 Two Sum > 수식의 역발상과 enumerate사용 (0) | 2022.09.12 |
Leet code #94 Binary Tree Inorder Traverse (DFS, BFS) (0) | 2022.09.10 |
마라톤 완주 못한 선수 찾기 코테 _ Counter, List Subtraction (0) | 2022.06.16 |
소수만들기 코테 Error _ for문 끊기의 이해, itertools (0) | 2022.06.15 |
댓글