大数跨境
0
0

足不出户的“世界之旅”

足不出户的“世界之旅” Stata and Python数据分析
2023-11-27
2
导读:By reading we enrich the mind, by conversation we polish it.

本文作者:李家耀 河南大学经济学院

本文编辑:刘恒新

技术总编:李婷婷





Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

01
引言


“世界那么大,我想去看看“这句话曾经火遍全网,大家对于这种洒脱的心态纷纷表示肯定。如今说的“特种兵式旅游”也反映了人们对于追求行万里路的热情。世界很大,历史很长。在这奔流不息的光阴长河之中,每个人都显得十分渺小,就如庄子所说“朝菌不知晦朔,蟪蛄不知春秋”。正是如此,才要及时行乐,学会享受生活。旅行对人们而言不仅仅是走遍各地,更是一种心灵的修行和生活的丰富。旅行赋予了生命新的意义,扩展了视野,拓宽了思维,能够让人从不同的角度去理解世界。而世界之大,你是否了解过全球有多少个国家,这些国家都叫什么名字呢?
有同学询问如何提取下方图片数据中的国家名字

这图片中的数据是由国家名称和年份构成的,但是如何提取自己想要的字符串呢?可以使用正则表达式的方法进行解决。下面我就通过以下几种方式来介绍如何提取国家名字,为大家日常学习提供一个参考。
02
ustrregexs ustrregexm和ustrregexra

1.利用ustrregexs ustrregexm

在 Stata 中,ustrregexs 和ustrregexm 是用于处理字符串匹配和正则表达式的函数。它们通常用于对字符串进行搜索、匹配和替换等操作。

clear alluse "D:\temp\New_Comprehensive_August_30_2023.dta"gen v1=ustrregexs(0) if ustrregexm(country,"[^0-9]+")


‍‍‍

这个命令是指生成一个名为 v1 的新变量,该变量的值是在 "country" 变量中找到的不包含数字的字符串。

具体来说就是利用ustrregexm(country, "[^0-9]+") 正则表达式匹配 "country" 变量中不包含数字的字符串。其中[^0-9]+ 表示匹配不包含数字的字符,而+ 表示匹配一个或多个这样的字符。

ustrregexs(0)提取出正则表达式匹配的内容,即匹配到的字符串。因为 (0) 表示整个匹配的字符串,因此ustrregexs(0)是提取出整个匹配到的字符串。而 (1)、(2) 等表示匹配的第几个子表达式对应的子字符串。因此,整体来说,这一行的作用是在 "country" 变量中找到不包含数字的字符串,并将这些字符串存储在新的变量 v1 中。

2.还可以用另一种方式来解决
gen v2=ustrregexs(1) if ustrregexm(country,"(.+)[0-9]{4}")

gen v2 = ustrregexs(1) if ustrregexm(country, "(.+)[0-9]{4}")这行代码使用了gen命令,创建了一个新的变量 v2,并将其赋值为匹配到的字符串的第一个子表达式。在这行例子中,第一个子表达式是(.+),它表示匹配到的任意字符。只有在 country 中的字符串满足正则表达式条件的情况下,v2 才会被赋值;否则,它将保持缺失值。

具体来说就是ustrregexm(country, "(.+)[0-9]{4}")这个指令使用了ustrregexm函数,它是用于执行正则表达式匹配的字符串函数。在这里,它的目标是country 变量,而正则表达式 (.+)[0-9]{4} 的含义是匹配任意字符(表示国家名称的部分),后面跟着至少四个数字。这个正则表达式的目的是找到 country 中以四个连续数字结尾的字符串。

总体而言,这段代码的目的是在Stata数据集中创建一个新变量 v2,其中包含了从 country 中提取的匹配到的部分,该部分是由正则表达式(.*)([0-9]{4}) 匹配到的,表示国家名称的部分。

3.利用ustrregexra

gen v3=ustrregexra(country,"[0-9]+"," ",.)

ustrregexra(country,"[0-9]+","",.)这个命令使用了ustrregexra函数,该函数Stata中用于执行正则表达式替换的函数。

具体来说就是ustrregexra(country, "[0-9]+", "", .)这个命令对 country 变量应用了正则表达式替换。正则表达式 [0-9]+ 表示匹配一个或多个数字,而替换的部分是一个空字符串 ""。因此,这个命令的目的是将 country 中的所有数字替换为一个空字符串。

gen v3 = ustrregexra(country, "[0-9]+", "", .)使用了gen命令,创建了一个新的变量 v3,并将其赋值为对 country 应用正则表达式替换后的结果。新的变量 v3 中包含了原始 country 变量,但其中的数字被空字符串替代。

总体而言,这段代码的目的是在Stata数据集中创建一个新变量 v3,其中包含了从 country 中删除数字后的字符串。这种操作可能有助于清理和处理数据,特别是当需要保留字符串中的非数字部分时。

当然,正则表达式有很多种方法。以上的三种方式都是利用[0-9]来进行操作的,事实上我们也可以利用[a-z]或者[a-zA-Z]来进行操作,具体的思路与匹配数字正好相反,也就是匹配数字是为了删除,而匹配字母是为了保存。

举个例子,上述式子中:

gen v1=ustrregexs(0) if ustrregexm(country,"[^0-9]+")

可以改写为:

gen v1=ustrregexs(0) if ustrregexm(country,"[a-zA-Z]+")

