数据治理 | 数据量越来越大,Stata总奔溃?看来……
本文目录
引言
一、Stata 内存需求计算公式
二、公式细节
(一)obs
(二)width
三、温馨提示
(一)合理设置数据类型
(二)不同版本Stata对数据量的支持
四、电脑配置
文末彩蛋:本文涉及到的链接及我们分享的参考资料
本文共2589字,阅读大约需要7分钟,欢迎指正!
引言
最近,有同学咨询我们,用Stata运行大数据集,例如大约140GB的数据集,需要怎样的电脑配置?
众所周知,Stata 将我们的数据存储于内存中,这让 Stata 的分析计算速度很快,但同时也意味着内存要足够大才能够容纳需要处理的数据集。因此,在选择电脑配置时,内存是首要考虑的因素。
当我们手头上有一个大数据集需要使用Stata分析时,我们应首先估计该数据集导入 Stata 需要使用多少内存。
一、Stata 内存需求计算公式
通过查询 Stata 文档[1],我们整理得到如下计算公式:
memory_used 是导入Stata中的数据集占用的内存,单位 GB
obs 表示数据集中的观测数(样本数、行数、记录数),单位 条
width 表示一个观测(一行)占用的字节数,单位 字节[2]
官方文档对 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 字节。
注意:
上述公式中,43 是一个观测占用的内存单位是字节,74 表示 auto.dta 的观测数(行数)。 memory 命令反映数据集的真实内存占用,不考虑 24 个预留字节。
use http://www.stata-press.com/data/r9/auto.dta,clear
memory
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版本。
四、电脑配置
对Stata有所了解后,我们开始考虑对应的电脑配置,重点还是在内存上,我们给出如下建议:
个人研究者可以租用公有云平台的云服务器,如阿里云的ECS,腾讯云的CVM,华为云的ECS等。用户可以自行选择内存容量和CPU,可以按年月租用,也可按时付费,适合临时的分析任务。
个人研究者也可以购买强劲的消费级主机,重点关注主板可以支持的内存容量(一般在256GB以内),适合个人长期研究使用。
机构或研究团队可以选择企业级服务器(机架式或塔式),可轻松支持TB级别的内存容量,适合团队长期研究使用。
本文涉及到的链接及我们分享的参考资料
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/
我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块(点击标题即可跳转至相应合集):
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 《社科领域大数据治理实务手册》
欢迎扫描👇二维码添加关注