# B 卷实操题(模拟考) **考试时间**:120 分钟 **考试形式**:开卷 **总分**:70 分 **fingerprint**:`B-20260622-2503` --- ## ⚠️ 重要说明 - 本题所有代码、标注结果、图片都要上传到 **本仓库** 下 - **文件夹必须按下面要求** 的结构创建,否则不得分 - 数据爬取代码 **必须** 在一次爬取中获取到所有需要数据(数据刷新会变) --- ## 第Ⅱ部分 实操题 ### 一、数据爬取(25 分) **本题中涉及的爬虫代码必须包含检测头,同时由于网页刷新后数据会变化,必须在一次爬取中获取到所有需要数据,否则不得分。** #### 第 1 题(10 分) 用 python 代码访问网址 `https://exam.detr.top/exam-b/movies`,抓取网页的数据编号和其中全部 10 部电影的信息,并分别保存为两个文件: - `movies.json`(存放数据编号和电影信息,电影中包含的键为 `id, title, director, year, rating, duration, genre, actors_count`) - `movies.html`(保存原始网页源码) #### 第 2 题(15 分) 根据 `movies.json` 中的数据: 1. ① 找出评分最高和最低的电影,打印电影名 + 评分。 2. ② 统计各类型的电影数量,用字典格式输出。 3. ③ 统计各导演的电影数量,用字典格式输出。 4. ④ 统计 2020 年(含)以后上映的电影数量。 --- ### 二、数据标注(20 分) **本章中所有标注结果都需要导出文件,并上传到本仓库的 `q3` 文件夹下。每个小题单独放一个子文件夹。未按要求上传文件不得分。** #### 第 1 小题(8 分)— 图像目标检测标注 在 Label Studio 中打开图片 `data/images/标注练习1.jpg`(图片中含 1 只猫、1 只狗、1 辆车,背景为街道),使用 Rectangle Labels 工具标出 3 个目标物。要求: 1. (1)边界框必须紧贴目标物轮廓 2. (2)标签必须为 `cat`、`dog`、`car`(**必须小写英文**,不能写成"猫/狗/车"或"Cat/Dog/Car") 3. (3)导出为 YOLO 格式压缩包 4. (4)将压缩包命名为 `q3_1_image_labels.zip` 并上传到 `q3/q3_1/` 文件夹 5. (5)压缩包解压后必须包含 `classes.txt` 和 `labels/` 目录 #### 第 2 小题(7 分)— 文本情感分类标注 现有 5 条外卖评论文本 `data/reviews.json`,用 Label Studio 完成情感分类标注(标签:正面/负面),导出为 JSON 格式。要求: 1. (1)标注必须包含每条评论的 `id` 和 `text` 字段 2. (2)每个标注必须有一个 `sentiment` 字段,值为 `"正面"` 或 `"负面"` 3. (3)5 条评论必须全部标注 4. (4)将导出文件命名为 `q3_2_takeout_reviews.json` 并上传到 `q3/q3_2/` 文件夹 #### 第 3 小题(5 分)— 标注质量自评 在 `q3` 文件夹下新建 `q3_3_质量自评.md` 文件,写一份 200 字左右的标注质量自评报告,内容包括: 1. (1)标注前准备 —— 你制定了什么标注规范?看了几张示例图片?(2 分) 2. (2)标注过程 —— 遇到什么困难?如何解决?中途不确定的标注如何处理?(2 分) 3. (3)标注后检查 —— 做了哪些检查?是否导入了多份相同数据互相对比?(1 分) --- ### 三、数据可视化(25 分) **本章所有图表都要用 matplotlib 绘制,PNG 文件必须用 `plt.savefig` 保存。所有 Python 代码和 PNG 文件都需要上传到本仓库的 `q4` 文件夹下,每个小题单独一个子文件夹。** #### 第 1 小题(8 分)— 柱状图 从 `movies.json`(本卷第 II 部分保存的 `movies.json`)读取数据,用 matplotlib 绘制**各类型的电影数量柱状图**。要求: 1. (1)使用 `plt.bar` 函数绘制柱状图 2. (2)X 轴为类型名称 3. (3)Y 轴为电影数量 4. (4)标题设置为"类型电影数量分布"(用 `plt.title`) 5. (5)保存为 `q4_1_bar.png`(用 `plt.savefig`,`dpi=150`) 6. (6)Python 代码保存为 `q4_1.py` #### 第 2 小题(7 分)— 散点图 从 `movies.json` 读取数据,用 matplotlib 绘制**评分 vs 时长散点图**。要求: 1. (1)使用 `plt.scatter` 函数绘制散点图 2. (2)X 轴为时长(分钟),Y 轴为评分 3. (3)标题设置为"时长与评分关系散点图"(用 `plt.title`) 4. (4)使用 `plt.xlabel` 和 `plt.ylabel` 设置轴标签 5. (5)点的颜色设为红色,`alpha=0.6`(半透明) 6. (6)保存为 `q4_2_scatter.png`(用 `plt.savefig`,`dpi=150`) 7. (7)Python 代码保存为 `q4_2.py` #### 第 3 小题(10 分)— 直方图 从 `movies.json` 读取数据,绘制**两张独立的直方图**: - **(A)评分直方图(5 分)**:使用 `plt.hist` 函数绘制 10 部电影评分字段的分布直方图,`bins=5`,颜色蓝色,标题"评分分布"(用 `plt.title`),X 轴标签"评分"(用 `plt.xlabel`),保存为 `q4_3a_hist.png`(`dpi=150`),代码保存为 `q4_3a.py` - **(B)时长直方图(5 分)**:使用 `plt.hist` 函数绘制 10 部电影时长字段的分布直方图,`bins=5`,颜色绿色,标题"时长分布",X 轴标签"时长(分钟)",保存为 `q4_3b_hist.png`(`dpi=150`),代码保存为 `q4_3b.py` --- ## 📁 仓库文件夹结构(必须按这个提交) ``` {学号}/simulated-examination/ ├── q2_1_crawler/ │ ├── q2_1.py # 数据爬取第 1 题代码 │ ├── q2_2.py # 数据爬取第 2 题代码 │ ├── movies.json # 爬取结果(由 q2_1.py 生成) │ └── movies.html # 原始网页(由 q2_1.py 生成) ├── q3/ │ ├── q3_1/ │ │ └── q3_1_image_labels.zip # 图像标注 YOLO 导出 │ ├── q3_2/ │ │ └── q3_2_takeout_reviews.json # 文本标注 JSON 导出 │ └── q3_3_质量自评.md ├── q4/ │ ├── q4_1/ │ │ ├── q4_1.py # 柱状图代码 │ │ └── q4_1_bar.png # 柱状图结果 │ ├── q4_2/ │ │ ├── q4_2.py # 散点图代码 │ │ └── q4_2_scatter.png # 散点图结果 │ ├── q4_3a/ │ │ ├── q4_3a.py # 评分直方图代码 │ │ └── q4_3a_hist.png # 评分直方图结果 │ ├── q4_3b/ │ │ ├── q4_3b.py # 时长直方图代码 │ │ └── q4_3b_hist.png # 时长直方图结果 ``` --- ## 🔑 改卷辅助信息(用于自动/半自动判分) 为了让老师能快速改卷,**建议在每个 Python 代码文件开头注释里写上学号**: ```python # 学号: 2509165001 # 姓名: 张三 ``` 并且把以下信息也一起附上: - **代码里的 `print` 输出**(最终结果截图或粘贴到 README) - **关键统计值**(手写在 `README.md` 末尾的"答题结果"部分): ```markdown ## 答题结果 - 评分最高: 《xxx》9.3 分 - 评分最低: 《xxx》6.3 分 - 各类型数量: {'爱情': 3, '动画': 2, ...} - 各导演数量: {'Christopher Nolan': 2, ...} - 2020 年后电影数量: 3 ``` --- ## 提交方式 1. 在本仓库下**按上面的文件夹结构**创建目录 2. 依次完成 3 大题的所有小题 3. 每完成一题就 `git add` + `git commit` + `git push` 到本仓库 4. 考试结束时**最后一次 commit 时间**视为交卷时间