여러분들을 도와드릴 튜터입니다.
20년 넘는 현업 경험과 강의 경력의 데이터 분석가 과정 튜터
SQL200제 책의 저자 - 정보문화사
예제가 가득한 파이썬 길라잡이의 저자 - 정보문화사
유튜브 코딩 대한민국 판다스 100제 유튜버
사랑하는 19기 데이터 분석반 학생들의 밝은 미래를 진심으로 응원합니다.
강의
수강평
- [2025년 최신 기출 반영] 빅데이터 분석 기사 실기 시험 100% 합격 ! 기출 문제의 패턴이 보인다 !
- [2025년 최신 기출 반영] 빅데이터 분석 기사 실기 시험 100% 합격 ! 기출 문제의 패턴이 보인다 !
- [2025년 최신 기출 반영] 빅데이터 분석 기사 실기 시험 100% 합격 ! 기출 문제의 패턴이 보인다 !
게시글
질문&답변
8회 작업형1 문제2
맞습니다! 정확하게 지적하셨습니다. 👍문제에서 구하는 것은:'전자 생산 비율'이 세 번째로 높은 국가의 '전자' 생산량 (x)'농업' 생산량이 세 번째로 높은 국가의 '농업' 생산량 (y)전체 수정된 코드:import pandas as pd# 데이터 불러오기df = pd.read_csv("short_prod_data.csv")# 총 생산량 및 전자 생산 비율 계산df['total'] = df['Elec'] + df['Agr'] + df['Ship'] + df['Oth']df['Elec_rate'] = df['Elec'] / df['total']# 전자 생산 비율이 세 번째로 높은 국가df_r = df.sort_values(by='Elec_rate', ascending=False)x_table = df_r.iloc[2:3, :]# 농업 생산량이 세 번째로 높은 국가df_a = df.sort_values(by='Agr', ascending=False)y_table = df_a.iloc[2:3, :]# x와 y 정의 및 합 계산x = x_table['Elec'].values[0] # 수정: 'Elec' 컬럼 사용y = y_table['Agr'].values[0]result = x + yprint(result) 코렙에 답은 수정하였고 영상도 바로 수정하겠습니다. 감사합니다.
- 0
- 2
- 20
질문&답변
다중 선형 회귀 상수항 추가 관련 질문
안녕하세요, 이진형님. 좋은 질문 감사합니다!1. sm.add_constant() 사용 여부의 차이말씀하신 대로 8회와 10회 문제에서 상수항 처리 방법이 다릅니다. 그 이유는 사용한 함수가 다르기 때문입니다.8회 방식 - sm.OLS() 사용 시:import statsmodels.api as sm X = df[['변수1', '변수2']] X = sm.add_constant(X) # 수동으로 상수항 추가 필요 y = df['price'] model = sm.OLS(y, X).fit() 10회 방식 - ols(formula) 사용 시:from statsmodels.formula.api import ols formula = 'price ~ age + school_distance + subway_distance' model = ols(formula, data=df).fit() # 자동으로 절편 포함됨 차이점 정리:sm.OLS(): 행렬 형태로 직접 입력 → sm.add_constant() 필요합니다ols(formula): R 스타일 수식 사용 → 자동으로 절편 추가합니다.따라서 10회 문제에서는 ols(formula) 방식을 사용했기 때문에 별도로 sm.add_constant()를 추가할 필요가 없었습니다.2. pd.get_dummies vs LabelEncoder2유형 문제에서 범주형 변수 처리 시:pd.get_dummies() - 원핫인코딩:df_encoded = pd.get_dummies(df, columns=['category'], drop_first=True) 범주를 여러 이진(0/1) 컬럼으로 변환 합니다.명목형 변수(성별, 지역 등)에 적합합니다. LabelEncoder - 레이블인코딩:from sklearn.preprocessing import LabelEncoder le = LabelEncoder() df['category_encoded'] = le.fit_transform(df['category']) 범주를 단일 숫자(0, 1, 2...)로 변환합니다순서형 변수(학년, 등급 등)에 적합합니다모델이 숫자 간 크기 관계를 학습할 수 있습니다진형님이 말씀하신 실험 결과 차이 이유는 다음과 같습니다.x가 범주형이고 순서 의미가 있다면 LabelEncoder가 효과적입니다.순서가 없는 명목형이라면 원핫인코딩이 더 정확합니다모델 종류(선형회귀, 트리 계열)에 따라 결과 달라질 수 있습니다.시험 대비 팁:formula 방식 사용 시 → 상수항 자동 포함합니다.OLS() 직접 사용 시 → sm.add_constant() 필수로 쓰셔야합니다범주형 변수는 문제 조건 확인 후 적절한 인코딩 선택하세요.진형님의 좋은 질문 정말 감사합니다.추가 질문 있으시면 언제든지 댓글 남겨주세요!
- 0
- 2
- 35
질문&답변
10회 작업형1번문제2번 문제 풀이 틀림
아 정말 감사합니다. 바로 수정하겠습니다영상도 수정 완료했습니다.수정완료하였습니다. 감사합니다.# 작업 1) 연월별 매출 2위 찾기 import pandas as pd df = pd.read_csv('sales_data.csv') #1. date 컬럼을 datetime 형식으로 변환하시오 df['date'] = pd.to_datetime(df['date'], format='%Y년 %m월 %d일') df.head() # 2. 각 연-월(YYYY-MM) 단위로 총 매출액을 계산하시오 df['year_month'] = df['date'].dt.strftime('%Y-%m') 연월별매출 = df.groupby('year_month')['price'].sum() 연월별매출 #3. 연월별 매출액을 내림차순으로 정렬하여, 2번째로 높은 매출액을 출력하시오 연월별매출 = 연월별매출.sort_values(ascending=False) result= 연월별매출[1] print(result)
- 0
- 2
- 36
질문&답변
링크가안보여요 어디에올라와있는거죠대체 ? 구글코랩파일이요
아래 빨간색 화살표가 가리키는 수업노트를 누르시면 보실 수 있습니다. (사진)
- 0
- 4
- 37
질문&답변
8회 1유형 1번 문제
좋은 질문 감사합니다!문제를 다시 살펴보니, 질문자님께서 지적하신 부분이 매우 날카로운 통찰입니다.문제 해석에 대하여문제 1-2에서 "커피 소비량이 3번째로 많은 도시('city')의 커피 소비량"이라고 표현했는데, 이 표현이 두 가지로 해석될 수 있습니다:제 정답의 의도 (nlargest 방식)Central 지역의 모든 행 중에서 coffee_servings 값이 3번째로 큰 "행"을 찾는 것같은 도시가 여러 번 나타나도 각 행을 독립적으로 취급질문자님의 접근 (groupby 방식)같은 도시가 여러 번 나타나면 합산하여, "도시별" coffee_servings 합계가 3번째로 큰 도시를 찾는 것실무적으로 더 합리적인 접근정답 여부질문자님의 풀이도 충분히 정답이 될 수 있습니다!오히려 "도시의 커피 소비량"이라는 표현을 보면, 질문자님처럼 도시를 하나의 단위로 보고 groupby로 집계하는 것이 더 논리적으로 타당합니다.다만, 제가 의도했던 것은:데이터의 각 행을 독립적인 관측치로 보고단순하게 "3번째로 큰 값"을 찾는 방식초보자 입장에서 가장 직관적이고 단순한 풀이결론제 정답 (nlargest): 문제를 가장 단순하게 해석한 풀이질문자님 정답 (groupby): 실무적으로 더 정확하고 데이터의 의미를 고려한 풀이두 가지 모두 타당한 접근이며, 이런 질문을 하신 것 자체가 데이터를 깊이 있게 이해하고 계신다는 증거입니다!앞으로는 이런 애매함을 없애기 위해 문제를 다음과 같이 명확하게 수정하겠습니다:"Central 지역에서 coffee_servings 값이 3번째로 큰 행의 값"또는 "Central 지역에서 도시별 총 coffee_servings가 3번째로 큰 도시"좋은 질문 감사드리고, 계속 이렇게 깊이 있게 고민하시면 실력이 많이 늘 것입니다! 👍
- 0
- 1
- 42
질문&답변
답변 항상 감사드립니다. 질문 있습니다.
좋은 질문입니다! 빅데이터분석기사 실기 유형2(작업형2)의 특성을 고려하여 답변드리겠습니다.데이터 Drop 전략의 유효성에 대한 현재 코드의 문제점은 cond = y_train['repair_cost'] ytrain = y_train[~cond] # ytrain만 필터링이렇게 하면 xtrain과 ytrain의 행 개수가 안 맞아서 에러가 발생합니다!올바른 수정은 다음과 같습니다. cond = y_train['repair_cost'] xtrain = xtrain[~cond] # X도 같이 필터링ytrain = y_train[~cond]말씀하신건 처럼 명백한 이상치(음수 수리비)는 제거하는 것이 합리적 입니다.그리고 train 데이터는 drop 가능한데 test는 절대 drop 하지 마세요.아래의 코드는 절대 하면 안됩니다. xtest = xtest.dropna() # 제출파일 행수 안맞습니다.결측치 처리 방법은 시험 시간 관계상 다음과 같이 해주세요.xtest = xtest.fillna(xtest.mean()) # 수치형xtest['category'] = xtest['category'].fillna('Unknown') # 범주형그리고 두번째 질문이신 원핫인코딩 불일치 문제는 매우 중요한 질문 입니다.문제 상황:# Train: 미국, 영국, 프랑스# Test: 독일, 러시아, 영국pd.get_dummies(xtrain) # 3개 컬럼pd.get_dummies(xtest) # 3개 컬럼 (다른 이름!) → 에러!해결방법은 다음과 같이 하시면 됩니다. 방법: pd.get_dummies() + reindex xtrain_encoded = pd.get_dummies(xtrain, columns=['country'])xtest_encoded = pd.get_dummies(xtest, columns=['country'])# test를 train 컬럼에 맞춤 (없는 컬럼은 0으로 채움)xtest_encoded = xtest_encoded.reindex(columns=xtrain_encoded.columns, fill_value=0)시험 시간이 제한되어 있어서 경진대회 할때 처럼 모델을 다양하게 쓰고 하이퍼 파라미터를 조절하며 시험 문제를 풀수가 없습니다.그래서 최대한 간단하게 코드를 암기하고 작성하시면 40점 만점에 35점 이상은 맞출수 있으니까요. 일단 시험은 최대한 간단하게 코드를 암시하시는걸 추천드려요.그리고 랜덤 포레스트 분류와 회귀 질문은 아주 잘해주셧는데요.시험때는 그냥 분류 문제가 나오면 랜덤 포레스트 분류(RandomForestClassifier) 를 풀고수치 예측 문제가 나오면 랜덤 포레스트 회귀(RandomForestRegressor) 로 풀면 됩니다.관련된 예제는 제가 최근 10회 시험문제 복기로 올린 2유형 문제를 참고하시면 회귀문제를 보실 수 있습니다.분류는 2회~9회 시험을 대부분으로 랜덤 포레스트 분류로 제 2유형을 풀어서 그걸 보시면 되구요.일단 짧고 간단하게 2유형 코드를 작성하시고 계속 매일매일 시험환경에서 반복 연습하다보면 꼭 합격하십니다.화이팅 ! 하세요.
- 0
- 2
- 36
질문&답변
원핫인코딩 이후 칼럼 불일치 문제
네 ~ 답변드리겠습니다.MinMaxScaler는 2차원 배열을 입력으로 받아야 합니다.그런데 x_tr, x_val, test2가 1차원 배열(시리즈)이어서 에러가 발생하는 것 같습니다.다음과 같이 수정해보시기 바랍니다. from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()# 2차원으로 변환 후 스케일링x_tr_scaled = scaler.fit_transform(x_tr.values.reshape(-1, 1))x_val_scaled = scaler.transform(x_val.values.reshape(-1, 1))test2_scaled = scaler.transform(test2.values.reshape(-1, 1))# 필요하면 다시 1차원으로x_tr_scaled = x_tr_scaled.flatten()x_val_scaled = x_val_scaled.flatten()test2_scaled = test2_scaled.flatten() 여기서 중요한 점은:1. reshape(-1, 1)로 1차원을 2차원으로 변환해야 합니다.2.학습 데이터(x_tr)는 fit_transform()을 사용하고,3.검증/테스트 데이터는 transform()만 사용합니다.이렇게 해야 데이터 누수를 방지할 수 있습니다.안되시면 말씀해주세요.
- 0
- 2
- 27
질문&답변
6회 1유형 3번 문제
너무 잘 하신겁니다. 실제 시험때는 transform 이든 뭐든 다 생각이 안나고 내가 평상시 연습하고 확실히 알고 있는것만 생각나기 때문에 대부분의 수험생분들이 거의 노가다로 코딩해서 문제를 해결합니다. 정말 잘하신거예요. 굳이 transfrom 으로 하고 싶으시다면 다음과 같이 하시면 됩니다. df['yr'] = df['날짜'].str[:4] # 처음 4글자만df['sum'] = df[['전자제품', '가전제품', '의류', '잡화']].sum(axis=1)df['gsum'] = df.groupby('yr')['sum'].transform('sum')result = df.loc[df['gsum'].idxmax()].iloc[0]print(int(round(result['gsum'] / 12, 0))) 그리고 transform 이 이해되기 쉬우시라고 아침에 자료를 준비햇는데 다음의 내용을 참고해보면 도움이 많이 될것 같습니다. (사진)(사진)(사진)(사진) 위의 내용은 제가 영상으로 올려드릴께요.
- 0
- 1
- 34
질문&답변
코딩 방법에 따른 채점 기준에 관하여 질문있습니다.
보여주신 코드는 체점의 분리한점이 전혀 없으신 정말 훌륭한 코드입니다.체점은 코드가 아니라 제출한 답으로 하기 때문에 어떻게 작성하시든 전혀 상관 없으십니다.다만 시험때는 모든 코드를 다 외워가야하기 때문에 가급적 단순하게 코드를 작성하실 필요가 있습니다. 예를들어 변수명도 대소문자를 섞어쓴다던가 (예:Produced) 하면 아무래도 손이 더가고 오타가 나서 실행이 안될 수 있으니 그냥 단순하고 짧게 작성하시는걸 추천드립니다.
- 0
- 1
- 37
질문&답변
데이터 파일들은 어디서 다운받을 수 있나요?
(사진)네 ~ 답변드립니다. 말씀하신 subscribers.csv 는 구글 코렙에 위에 보이시는 코드를 실행하시면 바로 구글 코렙에 생성되어 지십니다. 위의 스크립트만 수행하시면 됩니다. ^^ 감사합니다.
- 0
- 2
- 44





![Thumbnail image of the 실무에서 바로 쓰는 SQL [SQL200제 저자 직강]](https://cdn.inflearn.com/public/courses/335513/cover/e2411bc7-040f-4c60-bbe9-2c254f0f8b18/335513.png?w=148)
![Thumbnail image of the [2025년 최신 기출 반영] 빅데이터 분석 기사 실기 시험 100% 합격 ! 기출 문제의 패턴이 보인다 !](https://cdn.inflearn.com/public/courses/335192/cover/99e36628-6e8d-4403-bfe3-7f5d5844aa9a/335192.jpg?w=148)