完成
This commit is contained in:
156
README.md
156
README.md
@@ -1,156 +0,0 @@
|
|||||||
<!--
|
|
||||||
用途: 模拟考试实操题(2026-06-23)
|
|
||||||
说明: 这是模拟考试,所有代码提交到这个仓库
|
|
||||||
-->
|
|
||||||
|
|
||||||
# 模拟考试(实操题)
|
|
||||||
|
|
||||||
**考试时间**:90 分钟(2 课时)
|
|
||||||
**考试形式**:开卷
|
|
||||||
**总分**:70 分
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚠️ 重要说明
|
|
||||||
|
|
||||||
- 本题所有代码、标注结果、图片都要上传到 **本仓库** 下
|
|
||||||
- **文件夹必须按下面要求** 的结构创建,否则不得分
|
|
||||||
- 数据爬取代码 **必须** 在一次爬取中获取到所有需要数据(数据刷新会变)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 第Ⅱ部分 实操题
|
|
||||||
|
|
||||||
### 一、数据爬取(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/
|
|
||||||
├── data/ # 模拟考数据(已上传)
|
|
||||||
│ ├── images/
|
|
||||||
│ │ └── 标注练习1.jpg
|
|
||||||
│ └── reviews.json
|
|
||||||
├── 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 # 时长直方图结果
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 提交方式
|
|
||||||
|
|
||||||
1. 在本仓库下**按上面的文件夹结构**创建目录
|
|
||||||
2. 依次完成 3 大题的所有小题
|
|
||||||
3. 每完成一题就 `git add` + `git commit` + `git push` 到本仓库
|
|
||||||
4. 考试结束时**最后一次 commit 时间**视为交卷时间
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
102
q2_1_crawler/move.html
Normal file
102
q2_1_crawler/move.html
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"title": "泰坦尼克号",
|
||||||
|
"director": "Frank Darabont",
|
||||||
|
"year": "2015",
|
||||||
|
"rating": "6.8",
|
||||||
|
"duration": "91",
|
||||||
|
"genre": "科幻",
|
||||||
|
"actors_count": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"title": "星际穿越",
|
||||||
|
"director": "陈凯歌",
|
||||||
|
"year": "2021",
|
||||||
|
"rating": "6.2",
|
||||||
|
"duration": "113",
|
||||||
|
"genre": "科幻",
|
||||||
|
"actors_count": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3",
|
||||||
|
"title": "三傻大闹宝莱坞",
|
||||||
|
"director": "Robert Zemeckis",
|
||||||
|
"year": "2004",
|
||||||
|
"rating": "7.4",
|
||||||
|
"duration": "95",
|
||||||
|
"genre": "悬疑",
|
||||||
|
"actors_count": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4",
|
||||||
|
"title": "阿甘正传",
|
||||||
|
"director": "James Cameron",
|
||||||
|
"year": "2013",
|
||||||
|
"rating": "6.9",
|
||||||
|
"duration": "93",
|
||||||
|
"genre": "爱情",
|
||||||
|
"actors_count": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "5",
|
||||||
|
"title": "放牛班的春天",
|
||||||
|
"director": "宫崎骏",
|
||||||
|
"year": "2005",
|
||||||
|
"rating": "7.1",
|
||||||
|
"duration": "127",
|
||||||
|
"genre": "悬疑",
|
||||||
|
"actors_count": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "6",
|
||||||
|
"title": "千与千寻",
|
||||||
|
"director": "Christopher Nolan",
|
||||||
|
"year": "2024",
|
||||||
|
"rating": "6.4",
|
||||||
|
"duration": "147",
|
||||||
|
"genre": "动画",
|
||||||
|
"actors_count": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "7",
|
||||||
|
"title": "忠犬八公的故事",
|
||||||
|
"director": "Lasse Hallström",
|
||||||
|
"year": "2002",
|
||||||
|
"rating": "6.2",
|
||||||
|
"duration": "166",
|
||||||
|
"genre": "剧情",
|
||||||
|
"actors_count": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8",
|
||||||
|
"title": "霸王别姬",
|
||||||
|
"director": "Rajkumar Hirani",
|
||||||
|
"year": "2005",
|
||||||
|
"rating": "7.9",
|
||||||
|
"duration": "149",
|
||||||
|
"genre": "冒险",
|
||||||
|
"actors_count": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "9",
|
||||||
|
"title": "肖申克的救赎",
|
||||||
|
"director": "Christophe Barratier",
|
||||||
|
"year": "2008",
|
||||||
|
"rating": "9.3",
|
||||||
|
"duration": "91",
|
||||||
|
"genre": "冒险",
|
||||||
|
"actors_count": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "10",
|
||||||
|
"title": "盗梦空间",
|
||||||
|
"director": "Christopher Nolan",
|
||||||
|
"year": "2019",
|
||||||
|
"rating": "7.1",
|
||||||
|
"duration": "132",
|
||||||
|
"genre": "剧情",
|
||||||
|
"actors_count": "5"
|
||||||
|
}
|
||||||
|
]
|
||||||
102
q2_1_crawler/movie.json
Normal file
102
q2_1_crawler/movie.json
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"title": "泰坦尼克号",
|
||||||
|
"director": "Frank Darabont",
|
||||||
|
"year": "2015",
|
||||||
|
"rating": "6.8",
|
||||||
|
"duration": "91",
|
||||||
|
"genre": "科幻",
|
||||||
|
"actors_count": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"title": "星际穿越",
|
||||||
|
"director": "陈凯歌",
|
||||||
|
"year": "2021",
|
||||||
|
"rating": "6.2",
|
||||||
|
"duration": "113",
|
||||||
|
"genre": "科幻",
|
||||||
|
"actors_count": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3",
|
||||||
|
"title": "三傻大闹宝莱坞",
|
||||||
|
"director": "Robert Zemeckis",
|
||||||
|
"year": "2004",
|
||||||
|
"rating": "7.4",
|
||||||
|
"duration": "95",
|
||||||
|
"genre": "悬疑",
|
||||||
|
"actors_count": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4",
|
||||||
|
"title": "阿甘正传",
|
||||||
|
"director": "James Cameron",
|
||||||
|
"year": "2013",
|
||||||
|
"rating": "6.9",
|
||||||
|
"duration": "93",
|
||||||
|
"genre": "爱情",
|
||||||
|
"actors_count": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "5",
|
||||||
|
"title": "放牛班的春天",
|
||||||
|
"director": "宫崎骏",
|
||||||
|
"year": "2005",
|
||||||
|
"rating": "7.1",
|
||||||
|
"duration": "127",
|
||||||
|
"genre": "悬疑",
|
||||||
|
"actors_count": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "6",
|
||||||
|
"title": "千与千寻",
|
||||||
|
"director": "Christopher Nolan",
|
||||||
|
"year": "2024",
|
||||||
|
"rating": "6.4",
|
||||||
|
"duration": "147",
|
||||||
|
"genre": "动画",
|
||||||
|
"actors_count": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "7",
|
||||||
|
"title": "忠犬八公的故事",
|
||||||
|
"director": "Lasse Hallström",
|
||||||
|
"year": "2002",
|
||||||
|
"rating": "6.2",
|
||||||
|
"duration": "166",
|
||||||
|
"genre": "剧情",
|
||||||
|
"actors_count": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8",
|
||||||
|
"title": "霸王别姬",
|
||||||
|
"director": "Rajkumar Hirani",
|
||||||
|
"year": "2005",
|
||||||
|
"rating": "7.9",
|
||||||
|
"duration": "149",
|
||||||
|
"genre": "冒险",
|
||||||
|
"actors_count": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "9",
|
||||||
|
"title": "肖申克的救赎",
|
||||||
|
"director": "Christophe Barratier",
|
||||||
|
"year": "2008",
|
||||||
|
"rating": "9.3",
|
||||||
|
"duration": "91",
|
||||||
|
"genre": "冒险",
|
||||||
|
"actors_count": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "10",
|
||||||
|
"title": "盗梦空间",
|
||||||
|
"director": "Christopher Nolan",
|
||||||
|
"year": "2019",
|
||||||
|
"rating": "7.1",
|
||||||
|
"duration": "132",
|
||||||
|
"genre": "剧情",
|
||||||
|
"actors_count": "5"
|
||||||
|
}
|
||||||
|
]
|
||||||
65
q2_1_crawler/q2_1.py
Normal file
65
q2_1_crawler/q2_1.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import requests
|
||||||
|
from bs4 import BeautifulSoup as bs
|
||||||
|
import json
|
||||||
|
|
||||||
|
url = 'https://exam.detr.top/exam-b/movies'
|
||||||
|
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0',
|
||||||
|
'Referer':'https://exam.detr.top/exam-b/movies'}
|
||||||
|
req = requests.get(url, headers=headers)
|
||||||
|
req.encoding="utf-8"
|
||||||
|
|
||||||
|
data=[]
|
||||||
|
|
||||||
|
soup=bs(req.text,"html.parser")
|
||||||
|
# print(soup)
|
||||||
|
#id, title, director, year, rating, duration, genre, actors_count
|
||||||
|
|
||||||
|
item=soup.select("table tbody tr" )
|
||||||
|
movie_list=[]
|
||||||
|
|
||||||
|
for tr in item:
|
||||||
|
tds=tr.find_all("td")
|
||||||
|
tds=list(tds)
|
||||||
|
# print(tds)
|
||||||
|
if len(tds)<8:
|
||||||
|
continue
|
||||||
|
movie={
|
||||||
|
"id":tds[0].get_text(strip=True),
|
||||||
|
"title":tds[1].get_text(strip=True),
|
||||||
|
"director":tds[2].get_text(strip=True),
|
||||||
|
"year":tds[3].get_text(strip=True),
|
||||||
|
"rating":tds[4].get_text(strip=True),
|
||||||
|
"duration":tds[5].get_text(strip=True),
|
||||||
|
"genre":tds[6].get_text(strip=True),
|
||||||
|
"actors_count":tds[7].get_text(strip=True)
|
||||||
|
}
|
||||||
|
movie_list.append(movie)
|
||||||
|
print(movie_list)
|
||||||
|
|
||||||
|
|
||||||
|
with open('movie.json', 'w', encoding='utf-8') as f:
|
||||||
|
json.dump(movie_list, f, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
with open("move.html","w",encoding='utf-8') as f:
|
||||||
|
json.dump(movie_list, f, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# for i in range(len(items)):
|
||||||
|
# rank=i+1
|
||||||
|
# title=items[i].find("span",class_="title").get_text()
|
||||||
|
# actors=items[i].find("div",class_="bd").get_text().strip()
|
||||||
|
# try:
|
||||||
|
# actors=actors.split("主演:")[1].split("\n")[0]
|
||||||
|
# except:
|
||||||
|
# actors="无"
|
||||||
|
# quote=items[i].find("p",class_="quote").get_text().strip()
|
||||||
|
|
||||||
|
# data.append({
|
||||||
|
# "rank":rank,
|
||||||
|
# "title":title,
|
||||||
|
# "actors":actors,
|
||||||
|
# "quote":quote
|
||||||
|
# })
|
||||||
43
q2_1_crawler/q2_2.py
Normal file
43
q2_1_crawler/q2_2.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# ① 找出评分最高和最低的电影,打印电影名 + 评分。
|
||||||
|
# ② 统计各类型的电影数量,用字典格式输出。
|
||||||
|
# ③ 统计各导演的电影数量,用字典格式输出。
|
||||||
|
# ④ 统计 2020 年(含)以后上映的电影数量。
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
with open('movie.json', 'r', encoding='utf-8') as f:
|
||||||
|
data=json.load(f)
|
||||||
|
# print(data)
|
||||||
|
|
||||||
|
|
||||||
|
sort_movie=sorted(data,key=lambda x:x["rating"])
|
||||||
|
min=sort_movie[0]
|
||||||
|
max=sort_movie[-1]
|
||||||
|
print("评分最低的电影",min["title"],min["rating"])
|
||||||
|
print("评分最高的电影",max["title"],max["rating"])
|
||||||
|
|
||||||
|
genre_shu={}
|
||||||
|
for g in data:
|
||||||
|
ge=g["genre"]
|
||||||
|
if ge in genre_shu:
|
||||||
|
genre_shu[ge]+=1
|
||||||
|
else:
|
||||||
|
genre_shu[ge]=1
|
||||||
|
print("各类型的电影数量",genre_shu)
|
||||||
|
|
||||||
|
director_shu={}
|
||||||
|
for d in data:
|
||||||
|
di=d["director"]
|
||||||
|
if di in director_shu:
|
||||||
|
director_shu[di]+=1
|
||||||
|
else:
|
||||||
|
director_shu[di]=1
|
||||||
|
print("各导演的电影数量",director_shu)
|
||||||
|
|
||||||
|
a=0
|
||||||
|
for y in data:
|
||||||
|
if int(y["year"]) >= 2020:
|
||||||
|
a+=1
|
||||||
|
print("2020 年(含)以后上映的电影数量",a)
|
||||||
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
BIN
q3/q3_1/q3_1_image_label.zip
Normal file
BIN
q3/q3_1/q3_1_image_label.zip
Normal file
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
1
q3/q3_2/q3_2_takeout_reviews.json
Normal file
1
q3/q3_2/q3_2_takeout_reviews.json
Normal file
File diff suppressed because one or more lines are too long
13
q3/q3_3_质量自评.md
Normal file
13
q3/q3_3_质量自评.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
1.标注前准备:
|
||||||
|
在图片标注中
|
||||||
|
(1)边界框必须紧贴目标物轮廓
|
||||||
|
(2)标签必须为 cat、dog、car(必须小写英文,不能写成"猫/狗/车"或"Cat/Dog/Car")
|
||||||
|
在文本标注中
|
||||||
|
(1)标注必须包含每条评论的 id 和 text 字段
|
||||||
|
(2)每个标注必须有一个 sentiment 字段,值为 "正面" 或 "负面"
|
||||||
|
2.标注过程
|
||||||
|
在图像的标注中,边界框内的留白较多,解决方法:最大限度地贴近目标轮廓
|
||||||
|
在文本的标注中,可能会遇到情感模糊的问题,解决办法:抓住关键词进行标注。
|
||||||
|
3.标注后检查
|
||||||
|
在图像标注中,再次检查边界框与目标轮廓是否贴合,检查导出的 yolo 文件内容是否完整
|
||||||
|
在文本标注中,对照关键词检查情感是否判断正确,检查导出的 json文件内容是否完整
|
||||||
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
33
q4/q4_1/q4_1.py
Normal file
33
q4/q4_1/q4_1.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
with open('movie.json', 'r', encoding='utf-8') as f:
|
||||||
|
data=json.load(f)
|
||||||
|
# print(data)
|
||||||
|
|
||||||
|
genre_shu={}
|
||||||
|
for g in data:
|
||||||
|
ge=g["genre"]
|
||||||
|
if ge in genre_shu:
|
||||||
|
genre_shu[ge]+=1
|
||||||
|
else:
|
||||||
|
genre_shu[ge]=1
|
||||||
|
# print("各类型的电影数量",genre_shu)
|
||||||
|
|
||||||
|
genre_lei=list(genre_shu.keys())
|
||||||
|
genre_liang=list(genre_shu.values())
|
||||||
|
|
||||||
|
print(genre_liang)
|
||||||
|
|
||||||
|
plt.figure(figsize=(14, 12))
|
||||||
|
plt.bar(genre_lei, genre_liang, # 类别, 数值
|
||||||
|
width=0.6) # 柱子宽度(0~1之间)
|
||||||
|
|
||||||
|
# 标题和标签
|
||||||
|
plt.title('类型电影数量分布', fontsize=14)
|
||||||
|
plt.xlabel('类型名称', fontsize=12)
|
||||||
|
plt.ylabel('电影数量', fontsize=12)
|
||||||
|
|
||||||
|
plt.show()
|
||||||
|
|
||||||
BIN
q4/q4_1/q4_1_bar.png
Normal file
BIN
q4/q4_1/q4_1_bar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
24
q4/q4_2/q4_2.py
Normal file
24
q4/q4_2/q4_2.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import json
|
||||||
|
|
||||||
|
rating=[]
|
||||||
|
duration=[]
|
||||||
|
|
||||||
|
with open('movie.json', 'r', encoding='utf-8') as f:
|
||||||
|
data=json.load(f)
|
||||||
|
# print(data)
|
||||||
|
for i in data:
|
||||||
|
rating.append(i["rating"])
|
||||||
|
duration.append(i["duration"])
|
||||||
|
plt.figure(figsize=(12, 8))
|
||||||
|
plt.scatter(duration, rating,
|
||||||
|
c='red',
|
||||||
|
s=80, # 点的大小
|
||||||
|
alpha=0.6, # 透明度
|
||||||
|
edgecolors='white') # 点的边框
|
||||||
|
plt.title('时长与评分关系散点图', fontsize=14)
|
||||||
|
plt.xlabel('时长', fontsize=12)
|
||||||
|
plt.ylabel('评分', fontsize=12)
|
||||||
|
plt.grid(True, linestyle='--', alpha=0.5)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
BIN
q4/q4_2/q4_2_scatter.png
Normal file
BIN
q4/q4_2/q4_2_scatter.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
19
q4/q4_3a/q4_3a.py
Normal file
19
q4/q4_3a/q4_3a.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import json
|
||||||
|
rating=[]
|
||||||
|
|
||||||
|
with open('movie.json', 'r', encoding='utf-8') as f:
|
||||||
|
data=json.load(f)
|
||||||
|
# print(data)
|
||||||
|
for i in data:
|
||||||
|
rating.append(i["rating"])
|
||||||
|
|
||||||
|
plt.figure(figsize=(12,8))
|
||||||
|
plt.hist(rating, # 数据
|
||||||
|
bins=3, # 分成几个柱子
|
||||||
|
color='#3498DB', # 颜色
|
||||||
|
edgecolor='white') # 柱子边框颜色
|
||||||
|
plt.title('评分分布', fontsize=14)
|
||||||
|
plt.xlabel('评分', fontsize=13)
|
||||||
|
plt.grid(True, linestyle='--', alpha=0.5, axis='y')
|
||||||
|
plt.show()
|
||||||
BIN
q4/q4_3a/q4_3a_hist.png
Normal file
BIN
q4/q4_3a/q4_3a_hist.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
@@ -1 +0,0 @@
|
|||||||
# 此目录用于存放学生提交的文件,请勿删除
|
|
||||||
19
q4/q4_3b/q4_3b.py
Normal file
19
q4/q4_3b/q4_3b.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import json
|
||||||
|
duration=[]
|
||||||
|
|
||||||
|
with open('movie.json', 'r', encoding='utf-8') as f:
|
||||||
|
data=json.load(f)
|
||||||
|
# print(data)
|
||||||
|
for i in data:
|
||||||
|
duration.append(i["duration"])
|
||||||
|
|
||||||
|
plt.figure(figsize=(12,8))
|
||||||
|
plt.hist( duration, # 数据
|
||||||
|
bins=3, # 分成几个柱子
|
||||||
|
color='#3498DB', # 颜色
|
||||||
|
edgecolor='white') # 柱子边框颜色
|
||||||
|
plt.title('时长分布', fontsize=14)
|
||||||
|
plt.xlabel('时长(分钟)', fontsize=13)
|
||||||
|
plt.grid(True, linestyle='--', alpha=0.5, axis='y')
|
||||||
|
plt.show()
|
||||||
BIN
q4/q4_3b/q4_3b_hist.png
Normal file
BIN
q4/q4_3b/q4_3b_hist.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
Reference in New Issue
Block a user