인프런 커뮤니티 질문&답변

장한문님의 프로필 이미지
장한문

작성한 질문수

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

7회 기출유형(작업형2)

7회 2유형 문제 에러 문의

해결된 질문

작성

·

46

0

  • 7회 2유형에서 아래와 같이 코딩을 했는데 에러가 발생합니다. 에러기 왜 발생하는지 모르겠습니다.

  • 에러는 train_test_split 함수에서 "TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union" 라고 나옵니다

 

import pandas as pd
train = pd.read_csv('churn_train.csv')
test = pd.read_csv('churn_test.csv')
y=train.pop('TotalCharges')
# print(test.head())
# print(train.shape, test.shape)

# print(y.describe())

total = pd.concat([train, test],axis=0)
# print (total.shape)

total = total.drop('customerID',axis=1)
# print (total.shape)

total=pd.get_dummies(total)
# print (total.shape)
# print(total.head())

train = total[0:4116]
test = total[4116:]
# print(train.shape, test.shape)

from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(train, y, test_size=0.2, random_state=2024)
# print(X_train.head())
# print(X_train.shape, X_val.shape, y_train.shape, y_val.shape)

from sklearn.ensemble import RandomForestRegressor
rf=RandomForestRegressor()
rf.fit(X_train, y_train)
pred1=rf.predict(X_val)

from sklearn.metrics import mean_squared_error

print((mean_squared_error(pred1, y_val))**(1/2))


pred= rf.predict(test)
result=pd.DataFrame=({
     'pred':pred
})

result.to_csv('result.csv', index=False)

답변 4

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

원인은 모르겠습니다만 환경 문제였던 것 같아요

pd.DataFrame= 이렇게 코드를 작성하면서 데이터프레임이 이상해졌어요

코랩을 다시 시작하니 정상작동 됩니다.

image.png

 

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

눈에 보이는 에러는

pred= rf.predict(test)
result=pd.DataFrame=({
     'pred':pred
})

가 아닌 아래 와 같아요!

pred= rf.predict(test)
result=pd.DataFrame({
     'pred':pred
})

 

그런데 지금 에러는 그 에러는 아닌 다른 에러입니다.

데이터의 문제로 보여지는데 잘 되는 데이터가 갑자기 안되는 상황이네요!! 파악후 댓글드릴게요!

0

장한문님의 프로필 이미지
장한문
질문자

train과 y 길이 확인했는데 동일합니다. 왜그럴까요..ㅠ

0

안녕하세요, 인프런 AI 인턴입니다. 장한문님.

train_test_split 함수에서 발생하는 “TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union” 에러는 train_test_split 함수 내부에서 데이터가 예상한 타입이 아닐 때 발생할 수 있습니다. 이 오류는 일반적으로 입력 파라미터가 올바르지 않은 경우에 나타납니다.

장한문님께서 제공해주신 코드에서 이러한 오류가 발생할 수 있는 몇 가지 시나리오를 검토해 보겠습니다.

  1. trainy의 길이 불일치 문제:

    • ytrain.pop('TotalCharges') 로 정의하였는데, 이후 trainy가 재정의되거나 변경된 적은 없습니다. 다만, train의 길이가 처음에 정의된 상태와 달리 변할 수 있기 때문에, train_test_split 호출 시 데이터의 길이가 일치하지 않을 수 있습니다.
  2. 에러 발생 원인:

    • train_test_split 함수는 보통 특성과 레이블의 배열이 동일한 첫 번째 차원(즉, 각각의 샘플의 개수)에서 동일해야 하는데, 코드 실행 중 Xy의 배열이 일치하지 않는다면 위의 오류가 발생할 수 있습니다. 이 문제가 발생하면 train의 처음 정의된 상태가 아닌, 이후 변경된 상태에서의 행 수에 주의해야 합니다.

이를 해결하기 위해서는 다음과 같은 점검 과정을 제안드립니다:

  • trainy의 길이가 처음과 일치하는지 확인해 보시길 권장합니다. 특히, total로 데이터를 병합하고 나누는 과정에서 traintotal의 인덱스가 올바르게 설정되었는지 확인하세요.

  • y 를 생성할 때의 상태와 train에서 불필요한 행이 포함되지 않는지 점검합니다.

  • train_test_split을 사용할 때, trainy 모두 동일한 길이인지 확인합니다.

아래는 유사한 문제에 대한 기존 답변을 참고하여 작업형 2유형 문제를 해결하는 기존 게시글입니다. 문제 해결을 위해 이 게시글도 참고해 보시기 바랍니다:

이 답변에서는 데이터 전처리 및 train_test_split와 같은 데이터셋 분할에서 발생할 수 있는 가장 일반적인 문제를 다룹니다. 장한문님의 코드에서의 오류 해결에 많은 힌트를 얻을 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

장한문님의 프로필 이미지
장한문

작성한 질문수

질문하기