我喜欢使用R,Python-Pandas,Julia,Apache Spark甚至关系数据库等计算平台进行分析的数据准备工作。争执的周期提供了机会,可以初步了解并稍后分析/建模的数据。
与数据库相比,我更喜欢在计算中处理的一项关键任务是数据加载。这是因为数据库通常要求在插入记录之前创建表,而计算平台可以同时创建/加载数据结构,从而即时推断属性数据类型(这些数据类型也可以在加载脚本中覆盖)。当数据来自网络上可用的文件时,后者可以节省大量的工作。目前与我相关的此类Web数据示例是人口普查和Medicare Provider Utilization and Payment。这些中的每一个都有许多记录和属性。
我最近给自己带来的一个挑战是在笔记本上将1580万条记录和286个属性普查数据文件加载到PostgreSQL中。创建286列的表后,使用PostgreSQL数据加载功能很容易,但是如何轻松地制定create table语句呢?
一种可能性是使用计算平台提供的数据库连接功能。Python-Pandas和R都提供PostgreSQL库,并且都支持将数据帧直接复制到PostgreSQL表中。
当我努力寻找可行的解决方案时,我想到了考虑使用计算复制功能来创建带有很小数据子集的表,然后使用高效的PostgreSQL复制命令将数据文件批量加载到数据库中的想法。事实证明,我能够将这些计算和数据库加载功能结合在一起,从而得出可行的解决方案。
我采用的策略如下:1)使用Python-Pandas和R-data.table将一小部分数据加载到数据帧中以确定数据类型;2)利用该dataframe / data.table在PostgreSQL中创建一个关系数据库表;3)根据元数据和csv文件生成批量加载sql复制命令以及shell脚本;4)使用系统命令的变体执行shell脚本,以使用有效的copy语句加载数据。
首先是Python-Pandas,如下所示。仅作为概念证明,代码中没有异常/错误处理。希望提出的想法引起共鸣。
使用的技术是JupyterLab 0.35.4,Anaconda Python 3.7.3,Pandas 0.24.2,sqlalchemy 1.3.1,psycopg2 2.8.3和d6tstack 0.1.9。
关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!