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