温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh
作者:吕卓阳(厦门大学)
E-Mail:lvzy20@163.com
致谢: 本文摘自以下文章,特此感谢!
Source: Chuck Huber, 2020, Stata/Python integration part 8: Using the Stata Function Interface to copy data from Stata to Python, -Link-
Stata/Python 交互系列推文 源自 Stata 公司的统计项目总监 Chuck Huber 博士发表于 Stata 官网的系列博文,一共 9 篇。较为系统地介绍了 Stata 与 Python 的交互方式,包括:如何配置你的软件、如何实现 Stata 与 Python 数据集互通、如何调用 Python 工具包、如何进行机器学习分析等。
中文编译稿列表如下:
目录
Stata16 已开发了与 python 交互的功能,本小节我们将介绍如何在 Stata 中调用 python,将 Stata 的数据导入至 python 中。我们熟悉的读取 Stata 数据的 python 命令是pd.read_stata
,但本小节我们主要介绍Stata Function Interface
(SFI)的模块以导入部分变量或部分观测,从而实现更灵活的 Stata 数据导入。
我们首先简单介绍一下如何在 Stata 中调用 python,首先,我们需要在电脑上安装 python,我们建议初学者安装 anaconda,这是一个 python 的集成环境,大部分包已包含在内,对于初学者而言使用起来十分便捷,我们可以在anaconda 的官网上进行下载。其次,我们需要查找 python 的位置,我们可以使用python search
这一命令来查找。
. python search
---------------------------------------------------------------
Python environments found:
C:\Users\Chuck\AppData\Local\Programs\Python\Python38\python.exe
C:\Users\Chuck\anaconda3\python.exe
---------------------------------------------------------------
其次,我们可以使用python_exec
设置 Stata 中调用的 python 路径。
. set python_exec C:\Users\Chuck\AppData\Local\Programs\Python\Python38\
> python.exe
此外,我们可以使用set python_userpath
来调用 python 的其他路径,譬如个人的 python 模块的文件夹。
. set python_userpath C:\Users\Chuck\MyPythonModules\
完成以上设置后,我们就可以在 Stata 中调用 python 了!每次我们只需要在 Stata 的命令框中输入python
就可以完成调用,在 Stata 中运行 python 代码,运行后我们只需输入end
就可以结束调用。
. python
------------------------------ python (type end to exit) ------
>>> print("Hello Stata, I am Python")
Hello Stata, I am Python
>>> end
---------------------------------------------------------------
当我们在 Stata 调用 python 后,我们可能需要在 python 代码中使用到 Stata 的数据集,我们除了可以使用pandas
模块中自带的pd.read_stata()
函数外,我们还可以使用sfi
模块进行更多的操作,我们首先需要在 python 终端安装 sfi
模块,即在终端中输入conda install sfi
。
完成安装后,我们可以在 Stata 中进行试验,我们以 Stata 自带的美国 1978 年的汽车数据为例,譬如我们想要选取foreign
、mpg
、rep78
变量,我们只导入前十行观测值,我们可以使用如下命令。
. python
------------------------------ python (type end to exit) ------
>>> from sfi import Data
>>> dataraw=Data.get('foreign mpg rep78',range(0,10))
>>> dataraw
[[0, 22, 3], [0, 17, 3], [0, 22, 8.98846567431158e+307], [0, 20, 3], [0, 15, 4], [0, 18
> , 3], [0, 26, 8.98846567431158e+307], [0, 20, 3], [0, 16, 3], [0, 19, 3]]
>>> end
---------------------------------------------------------------
我们同样可以定义新变量touse
来筛选数据,也可以使用valuelabel
这一参数来定义是否显示标签,此外,我们注意到存在缺失值8.98846567431158e+307
的情况,我们可以使用missingval
这一参数来处理缺失值,使其显示为np.nan
。
. generate touse = mpg<20
. python
------------------------------ python (type end to exit) -------------
>>> from sfi import Data
>>> import numpy as np
>>> dataraw=Data.get('foreign mpg rep78',range(0,10),"touse",valuelabel=True,missingval
> =np.nan)
>>> dataraw
[['Domestic', 17, 3], ['Domestic', 15, 4], ['Domestic', 18, 3], ['Domestic', 16, 3], ['
> Domestic', 19, 3]]
>>> end
----------------------------------------------------------------------
将 Stata 数据导入 python 后,我们接下来可以将其转换为 python 中常见的数据格式,譬如数据框和字典格式,我们可以使用pd.DataFrame()
函数或Data.getAsDict
函数来进行数据转换。
> python
------------------------------ python (type end to exit) -------------
>>> from sfi import Data
>>> import numpy as np
>>> import pandas as pd
>>> dataraw=Data.get('foreign mpg rep78',range(0,10),"touse",valuelabel=True,missingval
> =np.nan)
>>> dataframe=pd.DataFrame(dataraw,columns=['foreign','mpg','rep78'],index=[np.arange(1
> ,len(dataraw)+1)])
>>> dataframe
foreign mpg rep78
1 Domestic 17 3
2 Domestic 15 4
3 Domestic 18 3
4 Domestic 16 3
5 Domestic 19 3
>>> end
----------------------------------------------------------------------
我们可以使用getAsDict()
将 Stata 数据复制到 python 字典中,我们可以创建以 1 开头长度为字典的值观测值长度的 index,我们使用next()
和iter()
来遍历字典的值,从而获取字典值观测值的长度作为 index。
> python
------------------------------ python (type end to exit) -------------
>>> from sfi import Data
>>> import pandas as pd
>>> import numpy as np
>>> dataraw=Data.getAsDict('foreign mpg rep78',range(0,10),"touse",valuelabel=True,miss
> ingval=np.nan)
>>> dataraw
{'foreign': ['Domestic', 'Domestic', 'Domestic', 'Domestic', 'Domestic'], 'mpg': [17, 1
> 5, 18, 16, 19], 'rep78': [3, 4, 3, 3, 3]}
>>> obs = len(next(iter(dataraw.values()))) + 1
>>> dataframe = pd.DataFrame(dataraw,index=[np.arange(1, obs)])
>>> dataframe
foreign mpg rep78
1 Domestic 17 3
2 Domestic 15 4
3 Domestic 18 3
4 Domestic 16 3
5 Domestic 19 3
>>> end
----------------------------------------------------------------------
我们也可以不对 Stata 数据集进行任何操作,将所有变量不作任何处理导入到 python 中,我们可以使用如下代码进行操作。
clear
sysuse auto
python
from sfi import Data
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
dataraw=Data.getAsDict(None,None,None,valuelabel=False,missingval=np.nan)
dataframe=pd.DataFrame(dataraw)
dataframe.head()
plt.figure(figsize=(9,9))
corr = dataframe.corr()
ax = sns.heatmap(corr,annot=True,vmax=1,square=True,cmap="Reds")
bottom,top = ax.get_ylim()
ax.set_ylim(bottom+0.5,top-0.5)
plt.show()
end
Stata 与 python 交互使我们可以在同一个软件中实现不同软件的操作,从而使我们处理数据与分析增添了更多的可能,本小节介绍的 Stata 中调用 python 并使用sfi.Data()
导入 Stata 数据仅是两种软件交互功能实现的一隅,我们可以查看 python 的sfi
文档来了解这一模块的更多功能。总之,Stata 与 python 的交互可以博采众长,我们在学习的道路中也需要拓宽眼界,集众软件之长处,从而为科研学习的路上增添实践利器。
Note:产生如下推文列表的命令为:
lianxh Stata Python +
安装最新版lianxh
命令:
ssc install lianxh, replace
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟,课程主页 Stata 33 讲 - 连玉君, 每讲 15 分钟. Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh