2026.06.17. 빅데이터 실습형 수행평가 예상문제
Claude Opus 4.6
빅데이터 분석 실습형 수행평가 - 유력 문제 정리
기본 제공 코드 (시험지에 주어짐)
import pandas as pd iphone_df = pd.read_csv('iphone.csv', index_col=0) laptops_df = pd.read_csv('laptops.csv')
iphone.csv 데이터 구조
| (인덱스) | 출시일 | 디스플레이 | 메모리 | 출시 버전 | Face ID |
|---------------|-------------|-----------|--------|-----------|---------|
| iPhone 7 | 2016-09-16 | 4.7 | 2GB | iOS 10.0 | No |
| iPhone 7 Plus | 2016-09-16 | 5.5 | 3GB | iOS 10.0 | No |
| iPhone 8 | 2017-09-22 | 4.7 | 2GB | iOS 11.0 | No |
| iPhone 8 Plus | 2017-09-22 | 5.5 | 3GB | iOS 11.0 | No |
| iPhone X | 2017-11-03 | 5.8 | 3GB | iOS 11.1 | Yes |
| iPhone XS | 2018-09-21 | 5.8 | 4GB | iOS 12.0 | Yes |
| iPhone XS Max | 2018-09-21 | 6.5 | 4GB | iOS 12.0 | Yes |
laptops.csv 컬럼 (167행, 인덱스 없음 = 정수 인덱스)
brand, model, ram, hd_type, hd_size, screen_size, price, processor_brand, processor_model, clock_speed, graphic_card_brand, graphic_card_size, os, weight, comments
문제 1번 — 데이터프레임 조회하기 (p.7~9, 대상 값 변형)
핵심 개념:
df.loc['행이름'],df['컬럼명'],df[['컬럼1','컬럼2']],df.loc[['행1','행2']]
유력 문제 1-1: 특정 행(Row) 조회
# Q: iPhone XS의 모든 정보를 조회하시오. iphone_df.loc['iPhone XS']
출시일 2018-09-21
디스플레이 5.8
메모리 4GB
출시 버전 iOS 12.0
Face ID Yes
Name: iPhone XS, dtype: object
유력 문제 1-2: 여러 행 조회
# Q: iPhone 8과 iPhone XS Max의 정보를 조회하시오. iphone_df.loc[['iPhone 8', 'iPhone XS Max']]
출시일 디스플레이 메모리 출시 버전 Face ID
iPhone 8 2017-09-22 4.7 2GB iOS 11.0 No
iPhone XS Max 2018-09-21 6.5 4GB iOS 12.0 Yes
유력 문제 1-3: 특정 컬럼 조회
# Q: 메모리 컬럼만 조회하시오. iphone_df['메모리']
유력 문제 1-4: 여러 컬럼 조회
# Q: Face ID와 출시일, 메모리 컬럼을 조회하시오. iphone_df[['Face ID', '출시일', '메모리']]
⚠️ 주의 (수업에서 다룬 오류 패턴)
# ✗ 틀린 코드 — loc[행, 열] 구조에서 열 자리에 행 이름을 넣으면 오류 iphone_df.loc[['iPhone X'], ['iPhone 8']] # KeyError 발생! # ✓ 올바른 코드 — 두 행을 동시에 조회 iphone_df.loc[['iPhone X', 'iPhone 8']]
문제 2번 — 조건에 맞는 데이터프레임 조회 (p.10~11, Boolean 활용, 그대로)
핵심 개념:
df[조건],&(AND),|(OR), Boolean(True/False) 필터링
유력 문제 2-1: 단일 조건 필터링
# Q: Face ID가 'Yes'인 제품만 조회하시오. iphone_df[iphone_df['Face ID'] == 'Yes']
출시일 디스플레이 메모리 출시 버전 Face ID
iPhone X 2017-11-03 5.8 3GB iOS 11.1 Yes
iPhone XS 2018-09-21 5.8 4GB iOS 12.0 Yes
iPhone XS Max 2018-09-21 6.5 4GB iOS 12.0 Yes
유력 문제 2-2: 복합 조건 필터링 (AND)
# Q: 출시일이 '2017-01-01'보다 크고, Face ID가 'Yes'인 제품을 조회하시오. iphone_df[(iphone_df['출시일'] > '2017-01-01') & (iphone_df['Face ID'] == 'Yes')]
유력 문제 2-3: Boolean 시리즈 확인
# Q: 디스플레이가 5.5 이상인 제품의 Boolean 값을 확인하시오. iphone_df['디스플레이'] >= 5.5
iPhone 7 False
iPhone 7 Plus True
iPhone 8 False
iPhone 8 Plus True
iPhone X True
iPhone XS True
iPhone XS Max True
Name: 디스플레이, dtype: bool
유력 문제 2-4: laptops_df에서 조건 필터링
# Q: laptops_df에서 os가 'mac'이고 clock_speed가 2.9인 제품의 model과 price를 조회하시오. laptops_df.loc[(laptops_df['os'] == 'mac') & (laptops_df['clock_speed'] == 2.9), ['model', 'price']]
문제 3번 — iloc + 슬라이싱 (p.15~18, 대상 값 변형)
핵심 개념:
df.iloc[행번호],df.iloc[시작:끝],df.iloc[행, 열], 슬라이싱은 끝 번호 미포함
유력 문제 3-1: 단일 행 iloc 조회
# Q: iphone_df의 3번째 행(인덱스 2)을 조회하시오. iphone_df.iloc[2]
출시일 2017-09-22
디스플레이 4.7
메모리 2GB
출시 버전 iOS 11.0
Face ID No
Name: iPhone 8, dtype: object
유력 문제 3-2: 슬라이싱으로 범위 조회
# Q: iphone_df의 2번째~4번째 행을 조회하시오. (인덱스 1~3) iphone_df.iloc[1:4]
출시일 디스플레이 메모리 출시 버전 Face ID
iPhone 7 Plus 2016-09-16 5.5 3GB iOS 10.0 No
iPhone 8 2017-09-22 4.7 2GB iOS 11.0 No
iPhone 8 Plus 2017-09-22 5.5 3GB iOS 11.0 No
유력 문제 3-3: 행과 열 동시 슬라이싱
# Q: iphone_df의 0~2번째 행, 0~1번째 열을 조회하시오. iphone_df.iloc[0:3, 0:2]
출시일 디스플레이
iPhone 7 2016-09-16 4.7
iPhone 7 Plus 2016-09-16 5.5
iPhone 8 2017-09-22 4.7
유력 문제 3-4: 특정 위치의 값 조회
# Q: iphone_df의 4번째 행, 3번째 열의 값을 조회하시오. iphone_df.iloc[3, 2]
'3GB'
유력 문제 3-5: 역방향 슬라이싱
# Q: iphone_df의 마지막 3개 행을 조회하시오. iphone_df.iloc[-3:]
문제 4번 — 컬럼 값 변경하기 (p.20, 그대로)
핵심 개념:
df.loc['행', '열'] = 값, 조건 기반 값 변경
유력 문제 4-1: 특정 셀 값 변경
# Q: iPhone X의 출시일을 '2017-01-01'로, 디스플레이를 5.0으로, 메모리를 '4GB'로, 출시 버전을 'iOS 11.1.1'로 변경하시오. iphone_df.loc['iPhone X'] = ['2017-01-01', 5.0, '4GB', 'iOS 11.1.1', 'Yes'] iphone_df
유력 문제 4-2: 조건에 맞는 행 전체 값 변경
# Q: 출시일이 '2017-01-01' 이후이고 Face ID가 'Yes'인 제품의 모든 값을 'V'로 변경하시오. iphone_df[(iphone_df['출시일'] > '2017-01-01') & (iphone_df['Face ID'] == 'Yes')] = 'V' iphone_df
문제 5번 — 새로운 인덱스(행) 추가하기 (p.26, 그대로)
핵심 개념:
df.loc['새행이름'] = [값1, 값2, ...]
유력 문제 5-1
# Q: iPhone 11이라는 새로운 행을 추가하시오. (출시일: 2019-09-20, 디스플레이: 6.1, 메모리: 4GB, 출시 버전: iOS 13.0, Face ID: Yes) iphone_df.loc['iPhone 11'] = ['2019-09-20', 6.1, '4GB', 'iOS 13.0', 'Yes'] iphone_df
문제 6번 — 새로운 컬럼 추가하기 (p.26, 그대로)
핵심 개념:
df['새컬럼'] = 값(모든 행에 동일 값 적용)
유력 문제 6-1
# Q: '제조사'라는 새로운 컬럼을 추가하고, 모든 값을 'Apple'로 설정하시오. iphone_df['제조사'] = 'Apple' iphone_df
문제 7번 — 기존 인덱스(행) 삭제하기 (p.27, 그대로)
핵심 개념:
df.drop('행이름', axis='index', inplace=True/False)
inplace=False→ 원본 변경 안 됨 (결과만 반환)
inplace=True→ 원본 자체가 변경됨
유력 문제 7-1: 단일 행 삭제
# Q: iPhone 7 Plus 행을 삭제하시오. (원본 변경) iphone_df.drop('iPhone 7 Plus', axis='index', inplace=True) iphone_df
유력 문제 7-2: 여러 행 삭제
# Q: iPhone 7, iPhone 8, iPhone X 행을 삭제하시오. (원본 변경) iphone_df.drop(['iPhone 7', 'iPhone 8', 'iPhone X'], axis='index', inplace=True) iphone_df
문제 8번 — 기존 컬럼 삭제하기 (p.28, 그대로)
핵심 개념:
df.drop('컬럼명', axis='columns', inplace=True/False)
유력 문제 8-1: 단일 컬럼 삭제
# Q: '출시 버전' 컬럼을 삭제하시오. (원본 변경 없이) iphone_df.drop('출시 버전', axis='columns', inplace=False)
유력 문제 8-2: 여러 컬럼 삭제
# Q: '출시일'과 '출시 버전' 컬럼을 삭제하시오. (원본 변경) iphone_df.drop(['출시일', '출시 버전'], axis='columns', inplace=True) iphone_df
문제 9번 — 컬럼명 변경하기 (p.30, 그대로)
핵심 개념:
df.rename(columns={'기존명': '새이름'}, inplace=True/False)
유력 문제 9-1
# Q: 'Face ID' 컬럼명을 '페이스ID'로 변경하시오. iphone_df.rename(columns={'Face ID': '페이스ID'}, inplace=True) iphone_df
유력 문제 9-2: 여러 컬럼명 동시 변경
# Q: '출시일'을 'release_date', '메모리'를 'memory'로 변경하시오. iphone_df.rename(columns={'출시일': 'release_date', '메모리': 'memory'}, inplace=True) iphone_df
문제 10번 — 특정 컬럼 기준 정렬 (p.36, 그대로)
핵심 개념:
df.sort_values(by='컬럼명', ascending=True/False)
ascending=True→ 오름차순 (기본값)
ascending=False→ 내림차순
유력 문제 10-1: 오름차순 정렬
# Q: iphone_df를 디스플레이 기준 오름차순으로 정렬하시오. iphone_df.sort_values(by='디스플레이', ascending=True)
유력 문제 10-2: 내림차순 정렬
# Q: iphone_df를 출시일 기준 내림차순으로 정렬하시오. iphone_df.sort_values(by='출시일', ascending=False)
유력 문제 10-3: laptops_df 정렬
# Q: laptops_df를 price 기준 내림차순으로 정렬하시오. laptops_df.sort_values(by='price', ascending=False)
문제 11-12번 - 비공개 문제 (p.34-41, 대상 값 변형)
핵심 개념 추정: p.34~41은 통계함수 / 데이터 탐색 범위로 추정됨.
수업 ipynb에서 해당 범위에서 다룬 내용:
value_counts(),describe(),unique(),max(),min(),mean(),std(),count(),head(),tail()
유력 문제 11-1: value_counts()
# Q: laptops_df에서 brand 컬럼의 각 값별 개수를 확인하시오. laptops_df['brand'].value_counts()
brand
HP 55
Acer 35
Dell 31
Lenovo 18
Asus 9
Apple 7
Alienware 6
Microsoft 6
Name: count, dtype: int64
유력 문제 11-2: unique()
# Q: laptops_df에서 brand 컬럼의 고유값(종류)을 확인하시오. laptops_df['brand'].unique()
array(['Dell', 'Apple', 'Acer', 'HP', 'Lenovo', 'Alienware', 'Microsoft', 'Asus'], dtype=object)
유력 문제 11-3: describe()
# Q: laptops_df에서 brand 컬럼의 기술통계를 확인하시오. laptops_df['brand'].describe()
count 167
unique 8
top HP
freq 55
Name: brand, dtype: object
유력 문제 12-1: 수치 통계 함수
# Q: laptops_df에서 price 컬럼의 최대값, 최소값, 평균값을 구하시오. print(laptops_df['price'].max()) # 226000 print(laptops_df['price'].min()) # 13872 print(laptops_df['price'].mean()) # 64132.898...
유력 문제 12-2: 복합 조건 + 통계
# Q: laptops_df에서 processor_model이 'i5'이고 hd_type이 'ssd'인 제품의 개수를 구하시오. ((laptops_df['processor_model'] == 'i5') & (laptops_df['hd_type'] == 'ssd')).value_counts()
False 149
True 18
Name: count, dtype: int64
유력 문제 12-3: 정렬 + head 조합
# Q: laptops_df를 price 기준 내림차순 정렬 후 상위 10개를 조회하시오. laptops_df.sort_values('price', ascending=False).head(10)
유력 문제 12-4: ram별 개수
# Q: laptops_df에서 ram 컬럼의 각 값별 개수를 확인하시오. laptops_df['ram'].value_counts()
ram
8 69
4 68
16 17
2 10
12 3
Name: count, dtype: int64
📌 핵심 정리 — 자주 혼동하는 포인트
loc vs iloc
| 구분 | loc | iloc |
|------|-----|------|
| 기준 | 이름(라벨) 기반 | 정수 위치(번호) 기반 |
| 예시 | df.loc['iPhone X'] | df.iloc[4] |
| 슬라이싱 끝값 | 포함 | 미포함 |
drop에서 axis 값
| axis 값 | 의미 |
|----------|------|
| axis='index' 또는 axis=0 | 행 삭제 |
| axis='columns' 또는 axis=1 | 열 삭제 |
inplace 매개변수
| inplace 값 | 의미 |
|-------------|------|
| inplace=False (기본값) | 원본 변경 안 됨, 결과만 반환 |
| inplace=True | 원본 자체가 변경됨 |
Boolean 조건 결합 연산자
| 연산자 | 의미 | 주의사항 |
|--------|------|----------|
| & | AND (둘 다 만족) | 각 조건을 ()로 묶어야 함 |
| \| | OR (하나만 만족) | 각 조건을 ()로 묶어야 함 |
sort_values ascending
| ascending 값 | 의미 |
|---------------|------|
| True (기본값) | 오름차순 (작은→큰) |
| False | 내림차순 (큰→작은) |
📎 출처 — 문제별 근거 ipynb 파일
| 문제 | 주제 | 출처 ipynb |
|------|------|-----------|
| 1번 | loc / df['컬럼'] 조회 | 20260331tue_0.ipynb, 20260401wed_0.ipynb |
| 2번 | Boolean 조건 필터링 | 20260519tue_0.ipynb |
| 3번 | iloc + 슬라이싱 | 20260414tue_0.ipynb, 20260421tue_0.ipynb |
| 4번 | 컬럼 값 변경 | 20260519tue_0.ipynb |
| 5번 | 새 행(인덱스) 추가 | 20260519tue_0.ipynb |
| 6번 | 새 컬럼 추가 | 20260519tue_0.ipynb |
| 7번 | 행 삭제 (drop, axis='index') | 20260519tue_0.ipynb |
| 8번 | 컬럼 삭제 (drop, axis='columns') | 20260519tue_0.ipynb |
| 9번 | 컬럼명 변경 (rename) | 20260526tue_0.ipynb |
| 10번 | 정렬 (sort_values) | 20260527wed_0.ipynb |
| 11번 | 비공개 - 통계함수 추정 (value_counts, unique, describe) | 20260527wed_0.ipynb |
| 12번 | 비공개 - 수치통계 추정 (max, min, mean, std, count) | 20260527wed_0.ipynb |
참고: 모든 유력 문제는 위 ipynb 수업 파일에서 실제로 실행된 코드만을 근거로 작성되었습니다. 수업에서 다루지 않은 내용은 포함하지 않았습니다.
Generated by Claude Opus 4.6 in Antigravity IDE