퀴즈 정답 & 해설 (15문항)
객관식 (Q1–Q7)
Q1. 파이썬의 기본 자료형이 아닌 것은?
필수
정답: D (char)
해설: 파이썬은 단일 문자 전용 타입이 없고, 길이 1의 문자열을 사용합니다. int/list/dict는 기본 자료형/컬렉션입니다.
Q2. 다음 파이썬 코드 실행 결과로 알맞은 것은?
필수
x = [1, 2, 3]
x.append(4)
print(len(x), x[-1])
Python
복사
정답: B (4 4)
해설: append(4) 후 리스트는 [1,2,3,4]. 길이는 4, 마지막 원소는 4입니다.
Q3. pandas 라이브러리를 pd라는 별칭으로 import했다고 가정할 때, CSV 파일 data.csv를 DataFrame으로 불러오는 올바른 코드는 무엇인가?
필수
정답: B (pd.read_csv("data.csv"))
해설: pandas의 파일 로딩 표준 함수는 read_csv입니다.
Q4. 다음 중 matplotlib로 선 그래프를 그릴 때 사용하는 함수는 무엇인가?
필수
정답: A (plt.plot())
해설: 선형 추이를 시각화할 때 사용합니다. plt.bar()는 막대, plt.show()는 출력.
Q5. Seaborn 라이브러리에 대한 설명으로 옳은 것은?
필수
정답: A (matplotlib 기반 시각화 라이브러리)
해설: seaborn은 고수준 인터페이스를 제공하며 pandas DataFrame과 궁합이 좋습니다.
Q6. 다음 중 age가 30 이상이고, city가 'Seoul' 또는 'Busan'인 행만 선택하는 올바른 코드는?
실전
정답: (B)
해설: pandas의 벡터화 조건 결합은 and/or가 아니라 & / | 를 쓰며, 각 조건에 괄호가 필요합니다. 불리언 마스크로 행 선택 시 .loc[mask] 또는 df[mask]를 사용합니다. .iloc는 정수 위치 인덱싱 전용입니다.
Q7. df에는 age, city, income 열이 있습니다. 다음 요구사항을 모두 만족하는 코드를 고르세요.
실전
조건
1.
age가 30~50세(포함)
2.
city가 'Seoul' 또는 'Busan'
3.
income이 결측이 아님
4.
열은 ['city','age','income']만 남긴다
5.
income 내림차순 정렬
6.
인덱스 리셋(drop=True)
정답: (B)
해설 포인트
•
판다스에서 벡터화 조건 결합은 and/or가 아니라 & / | 를 쓰며, 각 조건을 괄호로 감싸야 합니다.
•
between(30,50)는 포함 범위를 간단히 표현합니다.
•
결측 필터는 notna()(또는 notnull())가 정석입니다.
•
열 선택은 .loc[행조건, ['열들']] 형태가 안전합니다.
•
인덱스 리셋 시 drop=True 를 써야 기존 인덱스가 열로 남지 않습니다.
오답 설명
•
(A) and는 파이썬 스칼라 논리 연산자로, 시리즈 간 비교에 부적합 → ValueError. 그리고 reset_index()에 drop=True가 없어 요구 6 미충족.
•
(C) reset_index()에 drop=True가 없어 옛 인덱스가 열로 생김 → 요구 6 미충족.
•
(D) query 문법에서 income.notna()는 동작하지 않습니다(함수 호출 미지원). query를 쓸 경우 notna(income)처럼 특수 함수가 필요하지만 혼동되기 쉬워 본 문항에선 오답 처리.
주관식 (Q8–Q10)
Q8. 파이썬의 리스트(list)와 튜플(tuple)의 차이점을 설명하세요.
필수
모범답안 요지:
•
리스트는 가변(mutable), 대괄호 [] 사용, 원소 변경/추가 가능.
•
튜플은 불변(immutable), 소괄호 () 사용, 생성 후 원소 변경 불가.
•
용도: 리스트는 변경이 많은 데이터, 튜플은 고정된 레코드/키로 사용.
채점 포인트: 가변성/불변성 + 표기(괄호) + 대표적 용도 중 1개 이상 언급.
Q9. Pandas의 DataFrame이란 무엇이며, 어떤 용도로 사용되는지 설명하세요.
필수
모범답안 요지:
•
행과 열로 이루어진 2차원 표 형식 자료구조.
•
각 열은 서로 다른 자료형을 가질 수 있고 레이블(컬럼명/인덱스)을 가짐.
•
정제/선택/집계/결합/시각화 등 데이터 분석의 중심 객체.
채점 포인트: 2차원/표, 레이블, 다양한 연산(불러오기·선택·집계 등) 중 1개 이상.
Q10. Matplotlib에서 그래프의 제목을 설정할 때 사용하는 함수를 쓰세요.
필수
정답: plt.title("제목") (또는 객체지향 방식의 ax.set_title("제목")도 정답으로 인정)
해설: 상태기반(plt) 또는 객체지향(ax) 두 방식 모두 가능합니다.
코드 작성 (Q11–Q13)
Q11. 주어진 숫자 리스트([3, 1, 9, 2])에서 최댓값을 구하는 파이썬 코드를 작성하세요. (단, 내장 함수 max()는 사용하지 않습니다.)
필수
예시 정답:
def my_max(nums):
m = nums[0]
for n in nums[1:]:
if n > m:
m = n
return m
# 사용 예
# print(my_max([3, 1, 9, 2])) # 9
Python
복사
해설: 첫 원소를 기준으로 순차 비교하며 더 큰 값을 갱신합니다. (빈 리스트 예외처리는 확장 포인트)
Q12. DataFrame df에 '이름'과 '점수' 컬럼이 있습니다. 각 학생의 점수가 60점 이상이면 'Pass', 그렇지 않으면 'Fail' 값을 갖도록 '합격여부'라는 새로운 열을 추가하는 코드를 작성하세요. (apply 사용 권장)
실전
예시 정답 (순수 pandas):
df["합격여부"] = df["점수"].apply(lambda x: "Pass" if x >= 60 else "Fail")
Python
복사
대안 (numpy 사용):
import numpy as np
df["합격여부"] = np.where(df["점수"] >= 60, "Pass", "Fail")
Python
복사
해설: 조건식으로 새 컬럼을 생성합니다.
Q13. 아래와 같은 DataFrame과 컬럼들이 있을 때, 요구 사항을 만족하는 코드를 작성하세요.
도전
DataFrame: orders (컬럼: order_date(문자열 "YYYY-MM-DD"), amount(실수))
요구:
1.
order_date를 datetime으로 변환
2.
2024년 1분기(1~3월) 데이터만 필터링
3.
월(YYYY-MM) 기준 매출 합계 Series를 만들고 이름을 'revenue'로 지정
4.
월 오름차순으로 정렬하여 반환
orders["order_date"] = pd.to_datetime(orders["order_date"])
q1_2024 = orders[(orders["order_date"].dt.year == 2024) & (orders["order_date"].dt.quarter == 1)]
monthly_q1 = (q1_2024.groupby(q1_2024["order_date"].dt.strftime("%Y-%m"))["amount"]
.sum().sort_index().rename("revenue"))
Python
복사
해설 : 날짜 파싱 → 연/분기 필터 → 월 문자열로 그룹화 → 합계 → 정렬·이름 지정
SQL 문제 (Q14-Q15)
Q14. 아래 조건을 만족하는 SQL Query문을 작성하세요.
실전
테이블:
sales(order_id, order_date DATE, category VARCHAR(50), qty INT, price DECIMAL(10,2))
Plain Text
복사
요구: 카테고리별 2024년 총 매출(qty*price) 을 구해 매출 내림차순으로 정렬하세요.
SELECT
category,
SUM(qty * price) AS revenue
FROM sales
WHERE order_date >= '2024-01-01'
AND order_date < '2025-01-01'
GROUP BY category
ORDER BY revenue DESC;
SQL
복사
해설: 단일 테이블 집계 + 기간 필터. 연도 조건은 BETWEEN 대신 반개구간을 쓰면 월말 포함 이슈를 피할 수 있습니다.
Q15. 아래 조건을 만족하는 SQL Query문을 작성하세요.
실전
테이블:
customers(customer_id, name, city)
orders(order_id, customer_id, order_date DATE, amount DECIMAL(10,2))
Plain Text
복사
요구: 2024년 기준 도시(city)별 주문 건수(order_count)와 총매출(total_revenue)을 구하고, 총매출 내림차순, 같은 매출이면 주문건수 내림차순으로 정렬하세요.
SELECT
c.city,
COUNT(*) AS order_count,
SUM(o.amount) AS total_revenue
FROM customers AS c
JOIN orders AS o
ON c.customer_id = o.customer_id
WHERE o.order_date >= '2024-01-01'
AND o.order_date < '2025-01-01'
GROUP BY c.city
ORDER BY total_revenue DESC, order_count DESC;
SQL
복사
해설: 기본 조인 → 기간 필터 → 도시별 그룹화 → 집계(건수/합계).
