大数跨境
0
0

Ftools命令组之fcollapse命令介绍

Ftools命令组之fcollapse命令介绍 Stata and Python数据分析
2019-04-02
1
导读:好好学习~~

本文作者:孙雪丽

本文编辑:杨长青

技术总编:李春涛

       好消息!!!爬虫俱乐部将于2019年5月2日4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结合的方式,旨在帮助大家熟悉Stata数据分析技巧,能够通过编程读取不同类型的数据源、实现复杂数据合并、清洗的程序化,并且熟悉Stata核心的爬虫技术。

详细培训大纲及报名方式,请点击文末阅读原文呦~

近日,小编遇到一份比较大的数据,这份数据有5个变量,5000万条观测值,数据的处理过程并不麻烦,可是处理速度非常考验小编的耐心,一行十分简单的程序都要运行十几分钟,整段代码运行下来要花费一整天的时间,而且由于数据量庞大,电脑几乎处于崩溃的边缘,这可真真急的小编抓耳挠腮。为了不使大家的操作过于浪费时间,我们模拟一份5个变量、500万条数据的生成过程,并记录每一行程序的运行时间:

clearset rmsg on  //开启计时器set obs 50000  gen company = _n  //生成50000家公司expand 100      //将观测数扩大100bys company: gen year = _n + 1950   //按公司分组生成年份变量,year1950年到2050bys company: gen industry = mod(company, 10) + 1  //生成行业变量industrybys industry: gen country = mod(industry, 5) + 1   //生成国家变量countryorder company year industry countrysort company yeargen profit = uniform()   //随机生成利润率save example.dta, replaceset rmsg off   //关闭计时器

可见程序中sort命令、bysort命令的运行时长格外突出,这是因为这两个命令运行时依赖于对内存中的数据排序,在数据量很大时,排序是一项效率较低的工作,因此sort命令、bysort命令以及一些运行时会自动对数据排序的命令(如collapse命令、merge命令等)会大大降低Stata处理大数据集的效率。

基于此,Ftools套件(通过ssc install Ftools安装)中编写了一系列此类命令的替代命令,这些命令的编写基于Mata语言,在Mata中,以哈希函数(hash0()、hash1()、hash2())构造哈希表的方式替代对内存数据直接进行排序(sort),哈希算法是一种新型的存储技术(又称散列技术),其通过查找关键字(key)的方式而不需要比较就可获得需要的记录的存储位置,这种算法存取速度更快,因而处理大数据集的效率更高。Ftools系列命令可通过help Ftools查看:

我们先来介绍Ftools命令组中的fcollapse命令。

collapse命令与fcollapse命令

collapse命令

介绍fcollapse命令之前我们先来了解collapse命令的用法。

collapse命令用于计算一个或多个变量的描述性统计信息,在help文件中可以看到其语法结构为:

collapse clist [if] [in] [weight][, options]

其中,clist的形式有两种:

[(stat)] varlist [ [(stat)] ... ]

或   [(stat)] target_var=varname[target_var=varname ...] [ [(stat)] ...]

(stat)为所要计算的统计量。两种形式的区别在于第二种形式中将计算得到的某一变量的某个统计量命名为target_var,而第一种形式中以默认方式为新变量命名。以网络数据college为例

webuse college, clear


若计算每年gpa的均值,并将gpa的均值命名为mean_gpa,可执行以下程序:

collapse (mean) mean_gpa = gpa, by(year)  //by(year)指定按年分组计算list

图中mean_gpa代表每年gpa的算数平均值,但有时我们需要计算某一变量的加权统计量,相应可在collapse命令中指定权重,并放于一对方括号“[]”中,与普通变量相区别。如在college数据中,分别计算gpa以number为权重的均值和标准差,程序如下:

webuse college, clearcollapse (mean) mean_gpa = gpa (sd) sd_gpa = gpa [fw=number], by(year)list

这样得到的统计量便都是加权后的统计量。在没有指定所要计算的统计量(stat)时,collapse命令会默认计算相应变量的均值(mean)。collapse命令可计算的常用统计量有mean(均值)、p1(百分之一分位数)、…p50(中位数)、…p99(百分之九十九分位数)、sd(标准差)、semean(标准误)、sum(总和)等。

fcollapse命令

fcollapse命令是对collapse命令的替代,它们有着相同的语法结构及用法,以上例子也均可通过fcollapse命令实现。与collapse命令相比,fcollapse命令拥有更多选项,且在大数据集中运行速度更快。

merge选项

该选项用于将计算得到的新数据集与原数据集横向合并在一起。在fcollapse命令中指定merge选项时,相当于collapse命令+merge命令。如在college数据中,以下程序:

webuse college, clearsave college, replacecollapse (mean) mean_gpa = gpa (p50) p50_gpa = gpa [fw=number], by(year)merge 1:m year using collegedrop _merge

等价于:

webuse college, clearfcollapse (mean) mean_gpa = gpa (p50) p50_gpa = gpa [fw=number], merge by(year)

可见,fcollapse命令可大大简化程序,且两段程序的运行结果相同(红色方框为原始数据集):

• freq选项

该选项用于统计每组的观测值个数,并将统计的结果赋给新变量_freq,也可通过freq(newvar)指定新变量的名称。如college数据中,统计每组的观测值个数,程序如下

webuse college, clearfcollapse (mean) mean_gpa = gpa (p50) p50_gpa = gpa [fw=number], by(year) freqlist

上图显示了year=1的组有4条观测值,year=2的组有3条观测值……

限于篇幅,以上仅介绍相比collapse命令fcollapse命令增加的两个常用选项,其他特有选项读者可通过help fcollapse进行了解。


♦ collapse命令与fcollapse命令运行速度比较

fcollapse命令编写的初衷便是在处理大数据集时替代collapse命令,以提高运行效率。我们先来比较一份500万条观测的数据集中这两个命令的运行速度。

clearset obs 50000  gen company = _n expand 100  bys company: gen year = _n + 1950bys company: gen industry = mod(company, 10) + 1bys industry: gen country = mod(industry, 5) + 1order company year industry countrysort company yeargen profit = uniform() *比较collapse与fcollapse命令的运行速度set rmsg oncollapse (mean) profit, by(company)use example, clearfcollapse (mean) profit, by(company)set rmsg off

可见,fcollapse命令的运行速度大概提高了三分之一。collapse命令运行速度之所以相对较慢是因为该命令在运行时有一个bysort的过程,这一分组并排序的过程在处理大数据集时会降低Stata的运行效率。如在auto数据中,求按变量turn分组的price的和,以下程序:

sysuse auto, clearcollapse (sum) price, by(turn)

在运行过程中,类似于:

sysuse auto, clearbysort turn: replace price = sum(price)by turn: keep if _n == _Nkeep turn price

因此,这一bysort过程降低了collapse命令处理大数据的效率。

数据量越大时fcollapse命令的速度优势越明显。下图显示了不同数据量时collapse命令与fcollapse命令运行的时间趋势。

注:此图来源于GitHub

显而易见,fcollapse命令相比于collapse命令更适合于处理大数据集。

以上就是今天介绍的Ftools命令组中的fcollapse命令,你get到fcollapse命令的优势了吗?后续推文中我们将介绍Ftools命令组中的其他命令,敬请关注!

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


【声明】内容源于网络
0
0
Stata and Python数据分析
爬虫俱乐部,新的启航
内容 1337
粉丝 0
Stata and Python数据分析 爬虫俱乐部,新的启航
总阅读396
粉丝0
内容1.3k