- 本书赞誉
- 前言
- 目标读者
- 不适合阅读本书的读者
- 本书结构
- 什么是数据处理
- 遇到困难怎么办
- 排版约定
- 使用代码示例
- 致谢
- 第 1 章 Python 简介
- 第 2 章 Python 基础
- 第 3 章 供机器读取的数据
- 第 4 章 处理 Excel 文件
- 第 5 章 处理 PDF 文件 以及用 Python 解决问题
- 第 6 章 数据获取与存储
- 第 7 章 数据清洗:研究、匹配与格式化
- 第 8 章 数据清洗:标准化和脚本化
- 第 9 章 数据探索和分析
- 第 10 章 展示数据
- 第 11 章 网页抓取:获取并存储网络数据
- 第 12 章 高级网页抓取:屏幕抓取器与爬虫
- 第 13 章 应用编程接口
- 第 14 章 自动化和规模化
- 第 15 章 结论
- 附录 A 编程语言对比
- 附录 B 初学者的 Python 学习资源
- 附录 C 学习命令行
- 附录 D 高级 Python 设置
- 附录 E Python 陷阱
- 附录 F IPython 指南
- 附录 G 使用亚马逊网络服务
- 关于作者
- 关于封面
8.5 用新数据测试
前面我们已经学习了编写文档、代码脚本化、组织代码结构,现在我们应该编写一些测试,或者用新数据来测试。这可以帮我们检查代码的运行是否正确,是否与与预期相同,还可以明确代码的含义。我们将数据清洗脚本化的原因之一就是我们可以复用这些代码,因此用新数据测试可以证明我们在代码标准化上花的时间和精力是值得的。
测试刚写过的脚本的一种方法是,我们能否将其轻松应用于在 UNICEF 网站上找到的相似数据。我们来看一下。你应该已经从本书仓库(https://github.com/jackiekazil/data-wrangling)中下载了 wm.csv 和 wm_headers.csv 两个文件。这两个文件是津巴布韦 UNICEF 数据中的女性调查数据。
我们尝试在脚本中使用这些文件,替换男性调查数据。要做到这一点,我们只需修改清洗脚本中的两个文件名,将其修改为两个妇女调查数据文件的路径。我们还应该将调查类型修改为 'wm',这样我们才能区分两个数据集中的数据。
女性数据集要比男性的大得多。如果你有未保存的数据,我们建议先保存数据,关闭其他程序,然后再进行下一步。关于这一点,可以思考一下如何在脚本中改善内存使用。
我们来看一下能否成功导入数据:
import dataset db = dataset.connect('sqlite:///data_wrangling.db') wm_count = db.query('select count(*) from unicef_survey where survey="wm"') ➊ count_result = wm_count.next() ➋ print count_result
❶ 我们用的是直接查询,可以快速查看 survey='wm' 的行数。这应该只包括我们将类型设为 'wm' 后第二次运行的数据行。
❷ 读取查询结果,利用查询响应的 next 方法提取出第一个结果。我们用的是 count,所以我们应该只得到一个结果。
我们从女性数据集中成功导入了超过 300 万个问题和回答。我们的脚本是有效的,我们可以看到输出结果!
利用相似数据测试脚本是确保脚本按预期运行的一种方法。从中还可以发现,你的脚本通用性很高,可以复用。但测试代码还有很多其他方法。Python 有不少很好的测试库,可以帮你编写测试脚本和应用测试数据(甚至测试 API 响应),从而保证代码正常运行。
Python 标准库中有一些内置的测试模块。unittest 库(https://docs.python.org/2/library/unittest.html)可以为 Python 代码做单元测试。它有一些好用的内置类,利用 assert 语句来测试代码是否正常运行。如果想为代码编写单元测试,我们可以写一个测试,判断 get_rows 函数返回的是不是一个列表。我们还可以判断列表长度和文件的数据行数是否相同。我们可以用这些断言测试每一个函数。
另一个流行的 Python 测试框架是 nose 库(https://nose.readthedocs.org/en/latest/)。nose 是一个非常强大的测试框架,额外插件(https://nose.readthedocs.io/en/latest/plugins/builtin.html)和配置可以提供很多功能选项。如果你的仓库很大,许多开发者负责同样的代码,有不同的测试需求,那么这个库是很好用的。
不知道先用哪一个?那么 pytest 库(http://pytest.org/latest/)可能适合你。你可以用任意一种风格编写测试,还可以在需要时换用另一种风格。它的社区也相当活跃,里面有许多演讲和教程(http://docs.pytest.org/en/latest/talks.html#talks-and-blog-postings),所以如果你想深入了解之后编写自己的测试,那么可以先用这个库。
通常来说,测试集的结构是在每一个模块下有一个测试文件(对于我们当前的仓库结构来说,我们会在每一个目录下放一个测试文件,除了数据文件夹和配置文件夹)。有些人为文件夹中的每一个 Python 文件编写一个测试文件,所以很容易判断每项测试针对的是哪一个具体文件。其他人将测试放在一个单独的目录中,其结构与 Python 文件结构相同。
无论你选择哪种测试风格或文件结构,一定要确保前后一致、风格明确。这样你就会知道在哪里可以找到测试文件,你(和其他人)也可以在必要时运行这些测试代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论