inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

수치형 자료 선택

해결된 질문

44

김하민

작성한 질문수 4

0

2유형 개념 강의 중 classification(분류) 문제 질문있습니다.

 

label 인코딩 할 때 범주형 자료를 선택하기 위해

cols = train.select_dtypes(include='object')를 사용한다고 했습니다.

 

그 후 Min-Max 스케일링을 진행할 때 강의에서는 리스트 형태로 cols 변수에 직접 수치형 컬럼을 입력했지만

cols = train.select_dtypes(exclude='object') 또는 include=['int','float'] 으로도 선택할 수 있을 것을 것이라 생각해서 실행했더니 에러가 발생합니다.

ValueError: Boolean array expected for the condition, not int64

 

제 방법대로 진행했을 때 cols에 선택된 데이터를 보면 강의에서 직접 리스트 형태로 입력한 컬럼에 추가로 'id' 컬럼이 더 선택된 것으로 보입니다. 이렇게 진행했을 때 왜 에러가 발생하는지, 에러가 발생하지 않아도 id 컬럼이 추가로 선택된 상태로 진행했을 때 문제가 있는지 질문 드립니다!

 

강의 내용

cols = ['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss', 'hours.per.week']
def get_data():
    train_copy = train.copy()
    test_copy = test.copy()
    return train_copy, test_copy
train_copy, test_copy = get_data()

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()

display(train_copy[cols].head(2)) 
train_copy[cols] = scaler.fit_transform(train_copy[cols])
test_copy[cols] = scaler.transform(test_copy[cols])
display(train_copy[cols].head(2))

제 코딩 내용은 위 코드에서

cols = ['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss', 'hours.per.week']

부분을

cols = train.select_dtypes(include=['int','float']) 
또는
cols = train.select_dtypes(exclude='object')

이렇게 바꿨습니다

python 머신러닝 빅데이터 pandas 빅데이터분석기사

답변 2

0

퇴근후딴짓

cols = train.select_dtypes(include=['int', 'float']).columns

과 같이 .columns를 붙여주세요 해당되는 컬럼명만 리스트 형태로 받을 수 있습니다.

 

train.select_dtypes(include=['int', 'float']) 의 결과는 해당 컬럼의 데이터까지 그러니깐

데이터 프레임으로 결과를 얻어요

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

김하민님의 질문에 대해 답변드리겠습니다. Min-Max 스케일링을 수행할 때 수치형 컬럼을 선택하는 과정에서 발생한 문제에 대해 알아보겠습니다.

문제의 원인

  1. 컬럼 미스매치: train.select_dtypes(include=['int', 'float'])exclude='object'로 컬럼을 선택하는 경우 id와 같은 불필요한 컬럼이 포함될 수 있습니다. 이는 MinMaxScaler가 수치형 데이터를 처리할 때 불필요한 컬럼(ID와 같이 분류에 영향을 주지 않는 컬럼)이 포함되면 스케일의 불일치나 오작동을 초래할 수 있습니다.

  2. 잘못된 데이터형: scaler.fit_transform()scaler.transform() 함수가 기대하는 입력은 수치 데이터 타입이어야 하며, train.select_dtypes(...)가 반환하는 데이터프레임을 그대로 사용하는 경우 컬럼의 데이터 타입이 달라질 수 있습니다. 이는 특히 id와 같은 불필요한 컬럼이 추가될 때 발생할 수 있는 문제입니다.

해결 방법

  • 컬럼 명시: 강의에서 제공된 대로 스케일링이 필요한 수치형 컬럼을 리스트로 명시적으로 지정하는 것이 가장 견고한 방법입니다. 이는 불필요한 컬럼이 포함되지 않도록 보장하며, 의도한 대로 데이터를 변환할 수 있도록 합니다.

  • 컬럼 필터링: 자동적인 방법을 사용하고 싶다면, 활용할 컬럼 리스트를 다시 한 번 필터링하는 과정을 추가해야 합니다. 예를 들어, 다음과 같이 원하는 컬럼만 대표 선택할 수 있습니다.

  desired_columns = ['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss', 'hours.per.week']
  selected_cols = train.select_dtypes(include=['int', 'float']).columns.intersection(desired_columns)
  • 에러 메시지의 이해: “Boolean array expected for the condition, not int64” 라는 에러 메시지는 주로 Pandas의 조건부 인덱싱일 때 발생합니다. 스케일러 적용 전후로 데이터의 형태와 컬럼명을 다시 한 번 점검해야 합니다.

위의 해결 방법으로 시도해 보신다면, id 컬럼 등 불필요한 컬럼이 스케일링에 방해가 되지 않도록 주의하는 것이 좋습니다. 이러한 점을 감안하여 MinMaxScaler나 기타 전처리 작업을 수행하시면 도움이 될 것입니다.

관련하여 추가적인 내용은 아래 링크에서 더 살펴보실 수 있습니다:
- 수치형 - 민맥스 스케일링

이 링크는 유사한 문제에 대해 깊이 있는 논의와 해결책을 제시하고 있으며, 김하민님의 질문에 대한 해결 방법을 찾는 데 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

뒤로가기 버튼 같은 것이 있나요?

0

27

1

강의 연장 문의

0

31

1

출력값 질문

0

31

2

수업노트가 어디에 있나요?

0

29

1

실기시험 제출관련

0

160

2

6.20 작업형 2 과적합

0

169

3

코딩팡 장업형2 베이스 라인 인코딩 종류 질문

0

52

2

로지스틱회귀, 회귀

0

52

2

회귀 문제를 풀때 질문입니다.

0

59

1

불균형 처리 후 성능이 더 낮아졌다면,

0

66

2

실기 체험 제2유형 에러 문의

0

66

1

LIGHTGBM 으로 하면 pred값이 소수점 6자리까지 나오는게 맞나요

0

52

2

3번문제 등분산 가정

0

50

2

작업형3 target 형 변환 질문

0

38

2

[작업형1] 연습문제 섹션1 ~ 10 의 section4

0

40

3

원핫인코딩과 레이블 인코딩에서 concat

0

62

2

제2유형 질문입니다.

0

49

2

C()

0

44

2

작업형 2에서 strafity 적용 유무

0

53

2

수강 기간 연장 가능 여부 문의드립니다.

0

63

1

ols

0

44

2

2유형 작성관련 질문(일반 심화)

0

41

2

2유형 작성관련 질문

0

42

2

2유형 object컬럼 개수 다르면

0

49

2