Сохраните .dta файлы в python - PullRequest
       13

Сохраните .dta файлы в python

12 голосов
/ 21 сентября 2011

Мне интересно, знает ли кто-нибудь пакет Python, который позволяет вам сохранять массивы / повторные массивы в формате .dta программы статистического анализа данных Stata.Это действительно ускорило бы несколько шагов в системе, которую я имею.

Ответы [ 3 ]

8 голосов
/ 29 января 2012

В пакет scikits.statsmodels входит устройство для чтения файлов данных Stata, которое частично опирается на PyDTA, на что указывает @Sven.В частности, genfromdta() вернет ndarray, например, из Python 2.7 / statsmodels 0.3.1:

>>> import scikits.statsmodels.api as sm
>>> arr = sm.iolib.genfromdta('/Applications/Stata12/auto.dta')
>>> type(arr)
<type 'numpy.ndarray'>

Функцию savetxt() можно по очереди использовать для сохранения массива в виде текстового файла., которые можно импортировать в Stata.Например, мы можем экспортировать вышеприведенное как

>>> sm.iolib.savetxt('auto.txt', arr, fmt='%2s', delimiter=",")

и прочитать его в Stata без файла словаря следующим образом:

. insheet using auto.txt, clear

Я считаю, что читатель *.dta должен быть добавлен вближайшее будущее.

7 голосов
/ 21 сентября 2011

Единственная библиотека Python для взаимодействия STATA , которую я мог найти, просто обеспечивает доступ только для чтения к .dta файлам.Однако библиотека R foreign предоставляет функцию write.dta, а RPy предоставляет интерфейс Python для R. Может быть, комбинация этих инструментов может вам помочь.

3 голосов
/ 15 апреля 2014

панды Объекты DataFrame теперь имеют метод to_stata. Так что вы можете сделать, например,

import pandas as pd
df = pd.read_stata('my_data_in.dta')
df.to_stata('my_data_out.dta')

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: первый шаг довольно медленный (в моем тесте около 1 минуты для чтения 51 МБ dta - также см. этот вопрос ), а второй создает файл который может быть намного больше, чем оригинальный (в моем тесте размер идет от 51 МБ до 111 МБ). Этот ответ может показаться менее элегантным, но, вероятно, более эффективным.

...