虽然匹配的内容不同但是得出的结果是相同的,可见正则表达式的使用是非常灵活的。

03
利用正则表达式插入分隔符
replace v4=ustrregexra(v4,"([^0-9])([0-9])","$1;$2")split v4,p(;)drop v42 v4

下面我为大家解释这些代码的含义及作用:

1.gen v4 = country这个命令创建了一个新变量 v4,并将其赋值为原始的 country 变量的内容。
2.replace v4 = ustrregexra(v4, "([^0-9])([0-9])", "$1;$2"):这个部分使用了replace命令,将对 v4 变量应用正则表达式替换的结果保存回变量 v4。
3. ustrregexra(v4, "([^0-9])([0-9])", "$1;$2")这个部分是说使用ustrregexra函数,对 v4 变量中的内容进行正则表达式替换。正则表达式 ([^0-9])([0-9]) 表示匹配一个非数字字符(第一个子表达式)后跟着一个数字字符(第二个子表达式)。替换的结果是用分号 “;”将这两个子表达式的内容连接起来。因此,这个命令的目的是在非数字字符前插入分号。
4.split v4, p(;): 这个命令使用分号 ; 将 v4 变量的内容进行分割。分割后,原始的非数字字符部分将保存在 v41 变量中,而原始的数字字符部分将保存在 v42 变量中。
5.drop v42 v4: 这个命令用于删除变量 v42 和原始的 v4 变量。删除v42 是因为在分割后,数字字符已经单独保存在 v42 中,而删除原始的 v4 是因为在这个例子中,原始 v4 已经被替换和分割,没有进一步的分析价值。
总体而言,这段代码的目的是在Stata数据集中创建两个新变量 v41 和 v42,分别包含了原始 country 变量中的非数字字符部分和数字字符部分。
04
moss命令

在Stata中,正则表达式的moss(Merge Operator and Search System)是一个用于执行模糊字符串匹配的命令。该命令主要用于在一个字符串变量中查找模式,并将匹配到的结果存储在新的变量中。

moss varname [, options]

其中,varname是你要进行匹配的字符串变量的名称,而 options 是一系列控制匹配行为的选项。以下是一些常用的 moss 命令选项:

(1)match(string): 指定要匹配的字符串或正则表达式。例如,match("pattern")表示匹配指定的字符串模式。

(2)regex: 指示使用正则表达式进行匹配。如果不指定此选项,默认情况下,moss 将使用通配符进行匹配。

(3)pre(newvar): 指示将匹配的结果存储在一个新变量中,该新变量的名称由 newvar 指定。

(4)replace: 指示用匹配的结果替换原始变量中的值。

(5)gen(newvar): 类似于 pre,指示将匹配的结果存储在一个新变量中,但不创建新变量,而是使用已存在的变量名。

下面我将为大家介绍如何使用moss命令来提取国家名字:
moss country,match("(^[a-zA-Z]+)") regex pre(v5)

这个Stata代码使用 moss 命令对country 变量执行模糊字符串匹配,使用正则表达式 (^[a-zA-Z]+) 来匹配以字母开头的字符串,并将匹配到的结果存储在一个新的变量中,该变量的名称为 v5。

下面让我逐步为大家解释这个代码:
moss country, match("(^[a-zA-Z]+)") regex pre(v5)
a.moss: 这是执行模糊字符串匹配的命令。
b.country: 是指定要进行匹配的变量名。
c.match("(^[a-zA-Z]+)"):是 moss 命令的选项之一,它使用了正则表达式(^[a-zA-Z]+) 进行匹配。这个正则表达式的含义是匹配以一个或多个字母开头的字符串。^ 符号表示匹配字符串的开头。
d.regex: 是 match 选项的子选项,指示使用正则表达式进行匹配。
e.pre(v5): 是 moss 命令的选项之一,它指示将匹配到的结果存储在名为 v5 的新变量中。
执行以上命令后,Stata会在当前数据集中创建一个新变量 v5,其中包含了在 country 变量中匹配到的以字母开头的字符串。这个命令的效果是提取 country中以字母开头的字符串,并将结果存储在 v5 变量中。
以上介绍了Stata中利用正则表达式提取国家名称的三种方法,当然大家也可以利用这个方法来提取需要的数据,这是我们用来处理数据的基础,并且还能在处理大批量的数据中为我们节省时间。希望这次的案例能为大家日常的学习提供一定的帮助,大家赶紧来试一试吧。
                            


END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!


往期推文推荐

【爬虫实战】python文本分析库——Gensi
Python可视化-绘制三维空间空间图形

使用Stata遍历文件的多种方式

Python构造数据透视表
Python可视化-Bokeh库

今年的双十一,你加购了几本书籍呢

基于Python的文本摘要提取

第十届中国产业经济研究学术年会征稿通知
【爬虫实战】获取公务员招考公告
【逆向爬虫】Python中执行调用JS的多种方法汇总
ZipFile库——自动化数据压缩与解压缩
Stata数据处理实用技巧
Python 自动化办公:一键批量生成 PPT
国家社科基金项目热词出炉,词云图带你一看究竟!
Plotly:强大的数据可视化工具!
Stata绘图——热力图绘制
洛阳亲友如相问,一片冰心在玉壶
Stata基础数据清洗—国泰安系列

覆水难收!B站弹幕解读舆论情绪

【爬虫+可视化】租房难?pandas_bokeh助你快速筛选!
     关于我们

微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到 statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

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

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