《Python大规模机器学习》—3.2.4 使用SGD实现大规模SVM
541
2022-05-28
2.2.4 使用数据库
作为pandas的I/O工具的灵活性示例,我们提供一个使用SQLite3数据库的示例,
其中使用简单查询得到数据流,该示例并不专门用于教学。在磁盘空间和处理时间方面,使用数据库的大型数据存储功能确实具有优势。
将数据放入SQL数据库表中进行归范化既能消除冗余度和重复度,又能节省磁盘存储空间。数据库规范化就是数据库中组织列和表以减少其维数而不丢失任何信息的方式,通常,通过拆分表和将重复数据重新编码成键来实现。此外,经过内存、操作和多处理优化的
关系数据库能加速和预测部分预处理过程,否则要在Python脚本中执行这些处理。
对于Python,SQLite(http://www.sqlite.org)是个不错选择,原因如下:
开源。
能处理大量数据(理论上每个数据库可存储高达140TB的数据,但是不太可能有SQLite应用程序能处理该级别的数据量)。
能在MacOS、Linux和Windows 32/64位环境中运行。
由于全部数据存储在单个磁盘文件中,因此不需要任何服务器基础结构或特定的安装操作(零配置)。
使用可转换为存储过程的Python代码易于对其进行扩展。
此外,Python标准库包括sqlite3模块,可提供从创建数据库到使用数据库的全部功能。
本示例首先将包含共享单车数据集的CSV文件以每天和每小时为间隔上传到SQLite数据库,然后,与CSV文件中的数据流操作一样对其进行流处理。读者自己的应用程序中可以重用该数据库上传代码,代码没有绑定到具体示例(只需更改输入输出参数):
该脚本通过有效的数据库名称和模式来定位待导入文件(接受通配符*),并从头开始创建所需的新数据库和表。然后用所有可用的数据对其进行填充:
脚本还会显示创建的字段的数据类型和行数,以便你验证导入过程是否成功。现在很容易从数据库中以数据流的方式提取数据。在示例中,在hour表和day表之间创建一个内连接,并按小时提取数据(当天租金总额信息):
如果需要加快数据流传输,只需优化数据库,首先是为要使用的关系查询构建正确索引。
conn.text_factory=str是脚本非常重要的部分,它允许存储UTF-8数据。如果忽略此命令,则在输入数据时可能会遇到奇怪的错误。
Python 数据库 机器学习
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。