2011-09-21 13 views
11

Me pregunto si alguien sabe un paquete de Python que le permite guardar matrices numeradas/recarrays en el formato .dta del software de análisis de datos estadísticos Stata. Esto realmente aceleraría unos pocos pasos en un sistema que tengo.Guardar archivos .dta en python

+0

¿Qué se supone exactamente que es un archivo .dta? –

+0

Un archivo .dta es un formato de archivo asociado a datos, utilizado principalmente para el programa informático estadístico STATA. No sé lo suficiente sobre el tipo de archivo para elaborar, pero podría haber más detalles aquí: http://filext.com/file-extension/DTA – mike

+1

Parece que tiene la idea errónea de que todos los archivos tienen la extensión '.dta' tener un formato común. Esto no es verdad. El formato de archivo que le interesa es específico de STATA y no parece usarse en ningún otro software. Aquí está la [documentación del formato] (http://www.stata.com/help.cgi?dta), y dudo mucho que exista una biblioteca que pueda escribir este formato. –

Respuesta

2

pandas Los objetos DataFrame ahora tienen el método "to_stata". Por lo que puede hacer por ejemplo

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

RENUNCIA: el primer paso es bastante lento (en mi prueba, alrededor de 1 minuto para que la lectura de un DTA 51 MB - ver también this question), y la segunda produce un fichero del cual puede ser mucho más grande que el original (en mi prueba, el tamaño va de 51 MB a 111 MB). This answer puede parecer menos elegante, pero probablemente sea más eficiente.

6

El único Python library for STATA interoperability que pude encontrar simplemente proporciona acceso de solo lectura a los archivos .dta. Sin embargo, la biblioteca R foreign proporciona una función write.dta, y RPy proporciona una interfaz de Python a R. Quizás la combinación de estas herramientas pueda ayudarlo.

8

El paquete scikits.statsmodels incluye un lector para archivos de datos Stata, que se basa en parte en PyDTA como lo señala @Sven. En particular, genfromdta() devolverá un ndarray, p. Ej. de 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'> 

La función savetxt() se puede utilizar a su vez para salvar una matriz como un archivo de texto, que puede ser importado en Stata. Por ejemplo, podemos exportar lo anterior como

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

y leerlo en Stata sin un archivo de diccionario de la siguiente manera:

. insheet using auto.txt, clear 

creo que un lector *.dta debe añadirse en un futuro próximo.