处理大型数据集通常具有挑战性。如果内存无法完全加载数据,则尤其如此。如果您的资源有限,您可以使用PythonPandas提供的一些功能来减少加载数据集所需的内存空间。可用的技术包括压缩、索引和数据分块。
启动数据科学项目的一个重要步骤是从API下载数据并将其加载到本地内存中,然后再进行处理。
上述过程中需要解决几个题,其中之一就是数据量过多。如果数据量超过设备的内存容量,您可能会在运行项目时遇到题。
解决这个题的办法是什么?
有多种方法可以解决数据量过多的题。这需要时间或需要额外的投资。
可能的解决方案
投资解决方案购买一台具有更多内存、更强大CPU并能够处理整个数据集的新计算机。或者租用云服务或虚拟内存来创建集群来处理您的工作负载。
耗时的解决方案如果您没有足够的内存来处理整个数据集,并且您的硬盘容量远大于内存,请考虑使用硬盘来存储您的数据。然而,使用硬盘来管理数据会显着降低处理性能,而且SSD的速度也比内存慢很多。
在资源允许的情况下,这两种解决方案都是可行的。如果你的项目资金充足或者没有时间成本,以上两种方法是最简单、最直接的解决方案。
但如果情况并非如此呢?资金可能有限或数据集可能太大。从磁盘加载会使处理时间增加至少5到6倍。有没有一种不需要额外资金或时间投入的大数据解决方案?
这个题正合我的胃口。
有多种技术可用于大数据处理,不需要额外的投资,也不需要大量的加载时间。本文介绍了使用Pandas处理大型数据集的三种技术。
压缩
第一种技术是数据压缩。压缩意味着将数据以压缩格式存储在内存中,而不是将其打包在ZIP文件中。
换句话说,数据压缩是一种使用更少内存来表示数据的方法。数据压缩有两种类型无损压缩和有损压缩。这两种类型只影响数据加载,不影响处理代码。
无损压缩
无损压缩不会导致数据丢失。也就是说,原始数据和压缩数据在语义上保持不变。无损压缩有以下三种方式下面我们将介绍美国各州的新冠病病例数据集。
加载特定数据列
示例中使用的数据集结构如下
使用pddata=pdread_csv34;datasample10导入pandas
加载整个数据集需要111MB内存!
如果您只需要数据集中的两列州名称和案例数,为什么要加载整个数据集?加载所需的两列数据仅需要36MB,将内存使用量减少到32。
以下是使用Pandas加载所需数据列的代码
本节使用的代码片段如下
数据集csv=34;34;deep创建数据的子集。df=data[[34;34;]]dfinfoverbose=False,memory_usage=34;34;county34;cases34;deepfile-column_selecting-py
运算数据类型
减少数据内存使用的另一种方法是截断数字条目。例如,如果文件包含数值,则将CSV加载到DataFrame中每个值需要64字节的存储空间。但是,您可以通过使用int类型截取值来节省内存。
int8存储-128到127之间的值。
int16存储值的范围是-32768到32767。
int64存储的值的范围是从-9223372036854775808到9223372036854775807。
如果可以提前确定该值不会大于32767,则可以使用int16或int32类型,并将该列的内存占用减少75。
假设每个状态的实例数不超过32767,则可以将该列截断为int16类型而不是int64类型。
罕见发烧
如果数据集中的一列或多列有大量NaN空值,则可以使用稀疏列表示,通过确保空值不消耗内存来减少内存使用量。
假设状态列中有一些空值,则应跳过所有包含空值的行。使用pandasparse可以轻松实现这一要求。
有损压缩
如果无损压缩不能满足我的需求而需要额外的压缩怎么办?此处使用有损压缩可以权衡内存使用量并牺牲100%的数据准确性。
有损压缩有两种方法数值修改和采样。
修改值在某些情况下,值不需要保持完全精度。在这种情况下,int64可能会被int32甚至int16拦截。
抽样如果您需要确定某些州的COVID-19病例数是否高于其他州,您可以对某些州的数据进行抽样,以了解哪些州的病例数较多。这是一种有损压缩,因为它不考虑每一行数据。
技术二数据分块
处理大数据集的另一种方法是数据分块。将大数据分成几个较小的块,然后分别处理每个块。处理完所有块后,您可以比较结果并得出最终结论。
本文使用的数据集包含1923行数据。
假设您需要找到最多情况的状态,您可以将数据集拆分为每个100行的块,单独处理每个块,并从每个小结果中获取最大值。
本节的代码片段如下
数据集csv=34;34;cases39;cases39;county给出结果printmaxresult,key=resultget,result[maxresult,key=resultget]代码地址。
要使用数据库,您需要重写下面的get_state_info函数。
这将减少50的内存使用量。
概括
处理大型数据集通常具有挑战性。如果内存无法完全加载数据,则尤其如此。有些解决方案既耗时又昂贵。最后,添加资源是最好也是最简单的解决方案。
但是,如果您的资源有限,您可以使用Pandas提供的一些功能通过加载数据集来减少内存使用量。可用的技术包括压缩、索引和数据分块。
原文链接
其他资源
如果关注我,转发这篇文章,并私信“获取资讯”,即可免费获得价值4999元的InfoQ迷你书一本。点击文末“了解更多”即可进入InfoQ网站。获取最新资讯~
一、sqlserver脚本默认保存路径?
打开数据库并安装Lujin。
C:ProgramFiles-x86、MicrosoftSQLServer110ToolsBinnManagementStudioExtensionsApplication
有一种东西叫做。这是ssms-Application-pkgdef文件。打开。编辑检查DefaultProjectsLocation选项以查找默认编辑路径。
这可以通过两种方式实现
1-开启自动提交功能打开SQLServerManagementStudio后,右键单击要设置的数据库,从下拉菜单中选择“属性”选项。在“选项”选项卡中,找到“自动提交”并确保启用其值以自动将更改保存到数据库。
2-使用触发器您可以使用触发器来检测数据表中的所有增删改查操作,然后根据需要执行一些定制的T-SQL代码或处理逻辑。常见示例包括更新其他相关形式的记录。
二、sqlserver数据库没做完怎么保存
您好,您可以使用以下方法保存未完成的SQLServer数据库。
1-保存SQL脚本将未完成的SQL脚本保存到本地计算机或网络驱动器,以便稍后继续编辑和运行。
2-保存SQLServerManagementStudio项目如果您使用SQLServerManagementStudio编辑数据库,您可以将项目保存到本地计算机或网络驱动器上,以便稍后继续编辑和运行。
3-导出数据库将未完成的数据库导出到备份文件,以便稍后恢复并继续编辑。
4-保存Transact-SQL脚本使用SQLServerManagementStudio或其他SQL编辑器编写Transact-SQL脚本并将其保存到本地计算机或网络驱动器,以便稍后继续编辑和运行。
无论选择哪种方法,都应该定期备份数据库和脚本以避免数据丢失。
sql怎么保存数据库文件的介绍就讲到这里,感谢您花宝贵的时间阅读,更多关于sql怎么保存的这类内容别忘了在本站进行查找喔。
No Comment