《Python大规模机器学习》— 2.2.4 ​使用数据库

举报
华章计算机 发表于 2019/06/12 21:47:46 2019/06/12
【摘要】 本节书摘来自华章计算机《Python大规模机器学习》一书中的第2章,第2.2.4节,作者是[荷]巴斯蒂安·贾丁(Bastiaan Sjardin)[意]卢卡·马萨罗(Luca Massaron)[意]阿尔贝托·博斯凯蒂(Alberto Boschetti)王贵财刘春明译。

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文件中的数据流操作一样对其进行流处理。读者自己的应用程序中可以重用该数据库上传代码,代码没有绑定到具体示例(只需更改输入输出参数):

 image.png

image.png

该脚本通过有效的数据库名称和模式来定位待导入文件(接受通配符*),并从头开始创建所需的新数据库和表。然后用所有可用的数据对其进行填充:

image.png 

脚本还会显示创建的字段的数据类型和行数,以便你验证导入过程是否成功。现在很容易从数据库中以数据流的方式提取数据。在示例中,在hour表和day表之间创建一个内连接,并按小时提取数据(当天租金总额信息):

 image.png

image.png

如果需要加快数据流传输,只需优化数据库,首先是为要使用的关系查询构建正确索引。

 

conn.text_factory=str是脚本非常重要的部分,它允许存储UTF-8数据。如果忽略此命令,则在输入数据时可能会遇到奇怪的错误。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。