Stata-Python交互-8:将Stata数据导入Python

发布时间:2021-02-22 阅读 5791

Stata连享会   主页 || 视频 || 推文 || 知乎

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:吕卓阳(厦门大学)
E-Maillvzy20@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 工具包、如何进行机器学习分析等。

  • Part 1: Setting up Stata to use Python -Link-
  • Part 2: Three ways to use Python in Stata -Link-
  • Part 3: How to install Python packages -Link-
  • Part 4: How to use Python packages -Link-
  • Part 5: Three-dimensional surface plots of marginal predictions -Link-
  • Part 6: Working with APIs and JSON data -Link-
  • Part 7: Machine learning with support vector machines, -Link-
  • Part 8: Using the Stata Function Interface to copy data from Stata to Python, -Link-
  • Part 9: Using the Stata Function Interface to copy data from Python to Stata, -Link-

中文编译稿列表如下:


目录


Stata16 已开发了与 python 交互的功能,本小节我们将介绍如何在 Stata 中调用 python,将 Stata 的数据导入至 python 中。我们熟悉的读取 Stata 数据的 python 命令是pd.read_stata,但本小节我们主要介绍Stata Function Interface(SFI)的模块以导入部分变量或部分观测,从而实现更灵活的 Stata 数据导入。

1. 在 Stata 中调用 python

我们首先简单介绍一下如何在 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
---------------------------------------------------------------

2. 使用 sfi 模块读取 Stata 数据

当我们在 Stata 调用 python 后,我们可能需要在 python 代码中使用到 Stata 的数据集,我们除了可以使用pandas模块中自带的pd.read_stata()函数外,我们还可以使用sfi模块进行更多的操作,我们首先需要在 python 终端安装 sfi模块,即在终端中输入conda install sfi

完成安装后,我们可以在 Stata 中进行试验,我们以 Stata 自带的美国 1978 年的汽车数据为例,譬如我们想要选取foreignmpgrep78变量,我们只导入前十行观测值,我们可以使用如下命令。

. 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
----------------------------------------------------------------------

3. 将数据转换为数据框或字典

将 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
----------------------------------------------------------------------

4. 将 Stata 数据集完全复制

我们也可以不对 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
变量相关性热力图
变量相关性热力图

5. 结论

Stata 与 python 交互使我们可以在同一个软件中实现不同软件的操作,从而使我们处理数据与分析增添了更多的可能,本小节介绍的 Stata 中调用 python 并使用sfi.Data()导入 Stata 数据仅是两种软件交互功能实现的一隅,我们可以查看 python 的sfi文档来了解这一模块的更多功能。总之,Stata 与 python 的交互可以博采众长,我们在学习的道路中也需要拓宽眼界,集众软件之长处,从而为科研学习的路上增添实践利器。

6. 参考资料

  • Chuck Huber, 2020, Stata/Python integration part 8: Stata/Python integration part 8: Using the Stata Function Interface to copy data from Stata to Python, -Link-
  • 郭李鹏,连享会推文,Stata 交互:Python-与-Stata-对比.

7. 相关推文

Note:产生如下推文列表的命令为:
lianxh Stata Python +
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh