社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

连享会 • 2 周前 • 25 次点击  

👇 连享会 · 推文导航 | www.lianxh.cn

连享会课程 · 2024 Stata 寒假班

作者: Chuck Huber
编译: 丁晨 (厦门大学)
邮箱: 3049378404@qq.com

致谢: 本文摘自以下文章,特此感谢!
Source: Chuck Huber, 2020, Stata/Python integration part 9: Using the Stata Function Interface to copy data from Python to Stata, -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-

中文编译稿列表如下:

  • Stata-Python交互-9:将python数据导入Stata
  • Stata-Python交互-8:将Stata数据导入Python
  • Stata-Python交互-7:在Stata中实现机器学习-支持向量机
  • Stata-Python交互-6:调用APIs和JSON数据
  • Stata-Python交互-5:边际效应三维立体图示
  • Stata-Python交互-4:如何调用Python宏包
  • Stata-Python交互-3:如何安装Python宏包
  • Stata-Python交互-2:在Stata中调用Python的三种方式
  • Stata-Python交互-1:二者配合的基本设定


目录

  • 1. 导读

  • 2. 实例说明

    • 2.1 下载并处理数据

    • 2.2 拷贝数据到Stata

    • 2.3 作图

  • 3. 参考资料

  • 4. 相关推文



1. 导读

本文介绍如何使用SFI模块将python数据拷贝到Stata,原文使用python的yfinance模块从Yahoo!Finance网站下载道琼斯工业指数(DJIA)。鉴于国内连接yfinance不太稳定。本文改用pandas_datareader获取道指(DJIA),并使用Stata画出下图:

如果你对Stata+Python不熟悉,请先阅读以下几篇文章。

  1. 在Stata16中如何快速配置Python?
  2. 如何在stata中调用python

2. 实例说明

2.1 下载并处理数据

首先我们使用pandas_datareader.data下载道指:

. python
----------------------------------------------- python (type end to exit) -----------------------
>>> import pandas_datareader.data as web
>>> dowjones=web.DataReader('^DJI','stooq','2010-01-01','2019-12-31')
>>> dowjones
Open High Low Close Volume
Date
2019-12-31 28414.64 28547.35 28376.49 28538.44 193336533
2019-12-30 28654.76 28664.69 28428.98 28462.14 181507192
2019-12-27 28675.34 28701.66 28608.98 28645.26 182181663
2019-12-26 28539.46 28624.10 28535.15 28621.39 156025977
2019-12-24 28572.57 28576.80 28503.21 28515.45 86151979
... ... ... ... ... ...
2010-01-08 10606.40 10619.40 10554.30 10618.20 172637555
2010-01-07 10571.10 10612.40 10505.20 10606.90 217441286
2010-01-06 10564.70 10595.00 10546.50 10573.70 186108764
2010-01-05 10584.60 10584.60 10522.50 10572.00 188599202
2010-01-04 10430.70 10605.00 10430.70 10584.00 179768845

[2516 rows x 5 columns]
>>> end
-------------------------------------------------------------------------------------------------

下载的道指数据,是以日期为索引,下面将索引项变更为字符串项:

. python
----------------------------------------------- python (type end to exit) -----------------------
>>> dowjones.index
DatetimeIndex(['2019-12-31', '2019-12-30', '2019-12-27', '2019-12-26',
'2019-12-24', '2019-12-23', '2019-12-20', '2019-12-19',
'2019-12-18', '2019-12-17',
...
'2010-01-15', '2010-01-14', '2010-01-13', '2010-01-12',
'2010-01-11', '2010-01-08', '2010-01-07', '2010-01-06',
'2010-01-05', '2010-01-04'],
dtype='datetime64[ns]', name='Date', length=2516, freq=None)
>>> dowjones['dowdate']=dowjones.index.astype(str)
>>> dowjones['dowdate']
Date
2019-12-31 2019-12-31
2019-12-30 2019-12-30
2019-12-27 2019-12-27
2019-12-26 2019-12-26
2019-12-24 2019-12-24
...
2010-01-08 2010-01-08
2010-01-07 2010-01-07
2010-01-06 2010-01-06
2010-01-05 2010-01-05
2010-01-04 2010-01-04
Name: dowdate, Length: 2516, dtype: object
>>> end
-------------------------------------------------------------------------------------------------

2.2 拷贝数据到Stata

使用python的SFI模块,将数据拷贝到Stata中:

