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

luckup7님의 프로필 이미지
luckup7

작성한 질문수

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

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

7회 기출 작업형1의 1번문제 풀이 방법

해결된 질문

작성

·

118

0

import pandas as pd
df = pd.read_csv("student_assessment.csv")
df = df.dropna(subset='score')
df = df.sort_values('id_assessment', ascending=False)
cond = df['id_assessment'] == 133
df = df[cond]
df_1 = df.copy()

cols = list(df.columns[df.dtypes != object])
cols


from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
df_1[cols] = ss.fit_transform(df_1[cols])
df['score_ss'] = df_1['score']
df = df.sort_values('score_ss', ascending=False)['score_ss']
print(round(df.max(), 3))

이렇게 풀면, 답이 '1.462'로 다른 값이 나오는데, 왜 이렇게 되는 걸까요?

답변 2

0

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

안녕하세요:) 133이 어디서 도출이 되었을까요?

가장 많이 수강한 과목의 id는 12입니다

image.png


luckup7님의 프로필 이미지
luckup7
질문자

image.png

안녕하세요. 이렇게 했는데, 가장 많이 수강한 과목의 id는 '133'이 아닌가요?

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

오해가 있어요! 133은 id일 뿐이지 카운트(개수)가 아니에요
숫자라서 오해가 있는 것 같아요!
value_counts()로 개수를 확인해주셔야 합니다. 🙂

0

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

제시해 주신 코드를 보면, StandardScaler를 적용하여 각 컬럼의 데이터를 표준화하는 과정을 거치셨네요. 그리고 df['score_ss'] = df_1['score']라고 하셨는데, 여기서 df_1['score']는 이미 표준화된 점수가 아닌 원본 scoredf에 새로운 컬럼으로 추가하는 과정입니다. 따라서, df['score_ss'] 컬럼에는 표준화되지 않은 원본 점수가 저장됩니다.

문제에서 원하는 것은 score 컬럼을 표준화한 후, 그 중 최대값을 출력하는 것 같습니다. 그렇다면 원본 점수가 아닌, 표준화된 점수를 df['score_ss']에 저장해야 합니다. 수정하려면, 다음과 같이 df_1[cols]에서 score 컬럼에 접근하여 표준화된 데이터를 df['score_ss']에 저장해야 합니다.

수정 예시:

df['score_ss'] = df_1['score']

df['score_ss'] = df_1['score'].values

로 바꾸거나, 더 명확하게 표준화된 score 컬럼을 직접 참조하는 방법으로 수정하시면 됩니다.

올바른 수정 예시:

df['score_ss'] = ss.fit_transform(df[['score']])

이렇게 수정하면 score 컬럼이 올바르게 표준화되어 score_ss 컬럼에 저장되고, 최대값을 출력할 때도 예상하신 대로의 결과를 얻을 수 있습니다.

luckup7님의 프로필 이미지
luckup7

작성한 질문수

질문하기