讲解视频: P1 python基础
00:00,新手学习大纲
05:10,题目介绍
06:16,pycharm设置,修改字体
07:06,新建项目
09:30,读取json,print查看
14:35,Python Console调试,分析了解数据、题目
26:20,开始解题,试做10%的train,取image_ids
28:53,列表推导式
29:44,time.time()计时器
33:23,PerfTime计时器
38:03,with TicToc()
39:43,筛选annotations,带if的列表推导式
43:58,使用set提高检索效率,算法复杂度
50:01,命名规范
52:13,排版规范、技巧
54:06,重新梳理目前算法
55:45,Alt+ Enter,初步解决问题,中途休息
60:03,random.shuffle,json数据元素在py都有对应数据结构
64:03,复制粘贴代码完成3个数据
提前通知
大家好,下午组会由我跟大家分享编程知识,
我设计了一个《人工智能开发基础》课程大纲 https://www.yuque.com/xlpr/doai/session1,会作为一个系列每几个月分享一次。
本周第一次内容,以今年我面试21级研究生的一道编程考核题作为切入点,
来介绍python、pycharm方方面面的知识,技巧,有兴趣的同学可以自己先看看题目试着做一下。
“做人工智能,首先要处理数据集,一般要先把数据集分成:训练集train、验证集val、测试集test三套。
请尝试分析这个json数据,然后拆分出三个新的json文件作为train、val、test。
这个过程中有任何疑惑都可以找我询问,最后把实现代码发给我看即可。
代码首推python,如果实在不熟悉python,也允许使用c++等其他自己熟悉的编程语言实现。”
publaynet.json
闲数据太大的,可以用这个只有20张图的玩:
val_mini.json
1 学习大纲
2 新建项目
setting,可以搜索,设置font,改大字体(13号改28号)
新建项目
- 路径,项目名
设置解释器

Open Project

This Window:关闭原有的项目,打开当前项目
New Window:在一个新窗口打开当前项目
Attach:在已有的开发环境关联新项目
3 问题分析
3.1 打开文件、解析json
open文件,一定要close 文件读写 - 廖雪峰的官方网站
with上下文写法
json解析库:import json
| 读取 | 写入 | |
|---|---|---|
| 文件 | json.load | json.dump |
| 字符串 | json.loads | json.dumps |
ujson(Terminal安装,pip简介)
3.2 可视化
print查看内容
json.cn
python console
脚本调试
断点调试
(from pyxllib.xl import browser)browser调试、看excel
可视化,版面分析任务
这个数据,配上图片,可视化是这样的东西:
(view_labelme.py,pip install xllabelme)
3.3 分析
这些是在教你们查看json的技巧,要仔细分析研究json
明白理解数据:
有1万张image图片,每张图片都有若干个annotation标注,
大约每张图10个,一共10万个annotation
annotation有5种类别、模块,存储在categories,text文本,title标题,figure图片,list列表,table表格
在AI里,这个就是版面分析任务
对模型来说要做的是:输入一张图片,能找到里面每个模块的位置,并且标记所处属类别
而我们要做的数据处理工作,就是:拆分images,获取对应的annotations
4 求解问题
先写一个取前10%作为train的示例
4.1 取出image_ids
for循环获得所有id
列表推导式:[im[‘id’] for im in images]
带条件的列表推导式:[x for x in range(10) if x%2]
蓝色部分同以前写法,在末尾黄色部分加条件过滤,开头要写一个x。
双重循环列表推导式:只是把x展开也写成一个推导式,同理可以无限展开。
但超过2层的循环建议展开代码写for循环更直观。
4.2 计时器/学会查官方文档
计时器 time.time() -> 查文档 Python Documentation (地址栏搜索引擎 · 语雀)
-> TicToc -> PerfTime
4.3 编码规范/PyCharm技巧
命名规范:code4101的Python代码风格
关于PEP8,至少要了解命名规范:
变量函数名lower_with_under,类名CapWords,常量CAPS_WITH_UNDER。
(PyQt、OpenCV源码是C++写的,所以没按py规范)
遇到波浪线等提示,鼠标悬停可以查看问题
自动排版:Ctrl + Alt + L
4.4 筛选annotations/推导式/性能对比
筛选对应的annotations,三种写法:
for,append
filter写法
带条件的列表推导式
集合推导式 -> 收藏,Python 开发中有哪些高级技巧?
几种算法的性能对比
4.5 写入文件
组合出新json,写入文件
4.6 总结

第9行算总数,第10行取train的images,第11行取对应的image_id,第12行获得train对应的annotations
第14行,最后是要组装出一个跟原来结构一样,但内容改变的dict
第18、19行,写入文件
第11、12行用了列表推导式,但也完全可以用for、if写出来的,其实根本就没有什么py的知识,这些列表、字典、for、if,不管什么编程语言都有的
就是考算法思维能力
