Запустите файл Stata do из Python

У меня есть скрипт Python который очищает и выполняет базовые статистические вычисления на большом наборе данных панели ( 2,000,000+ observations ).

Я считаю, что некоторые из этих задач лучше подходят для Stata и написали файл do с необходимыми командами. Таким образом, я хочу запустить .do-файл в моем коде Python. Как я могу обратиться за .do файла .do из Python ?

3 Solutions collect form web for “Запустите файл Stata do из Python”

Я думаю, что @ user229552 указывает в правильном направлении. Можно использовать модуль subprocess Python. Ниже пример, который работает для меня с ОС Linux.

Предположим, у вас есть файл Python с именем pydo.py со следующим:

 import subprocess ## Do some processing in Python ## Set do-file information dofile = "/home/roberto/Desktop/pyexample3.do" cmd = ["stata", "do", dofile, "mpg", "weight", "foreign"] ## Run do-file subprocess.call(cmd) 

и файл pyexample3.do do-file с именем pyexample3.do , со следующим:

 clear all set more off local y `1' local x1 `2' local x2 `3' display `"first parameter: `y'"' display `"second parameter: `x1'"' display `"third parameter: `x2'"' sysuse auto regress `y' `x1' `x2' exit, STATA clear 

Затем выполнение pydo.py в окне терминала работает так, как ожидалось.

Вы также можете определить функцию Python и использовать ее:

 ## Define a Python function to launch a do-file def dostata(dofile, *params): ## Launch a do-file, given the fullpath to the do-file ## and a list of parameters. import subprocess cmd = ["stata", "do", dofile] for param in params: cmd.append(param) return subprocess.call(cmd) ## Do some processing in Python ## Run a do-file dostata("/home/roberto/Desktop/pyexample3.do", "mpg", "weight", "foreign") 

Полный вызов из терминала с результатами:

 roberto@roberto-mint ~/Desktop $ python pydo.py ___ ____ ____ ____ ____ (R) /__ / ____/ / ____/ ___/ / /___/ / /___/ 12.1 Copyright 1985-2011 StataCorp LP Statistics/Data Analysis StataCorp 4905 Lakeway Drive College Station, Texas 77845 USA 800-STATA-PC http://www.stata.com 979-696-4600 stata@stata.com 979-696-4601 (fax) Notes: 1. Command line editing enabled . do /home/roberto/Desktop/pyexample3.do mpg weight foreign . clear all . set more off . . local y `1' . local x1 `2' . local x2 `3' . . display `"first parameter: `y'"' first parameter: mpg . display `"second parameter: `x1'"' second parameter: weight . display `"third parameter: `x2'"' third parameter: foreign . . sysuse auto (1978 Automobile Data) . regress `y' `x1' `x2' Source | SS df MS Number of obs = 74 -------------+------------------------------ F( 2, 71) = 69.75 Model | 1619.2877 2 809.643849 Prob > F = 0.0000 Residual | 824.171761 71 11.608053 R-squared = 0.6627 -------------+------------------------------ Adj R-squared = 0.6532 Total | 2443.45946 73 33.4720474 Root MSE = 3.4071 ------------------------------------------------------------------------------ mpg | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- weight | -.0065879 .0006371 -10.34 0.000 -.0078583 -.0053175 foreign | -1.650029 1.075994 -1.53 0.130 -3.7955 .4954422 _cons | 41.6797 2.165547 19.25 0.000 37.36172 45.99768 ------------------------------------------------------------------------------ . . exit, STATA clear 

Источники:

http://www.reddmetrics.com/2011/07/15/calling-stata-from-python.html

http://docs.python.org/2/library/subprocess.html

http://www.stata.com/support/faqs/unix/batch-mode/

Другой способ использования Python и Stata вместе можно найти в

http://ideas.repec.org/c/boc/bocode/s457688.html

http://www.stata.com/statalist/archive/2013-08/msg01304.html

Если вы используете это в командной строке, вы должны иметь возможность вызывать Stata из командной строки из python (я не знаю, как вызвать команду оболочки из Python, но она не должна быть слишком сложной , см. здесь: вызов внешней команды в Python ). Чтобы запустить Stata из командной строки (так называемый пакетный режим), см. Здесь: http://www.stata.com/support/faqs/unix/batch-mode/

Этот ответ расширяет ответ @Roberto Ferrer, решая несколько проблем, с которыми я столкнулся.

Stata в системном пути

Чтобы stata запускал код, он должен быть правильно настроен в системном пути (по крайней мере в Windows). По крайней мере, для меня это не было автоматически настроено при установке Stata, и я нашел, что самая простая поправка заключалась в том, чтобы поместить полный путь (для меня это было "C:\Program Files (x86)\Stata12\Stata-64 ), т.е. :

 cmd = ["C:\Program Files (x86)\Stata12\Stata-64","do", dofile]` 

Как спокойно запустить код в фоновом режиме

Можно заставить код работать тихо в фоновом режиме (т. Е. Не открывать Stata каждый раз), добавив команду /e ie

cmd = ["C:\Program Files (x86)\Stata12\Stata-64,"/e","do", dofile]

Место хранения файла журнала

Наконец, если вы спокойно работаете в фоновом режиме, Stata захочет сохранить файлы журнала. Это будет сделано в рабочем каталоге cmd . Это должно варьироваться в зависимости от того, где выполняется код, но для меня, поскольку я выполнял Python из Notepad ++, он хотел сохранить файлы журнала в C:\Program Files (x86)\Notepad++ , у которых Stata не было записи -доступ к. Это можно изменить, указав рабочий каталог при вызове подпроцесса.

Эти изменения кода Roberto Ferrer приводят к:

 def dostata(dofile, *params): cmd = ["C:\Program Files (x86)\Stata12\Stata-64","/e","do", dofile] for param in params: cmd.append(param) return (subprocess.call(cmd, cwd=r'C:\location_to_save_log_files')) 
  • Миграция из Stata в Python
  • эквивалент панды для кодировки Stata
  • Запись в файл Stata в Python. Ядро умерло. Зачем? Что делать?
  • Python - лучший язык программирования в мире.