Wednesday, 21 December 2016

Python Pandas Exponencial Media Móvil

Biblioteca de análisis de datos Python pandas es una biblioteca de código abierto, con licencia BSD que proporciona estructuras de datos de alto rendimiento y fácil de usar y herramientas de análisis de datos para el lenguaje de programación Python. Pandas es un proyecto patrocinado por NUMFocus. Esto ayudará a asegurar el éxito del desarrollo de los pandas como un proyecto open source de clase mundial. 0.19.1 Final (3 de noviembre de 2016) Esta es una versión de corrección de errores menor de 0.19.0 e incluye algunas pequeñas correcciones de regresión, correcciones de errores y mejoras de rendimiento. Consulte la página v0.19.1 WhatsNew para obtener una descripción general de todos los errores que se han corregido en 0.19.1. 0.19.0 Final (2 de octubre de 2016) Esta es una versión importante de 0.18.1 e incluye el número de cambios en la API, varias nuevas características, mejoras y mejoras de rendimiento junto con un gran número de correcciones de errores. Recomendamos que todos los usuarios actualicen esta versión. Véase ahora readcsv () ahora soporta el análisis de datos categóricos, véase aquí Se ha agregado una función unioncategorical () para combinar categoricals, Ver aquí PeriodIndex ahora tiene su propio período dtype, y cambiado para ser más consistente con otras clases de índice. Véase aquí Estructuras de datos escasas ganado apoyo mejorado de int y bool dtypes, vea aquí Las operaciones de comparación con la serie ya no ignora el índice, ver aquí para una visión general de los cambios API. Introducción de una API de desarrollo de pandas para funciones de utilidad, vea aquí. Deprecation de Panel4D y PanelND. Se recomienda representar estos tipos de datos n-dimensionales con el paquete xarray. Eliminación de los módulos previamente obsoletos pandas. io. data. Pandas. io. wb. Pandas. tools. rplot. Vea la descripción general de Whatsnew para una extensa lista de todas las mejoras y errores que se han corregido en 0.19.0. Por favor reporte cualquier problema aquí Mejor manera de instalar La mejor manera de obtener pandas es instalar a través de conda Builds para osx-64, linux-64, linux-32, win-64, win-32 para Python 2.7, Python 3.4 y Python 3.5 Están disponibles. Conda install pandas Quick vignette ¿Qué problema pandas resolver Python ha sido grande para la munging de datos y la preparación, pero menos para el análisis de datos y modelado. Pandas ayuda a llenar este vacío, lo que le permite llevar a cabo todo su flujo de trabajo de análisis de datos en Python sin tener que cambiar a un lenguaje más específico del dominio como R. Combinado con el excelente kit de herramientas IPython y otras bibliotecas, el entorno para hacer análisis de datos en Python sobresale En el rendimiento, la productividad y la capacidad de colaborar. Pandas no implementa una funcionalidad de modelado significativa fuera de la regresión lineal y panel para esto, mira a statsmodels y scikit-learn. Todavía se necesita más trabajo para hacer de Python un entorno de modelado estadístico de primera clase, pero estamos en camino hacia ese objetivo. Lo que nuestros usuarios tienen que decir 8220 pandas nos permite centrarnos más en la investigación y menos en la programación. Hemos encontrado pandas fácil de aprender, fácil de usar y fácil de mantener. El resultado final es que ha aumentado nuestra productividad. 8221 Director de Optimización amp Analytics 8220 pandas es la herramienta perfecta para salvar la brecha entre las iteraciones rápidas de análisis ad-hoc y código de calidad de producción. Si desea que una herramienta se utilice en una organización multidisciplinaria de ingenieros, matemáticos y analistas, no busque más. 8222 8220 Utilizamos pandas para procesar datos de series de tiempo en nuestros servidores de producción. La simplicidad y elegancia de su API, y su alto nivel de rendimiento para los conjuntos de datos de gran volumen, lo convirtieron en una opción perfecta para nosotros.8221 Destacados de la Biblioteca Un objeto DataFrame rápido y eficiente para la manipulación de datos con indexación integrada. Estructuras de datos en memoria y diferentes formatos: archivos CSV y texto, Microsoft Excel, bases de datos SQL y el rápido formato HDF5. Alineación inteligente de datos y manejo integrado de datos perdidos. Ganan alineación automática basada en etiquetas en los cálculos y manipulan fácilmente datos desordenados en una forma ordenada Flexible reestructuración y pivotamiento de conjuntos de datos Recorte inteligente basado en etiquetas. Indexación de fantasía. Y subconjunto de grandes conjuntos de datos Columnas se pueden insertar y eliminar de las estructuras de datos de tamaño mutabilidad Agregación o transformación de datos con un potente grupo por motor que permite dividir-aplicar-combinar las operaciones en los conjuntos de datos Alto rendimiento combinar y unir conjuntos de datos El eje jerárquico indexación proporciona Una forma intuitiva de trabajar con datos de alta dimensión en una estructura de datos de menor dimensión. Serie de tiempo - funcionalidad: generación y conversión de frecuencia, estadísticas de ventanas en movimiento, regresiones lineales de ventana móvil, cambio de fecha y retraso. Incluso crea desajustes de tiempo específicos de dominio y unirse a series de tiempo sin perder datos Muy optimizado para el rendimiento. Con rutas de código crítico escritas en Cython o C. Python con pandas está en uso en una amplia variedad de dominios académicos y comerciales, incluyendo Finanzas, Neurociencia, Economía, Estadística, Publicidad, Web Analytics, y más. Backtesting un promedio móvil Crossover en Python Con pandas En el artículo anterior sobre Investigación Backtesting Ambientes En Python Con Pandas creamos un entorno de backtesting basado en la investigación orientado a objetos y lo probamos en una estrategia de previsión aleatoria. En este artículo vamos a hacer uso de la maquinaria que introdujimos para llevar a cabo una investigación sobre una estrategia real, a saber, el promedio móvil Crossover en AAPL. Estrategia de crossover de media móvil La técnica de crossover de media móvil es una estrategia de impulso simplista extremadamente conocida. A menudo se considera el ejemplo de Hello World para el comercio cuantitativo. La estrategia descrita aquí es larga solamente. Se crean dos filtros sencillos simples de media móvil, con periodos de retroceso variables, de una serie de tiempo particular. Las señales para comprar el activo ocurren cuando la media móvil de retroceso más corto excede la media móvil de retroceso más larga. Si el promedio más largo excede posteriormente el promedio más corto, el activo se vende de nuevo. La estrategia funciona bien cuando una serie de tiempo entra en un período de fuerte tendencia y luego invierte lentamente la tendencia. Para este ejemplo, he elegido Apple, Inc. (AAPL) como la serie de tiempo, con un breve lookback de 100 días y un largo lookback de 400 días. Este es el ejemplo proporcionado por la biblioteca de comercio algorítmico zipline. Por lo tanto, si queremos implementar nuestro propio backtester debemos asegurarnos de que coincide con los resultados en zipline, como un medio básico de validación. Implementación Asegúrese de seguir el tutorial anterior aquí. Que describe cómo se construye la jerarquía de objetos inicial para el backtester, de lo contrario el código siguiente no funcionará. Para esta implementación en particular he utilizado las siguientes bibliotecas: La implementación de macross. py requiere backtest. py del tutorial anterior. El primer paso es importar los módulos y objetos necesarios: Como en el tutorial anterior, vamos a subclase la clase base abstracta de la estrategia para producir MovingAverageCrossStrategy. Que contiene todos los detalles sobre cómo generar las señales cuando los promedios móviles de AAPL se cruzan entre sí. El objeto requiere una ventana corta y una ventana larga sobre la cual operar. Los valores se han fijado a valores predeterminados de 100 días y 400 días respectivamente, que son los mismos parámetros utilizados en el ejemplo principal de tirolesa. Los promedios móviles se crean mediante el uso de la función rollingmean de los pandas en las barrasCerrar el precio de cierre de la acción AAPL. Una vez que se han construido los promedios móviles individuales, la serie de señales se genera ajustando la colum igual a 1,0 cuando el promedio móvil corto es mayor que el promedio móvil largo, o 0,0 de lo contrario. A partir de esto, los pedidos de posiciones se pueden generar para representar señales comerciales. El MarketOnClosePortfolio está subclasificado de Portfolio. Que se encuentra en backtest. py. Es casi idéntica a la implementación descrita en el tutorial anterior, con la excepción de que las operaciones se llevan a cabo ahora en una base Close-to-Close, en lugar de una base Open-to-Open. Para obtener más información sobre cómo se define el objeto Portfolio, consulte el tutorial anterior. He dejado el código en la integridad y para mantener este tutorial autónomo: Ahora que las clases MovingAverageCrossStrategy y MarketOnClosePortfolio se han definido, una función principal se llamará para vincular todas las funciones. Además, el desempeño de la estrategia será examinado a través de un gráfico de la curva de equidad. El objeto de DataReader de pandas descarga los precios de OHLCV de las acciones de AAPL para el período del 1 de enero de 1990 al 1 de enero de 2002, momento en el que las señales DataFrame se crean para generar las señales de sólo larga duración. Posteriormente, la cartera se genera con una base de capital inicial de 100.000 USD y los rendimientos se calculan sobre la curva de patrimonio. El paso final es utilizar matplotlib para trazar un gráfico de dos cifras de los precios de AAPL, superpuestos con las medias móviles y las señales de compra / venta, así como la curva de equidad con las mismas señales de compra / venta. El código de trazado se toma (y se modifica) a partir del ejemplo de implementación de tirolesa. La salida gráfica del código es la siguiente. Hice uso del comando IPython paste para ponerlo directamente en la consola IPython mientras estaba en Ubuntu, de modo que la salida gráfica permaneció en la vista. Las barras de color rosa representan la compra de la acción, mientras que los downticks negros representan la venta de nuevo: Como se puede ver la estrategia pierde dinero durante el período, con cinco operaciones de ida y vuelta. Esto no es sorprendente teniendo en cuenta el comportamiento de AAPL en el período, que estaba en una ligera tendencia a la baja, seguido por un aumento significativo a partir de 1998. El período de retroceso de las señales de media móvil es bastante grande y esto afectó el beneficio del comercio final , Que de otro modo podría haber hecho rentable la estrategia. En los artículos siguientes crearemos un medio más sofisticado de analizar el rendimiento, así como describiremos cómo optimizar los períodos de retroceso de las señales individuales de media móvil. Herramientas analíticas Análogamente, DataFrame tiene un método cov para calcular covarianzas entre pares de las series en el DataFrame, también Excluyendo NA / valores nulos. Suponiendo que los datos faltantes faltan al azar, esto resulta en una estimación para la matriz de covarianza que es imparcial. Sin embargo, para muchas aplicaciones esta estimación puede no ser aceptable porque no se garantiza que la matriz de covarianza estimada sea positiva semi-definida. Esto podría conducir a correlaciones estimadas que tienen valores absolutos que son mayores que uno, y / o una matriz de covarianza no invertible. Ver Estimación de matrices de covarianza para más detalles. DataFrame. cov también admite una palabra clave opcional minperiods que especifica el número mínimo requerido de observaciones para cada par de columnas para tener un resultado válido. Los pesos utilizados en la ventana se especifican mediante la palabra clave wintype. La lista de tipos reconocidos son: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (necesidades beta) gaussian (necesita std) generalgaussian (necesita poder, ancho) slepian (necesita ancho). Tenga en cuenta que la ventana del vagón es equivalente a mean (). Para algunas funciones de ventana, se deben especificar parámetros adicionales: Para. sum () con un wintype. No hay normalización hecha a los pesos para la ventana. Pasar pesos personalizados de 1, 1, 1 dará un resultado diferente que pasar pesos de 2, 2, 2. por ejemplo. Al pasar un wintype en lugar de especificar explícitamente los pesos, los pesos ya están normalizados para que el mayor peso sea 1. En contraste, la naturaleza del cálculo. mean () es tal que los pesos se normalizan uno con respecto al otro. Los pesos de 1, 1, 1 y 2, 2, 2 dan el mismo resultado. Rolling nuevo tiempo en la versión 0.19.0. Nuevos en la versión 0.19.0 son la capacidad de pasar un offset (o convertible) a un método. rolling () y hacer que produzca ventanas de tamaño variable basadas en la ventana de tiempo pasada. Para cada punto de tiempo, esto incluye todos los valores anteriores que ocurren dentro del delta de tiempo indicado. Esto puede ser particularmente útil para un índice de frecuencia de tiempo no regular. Este es un índice de frecuencia regular. El uso de un parámetro de ventana entero funciona para rodar a lo largo de la frecuencia de la ventana. Especificar un desplazamiento permite una especificación más intuitiva de la frecuencia de rodadura. Utilizando un índice no regular, pero aún monótono, rodar con una ventana entera no imparte ningún cálculo especial. El uso de la especificación de tiempo genera ventanas variables para estos datos escasos. Además, ahora permitimos que un parámetro opcional en el parámetro especifique una columna (en lugar del valor predeterminado del índice) en un DataFrame. Conocimiento del tiempo Rolling vs. Resampling El uso de. rolling () con un índice basado en el tiempo es muy similar al remuestreo. Ambos operan y realizan operaciones reductivas en objetos pandas indexados en el tiempo. Cuando se utiliza. rolling () con un desplazamiento. El desplazamiento es un tiempo-delta. Tome una ventana de búsqueda hacia atrás en el tiempo, y agregue todos los valores en esa ventana (incluyendo el punto final, pero no el punto de inicio). Este es el nuevo valor en ese punto en el resultado. Se trata de ventanas de tamaño variable en el espacio de tiempo para cada punto de la entrada. Obtendrá un resultado del mismo tamaño que la entrada. Cuando se utiliza. resample () con un desplazamiento. Construir un nuevo índice que es la frecuencia del desplazamiento. Para cada contenedor de frecuencia, el agregado apunta desde la entrada dentro de una ventana que mira hacia atrás en el tiempo que cae en ese contenedor. El resultado de esta agregación es la salida para ese punto de frecuencia. Las ventanas tienen un tamaño de tamaño fijo en el espacio de frecuencia. Su resultado tendrá la forma de una frecuencia regular entre el mínimo y el máximo del objeto de entrada original. Para resumir. Rolling () es una operación de ventana basada en el tiempo, mientras que. resample () es una operación de ventana basada en la frecuencia. Centrar las ventanas De forma predeterminada, las etiquetas se ajustan al borde derecho de la ventana, pero una palabra clave central está disponible para que las etiquetas se puedan establecer en el centro. Funciones de ventana binaria cov () y corr () pueden calcular las estadísticas de las ventanas en movimiento sobre dos Series o cualquier combinación de DataFrame / Series o DataFrame / DataFrame. Aquí está el comportamiento en cada caso: dos Series. Calcular la estadística para el emparejamiento. DataFrame / Series. Calcular las estadísticas para cada columna del DataFrame con la serie pasada, devolviendo así un DataFrame. DataFrame / DataFrame. De forma predeterminada, calcular la estadística de coincidencia de nombres de columna, devolviendo un DataFrame. Si se pasa el argumento de palabra clave pairwiseTrue, entonces calcula la estadística para cada par de columnas, devolviendo un Panel cuyos elementos son las fechas en cuestión (consulte la siguiente sección). Computación de covarianzas y correlaciones en pares En el análisis de datos financieros y otros campos es común calcular las matrices de covarianza y correlación para una colección de series de tiempo. A menudo uno también está interesado en la movilidad-ventana covarianza y matrices de correlación. Esto se puede hacer pasando el argumento de palabra clave pairwise, que en el caso de las entradas de DataFrame producirá un Panel cuyos elementos son las fechas en cuestión. En el caso de un solo argumento de DataFrame, el argumento pairwise puede incluso omitirse: Los valores faltantes se ignoran y cada entrada se calcula usando las observaciones completas pairwise. Consulte la sección de covarianza para las advertencias asociadas con este método de cálculo de covarianza y matrices de correlación. Aparte de no tener un parámetro de ventana, estas funciones tienen las mismas interfaces que sus contrapartes de desplazamiento. Como arriba, los parámetros que aceptan son: minperiodos. El umbral de puntos de datos no nulos que se requieren. El valor predeterminado es el mínimo necesario para calcular la estadística. No se emitirán NaNs una vez que se hayan observado puntos de datos no nulos de los minperiodos. centrar. Boolean, si se deben establecer las etiquetas en el centro (por defecto es False) La salida de los métodos. rolling y. expanding no devuelve un NaN si hay al menos valores no nulos de minperiodos en la ventana actual. Esto difiere de cumsum. Cumprod. Cummax Y cummin. Que devuelven NaN en la salida dondequiera que se encuentre un NaN en la entrada. Una estadística de ventana en expansión será más estable (y menos sensible) que su contrapartida de ventana de balanceo a medida que el tamaño creciente de la ventana disminuye el impacto relativo de un punto de datos individual. A modo de ejemplo, aquí está la salida media () para el conjunto de datos de series temporales anteriores: Ventas Exponencialmente Ponderadas Un conjunto relacionado de funciones son versiones ponderadas exponencialmente de varias de las estadísticas anteriores. Se accede a una interfaz similar a. rolling y. expanding a través del método. ewm para recibir un objeto EWM. Se proporcionan una serie de métodos EW en expansión (exponencialmente ponderados):


No comments:

Post a Comment