. python
----------------------------------------------- python (type end to exit) -----------------------
>>> from sfi import Data
>>> Data.setObsTotal(len(dowjones))
>>> Data.addVarStr("dowdate",10)
>>> Data.addVarDouble("dowclose")
>>> Data.addVarInt("dowvolume")
>>>
>>> Data.store("dowdate",None,dowjones['dowdate'],None)
>>> Data.store("dowclose",None,dowjones['Close'],None)
>>> Data.store("dowvolume",None,dowjones['Volume'],None)
>>> end
-------------------------------------------------------------------------------------------------

道指数据摘要:

. list in 1/5, abbreviate(9)

+-----------------------------------+
| dowdate dowclose dowvolume |
|-----------------------------------|
1. | 2019-12-31 28538.44 1.9e+08 |
2. | 2019-12-30 28462.14 1.8e+08 |
3. | 2019-12-27 28645.26 1.8e+08 |
4. | 2019-12-26 28621.39 1.6e+08 |
5. | 2019-12-24 28515.45 8.6e+07 |
+-----------------------------------+

变量格式转换

  1. dowdate:String ->Date,生成新变量date
  2. dowvolume:变更以百万股为单位
. generate date = date(dowdate,"YMD")

. format %tdCCYY-NN-DD date

. replace dowvolume = dowvolume/1000000
(2,516 real changes made)

. format %10.2fc dowvolume

. label variable dowvolume "DJIA Volume (Millions of Shares)"

. list in 1/5, abbreviate(9)

+------------------------------------------------+
| dowdate dowclose dowvolume date |
|------------------------------------------------|
1. | 2019-12-31 28538.44 193.34 2019-12-31 |
2. | 2019-12-30 28462.14 181.51 2019-12-30 |
3. | 2019-12-27 28645.26 182.18 2019-12-27 |
4. | 2019-12-26 28621.39 156.03 2019-12-26 |
5. | 2019-12-24 28515.45 86.15 2019-12-24 |
+------------------------------------------------+

2.3 作图

以date为横坐标,dowclose为纵坐标y(左侧),做折线图;dowvolume为纵坐标y2(右侧),做直方图;Stata基础命令详见连享会公开课-stata33讲

twoway (line dowclose date, lcolor(green) lwidth(medium))         ///
(bar dowvolume date, fcolor(blue) lcolor(blue) yaxis(2)), ///
title("Dow Jones Industrial Average (2010 - 2019)") ///
xtitle("") ytitle("") ytitle("", axis(2)) ///
xlabel(, labsize(small) angle(horizontal)) ///
ylabel(5000(5000)30000, ///
labsize(small) labcolor(green) ///
angle(horizontal) format(%9.0fc)) ///
ylabel(0(500)3000, ///
labsize(small) labcolor(blue) ///
angle(horizontal) axis(2)) ///
legend(order(1 "Closing Price" 2 "Volume (millions)") ///
cols(1) position(10) ring(0))
dowjones

3. 参考资料

  1. Stata/Python integration part 9: Using the Stata Function Interface to copy data from Python to Stata
  2. Stata-Python模块
  3. 【Python搞量化】pandas_datareader 经济和金融数据读取API介绍

4. 相关推文

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

  • 专题:Stata入门
    • 使用 Jupyter Notebook 配置 Stata\Python\Julia\R
  • 专题:Stata教程
    • Stata-Python交互-9:将python数据导入Stata
    • Stata-Python交互-8:将Stata数据导入Python
    • Stata-Python交互-7:在Stata中实现机器学习-支持向量机
    • Stata-Python交互-6:调用APIs和JSON数据
    • Stata-Python交互-5:边际效应三维立体图示
    • Stata-Python交互-4:如何调用Python宏包
    • Stata-Python交互-3:如何安装Python宏包
    • Stata-Python交互-2:在Stata中调用Python的三种方式
    • Stata-Python交互-1:二者配合的基本设定
  • 专题:Stata程序
    • Stata程序:是否有类似-Python-中的-zip()-函数
  • 专题:文本分析-爬虫
    • VaR 风险价值: Stata 及 Python 实现
    • 支持向量机:Stata 和 Python 实现
  • 专题:Python-R-Matlab
    • Stata交互:Python-与-Stata-对比
    • Python+Stata:批量制作个性化结业证书
  • 专题:其它
    • ES 期望损失: Stata 及 Python 实现

课程推荐:Stata2R:针对 Stata 用户的 R 课程
主讲老师:游万海 (福州大学)
课程时间:2023 年 12 月 3/10/17 (三个周日)
🍓 课程主页https://www.lianxh.cn

New! Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/164623
 
25 次点击