查看原文
其他

数据治理 | 数据量越来越大,Stata总奔溃?看来……

快点关注→ 数据Seminar 2022-12-31

文目录

引言

一、Stata 内存需求计算公式

二、公式细节

(一)obs

(二)width

三、温馨提示

(一)合理设置数据类型

(二)不同版本Stata对数据量的支持

四、电脑配置

文末彩蛋:本文涉及到的链接及我们分享的参考资料


本文共2589字,阅读大约需要7分钟,欢迎指正!

引言

最近,有同学咨询我们,用Stata运行大数据集,例如大约140GB的数据集,需要怎样的电脑配置?

众所周知,Stata 将我们的数据存储于内存中,这让 Stata 的分析计算速度很快,但同时也意味着内存要足够大才能够容纳需要处理的数据集。因此,在选择电脑配置时,内存是首要考虑的因素。

当我们手头上有一个大数据集需要使用Stata分析时,我们应首先估计该数据集导入 Stata 需要使用多少内存。

一、Stata 内存需求计算公式

通过查询 Stata 文档[1],我们整理得到如下计算公式:

  1. memory_used 是导入Stata中的数据集占用的内存,单位 GB

  2. obs 表示数据集中的观测数(样本数、行数、记录数),单位 条

  3. width 表示一个观测(一行)占用的字节数,单位 字节[2]

  4. 官方文档对 24 的解释是:.... to add 24 bytes to the width, which allocates room for three extra double-precision variables. Stata commands often add extra working variables to your data, at least temporarily.  大致意思是,Stata 建议预留24个字节以备不时之需

二、公式细节

obs

obs 表示数据集中的观测数(行数),如果数据集是 .csv 格式等文本文件可以使用 nodepad++ 、emeditor(感谢 Kitsch 用户的留言)等软件获取,也可以使用Stata、Python获取(详见上一期推文)。

width

width 表示一个观测(一行)占用的字节数,width 非常重要,理解了 width 就掌握了上述公式的精髓。我们以 Stata 内置的 auto.dta 数据集作为测试对象引入 width 概念,可以使用如下代码导入 auto.dta 。

use http://www.stata-press.com/data/r9/auto.dta,clear

浏览该数据集,可以在【变量窗口】中查看到【类型】这个属性,如下图所示。

通过查阅帮助文档[3] (也可在 Stata 中使用 help datatpye 命令查看),可得,byte 占用 1 个字节,float 占用 4 个字节,int 占用 2个字节,str18 占用 18个字节,简单计算得到 auto.dta 一个观测的 width 是 43 字节。

str18中的18,表示 变量 make 中,占用内存最多的值所占用的内存为18字节。

假如 auto.dta 有 18 亿个观测(obs),带入公式可得 memory_used 约为 112.32 GB,即Stata建议至少有112.32GB的物理内存给该数据集使用。

注意:操作系统和Stata等软件的运行均要占用内存,因此建议实际物理内存在128GB以上。

我们可以使用 memory 命令查看 Stata 数据集占用内存的大小。下图中,3182 (字节) 是 auto.dta 数据集占用内存的大小,可以用公式验证:width * obs = 43 * 74 = 3182 字节。

注意:

  1. 上述公式中,43 是一个观测占用的内存单位是字节,74 表示 auto.dta 的观测数(行数)。
  2. memory 命令反映数据集的真实内存占用,不考虑 24 个预留字节。
use http://www.stata-press.com/data/r9/auto.dta,clear

memory

我们还可以用 compress 命令优化内存。对 auto.dta 数据集使用 compress 命令,Stata 判断出可以把 mpg、rep78 等变量 的类型改为 byte 不丢失精度,并进行类型转换。再次使用 memory 查看数据集的内存使用,可以发现内存占用减少了约 11.6 %。

compress

memory

除了使用命令,我们可以在数据编辑器的属性窗口查看数据集大小,如下图所示。

三、温馨提示

合理设置数据类型

Stata官方建议我们合理设置数据类型:

Stata keeps data in memory, and you should record your data as parsimoniously (吝啬地) as possible. If you have a  string variable that has maximum length 6, it would waste memory to store it as a str20.  Similarly, if you have an integer variable, it would be a waste to store it as a double.

一言以蔽之,在保证精度不丢失的情况下,选择占用内存更少的数据类型

不同版本Stata对数据量的支持

不同版本的Stata对数据量的支持不同,如下图所示,如果需要对大数据进行分析,建议使用MP版本。

更多细节请参考官方文档[4]

四、电脑配置

对Stata有所了解后,我们开始考虑对应的电脑配置,重点还是在内存上,我们给出如下建议:

  1. 个人研究者可以租用公有云平台的云服务器,如阿里云的ECS,腾讯云的CVM,华为云的ECS等。用户可以自行选择内存容量和CPU,可以按年月租用,也可按时付费,适合临时的分析任务。

  2. 个人研究者也可以购买强劲的消费级主机,重点关注主板可以支持的内存容量(一般在256GB以内),适合个人长期研究使用。

  3. 机构或研究团队可以选择企业级服务器(机架式或塔式),可轻松支持TB级别的内存容量,适合团队长期研究使用。



本文涉及到的链接及我们分享的参考资料

[1]

Stata 数据类型介绍: https://www.stata.com/features/overview/huge-datasets/

[2]

Stata 内存 - 数据量计算公式: https://www.stata.com/manuals/ddatatypes.pdf

[3]

帮助文档: https://www.stata.com/manuals/ddatatypes.pdf

[4]

官方文档: https://www.stata.com/products/which-stata-is-right-for-me/

[5]

Stata中使用大数据的建议PDF: 链接:https://pan.baidu.com/s/1VJJMUJwdSknTiyZn8vMXmA?pwd=350u,提取码:350u

[6]

Stata论坛: https://www.statalist.org/forums/

[7]

Stata FAQs: https://www.stata.com/support/faqs/


我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块(点击标题即可跳转至相应合集):
  1. 计算机基础知识
  2. 编程基础
  3. 数据采集
  4. 数据存储
  5. 数据清洗
  6. 数据实验室搭建
  7. 数据治理特别篇




星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧


往期推荐


讲座预告 | 施丹燕:基于企业大数据治理与分析平台的oralce数据库操作技术

基本无害 | 因果识别的比照基准——理想实验(3)

数据治理 | 超大.csv文件怎么处理?我们有独门武器!(免费赠送自制csv切分工具)






数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


文 | 《社科领域大数据治理实务手册》


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存