Mucha gente usa una herramienta principal como Excel u otra hoja de cálculo, SPSS, Stata o R para sus necesidades estadísticas. Pueden recurrir a algún paquete específico para necesidades muy especiales, pero se pueden hacer muchas cosas con una simple hoja de cálculo o un paquete de estadísticas generales o un entorno de programación de estadísticas.
Siempre me ha gustado Python como lenguaje de programación, y para necesidades simples, es fácil escribir un programa corto que calcule lo que necesito. Matplotlib me permite trazarlo.
¿Alguien ha cambiado completamente de, digamos R, a Python? R (o cualquier otro paquete de estadísticas) tiene muchas funciones específicas para las estadísticas, y tiene estructuras de datos que le permiten pensar en las estadísticas que desea realizar y menos en la representación interna de sus datos. Python (o algún otro lenguaje dinámico) tiene el beneficio de permitirme programar en un lenguaje familiar de alto nivel, y me permite interactuar programáticamente con sistemas del mundo real en los que residen los datos o desde los cuales puedo tomar medidas. Pero no he encontrado ningún paquete de Python que me permita expresar cosas con "terminología estadística", desde estadísticas descriptivas simples hasta métodos multivariados más complicados.
¿Qué me puede recomendar si quisiera usar Python como un "banco de trabajo de estadísticas" para reemplazar R, SPSS, etc.?
¿Qué ganaría y perdería, según su experiencia?
Respuestas:
Es difícil ignorar la gran cantidad de paquetes estadísticos disponibles en R / CRAN. Dicho esto, paso mucho tiempo en Python land y nunca disuadiría a nadie de divertirse tanto como yo. :) Aquí hay algunas bibliotecas / enlaces que pueden resultarle útiles para el trabajo estadístico.
NumPy / Scipy Probablemente ya sepas sobre esto. Pero permítanme señalar el Cookbook donde puede leer sobre muchas facilidades estadísticas ya disponibles y la Lista de ejemplos, que es una gran referencia para las funciones (incluida la manipulación de datos y otras operaciones). Otra referencia útil son las distribuciones de John Cook en Scipy .
pandas Esta es una biblioteca realmente agradable para trabajar con datos estadísticos: datos tabulares, series de tiempo, datos de panel. Incluye muchas funciones integradas para resúmenes de datos, agrupación / agregación, pivote. También tiene una biblioteca de estadísticas / econometría.
Larry Matriz etiquetada que juega bien con NumPy. Proporciona funciones estadísticas que no están presentes en NumPy y que son buenas para la manipulación de datos.
python-statlib Un esfuerzo bastante reciente que combinó varias bibliotecas de estadísticas dispersas. Útil para estadísticas básicas y descriptivas si no está utilizando NumPy o pandas.
statsmodels Modelado estadístico: modelos lineales, GLM, entre otros.
scikits Paquetes informáticos estadísticos y científicos: notablemente suavizado, optimización y aprendizaje automático.
PyMC Para sus necesidades de modelado jerárquico / bayesiano / MCMC. Muy recomendable.
Modelos PyMix Mixture.
Biopython Útil para cargar sus datos biológicos en python, y proporciona algunas herramientas rudimentarias de estadística / aprendizaje automático para el análisis.
Si la velocidad se convierte en un problema, considere Theano , utilizado con buen éxito por las personas de aprendizaje profundo.
Hay muchas otras cosas por ahí, pero esto es lo que considero más útil en la línea que mencionaste.
fuente
Como plataforma numérica y sustituto de MATLAB, Python alcanzó la madurez hace al menos 2-3 años, y ahora es mucho mejor que MATLAB en muchos aspectos. Traté de cambiarme a Python desde R por esa época, y fallé miserablemente. Hay demasiados paquetes de R que uso a diario que no tienen el equivalente de Python. La ausencia de ggplot2 es suficiente para ser un showtopper, pero hay muchos más. Además de esto, R tiene una mejor sintaxis para el análisis de datos. Considere el siguiente ejemplo básico:
Python :
R :
¿Qué consideras más expresivo? En R, puede pensar en términos de variables y puede extender fácilmente un modelo, por ejemplo,
En comparación con R, Python es un lenguaje de bajo nivel para la construcción de modelos.
Si tuviera menos requisitos para funciones estadísticas avanzadas y ya estuviera codificando Python en un proyecto más grande, consideraría a Python como un buen candidato. También lo consideraría cuando se necesita un enfoque básico, ya sea por limitaciones de velocidad o porque los paquetes R no proporcionan una ventaja.
Para aquellos que están haciendo estadísticas relativamente avanzadas en este momento , la respuesta es obvia y no . De hecho, creo que Python limitará su forma de pensar sobre el análisis de datos. Tomará algunos años y muchos años de esfuerzos para producir los reemplazos de módulos para los 100 paquetes R esenciales, e incluso entonces, Python se sentirá como un lenguaje en el que se han incorporado las capacidades de análisis de datos. Dado que R ya ha capturado la mayor proporción relativa de estadísticos aplicados en varios campos, no veo que esto suceda pronto. Dicho esto, es un país libre, y conozco personas que realizan estadísticas en APL y C.
fuente
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()
. Statsmodels todavía está muy por detrás de otros paquetes estadísticos como R en términos de cobertura, pero hay más y más cosas que puede hacer en python antes de tener que tomar otro idioma o paquete estadístico. (GEE y Mixed estarán en el próximo lanzamiento.)Primero, déjame decirte que estoy de acuerdo con la respuesta de John D Cook: Python no es un lenguaje específico de dominio como R, y en consecuencia, hay mucho más que podrás hacer con él más adelante. Por supuesto, R siendo un DSL significa que los últimos algoritmos publicados en JASA seguramente estarán en R. Si está haciendo un trabajo principalmente ad hoc y quiere experimentar con la última técnica de regresión de lazo, digamos, R es difícil de superar. Si realiza más trabajo analítico de producción, se integra con el software y los entornos existentes y le preocupa la velocidad, la extensibilidad y la capacidad de mantenimiento, Python le servirá mucho mejor.
En segundo lugar, ars dio una gran respuesta con buenos enlaces. Aquí hay algunos paquetes más que considero esenciales para el trabajo analítico en Python:
Si desea una consola / IDE interactiva más parecida a MATLAB, consulte Spyder o el complemento PyDev para Eclipse .
fuente
No creo que haya ningún argumento de que la gama de paquetes estadísticos en cran y Bioconductor supere con creces cualquier cosa que se ofrezca desde otros idiomas, sin embargo, eso no es lo único que se debe considerar.
En mi investigación, uso R cuando puedo pero a veces R es demasiado lento. Por ejemplo, una gran ejecución MCMC.
Recientemente, combiné Python y C para abordar este problema. Breve resumen: ajustar un modelo de población estocástica grande con ~ 60 parámetros e inferir alrededor de 150 estados latentes usando MCMC.
for
bucle de python , llame a las funciones de C que actualizaron los parámetros y calcularon la probabilidad.Un cálculo rápido mostró que el programa gastó el 95% en funciones de C. Sin embargo, no tuve que escribir código C doloroso para leer datos o construir estructuras de datos C.
Sé que también hay rpy , donde python puede llamar a las funciones R. Esto puede ser útil, pero si "solo" hace estadísticas, entonces usaría R.
fuente
Las siguientes discusiones de StackOverflow pueden ser útiles
fuente
No he visto el scikit-learn mencionado explícitamente en las respuestas anteriores. Es un paquete de Python para el aprendizaje automático en Python. Es bastante joven pero crece extremadamente rápido (descargo de responsabilidad: soy un desarrollador de scikit-learn). Sus objetivos son proporcionar herramientas algorítmicas de aprendizaje automático estándar en una interfaz unificada con un enfoque en la velocidad y la usabilidad. Que yo sepa, no puedes encontrar nada similar en Matlab. Sus puntos fuertes son:
Una documentación detallada , con muchos ejemplos.
Herramientas de aprendizaje supervisado estándar de alta calidad (regresión / clasificación). Específicamente:
SVM muy versátil (basado en libsvm, pero con integración de parches externos y mucho trabajo en el enlace de Python)
Modelos lineales penalizados ( lazo , regresión logística dispersa ...) con implementaciones eficientes.
La capacidad de realizar la selección de modelos mediante validación cruzada utilizando múltiples CPU
Aprendizaje no supervisado para explorar los datos o hacer una reducción de la primera dimensionalidad, que puede encadenarse fácilmente al aprendizaje supervisado.
Código abierto, licencia BSD. Si no se encuentra en un entorno puramente académico (estoy en lo que sería un laboratorio nacional en el estado), esto es muy importante ya que los costos de Matlab son muy altos y podría estar pensando en obtener productos de su trabajo.
Matlab es una gran herramienta, pero en mi propio trabajo, scipy + scikit-learn está comenzando a darme una ventaja sobre Matlab porque Python hace un mejor trabajo con la memoria debido a su mecanismo de visualización (y tengo grandes datos), y porque el scikit-learn me permite comparar fácilmente diferentes enfoques.
fuente
Un beneficio de mudarse a Python es la posibilidad de hacer más trabajo en un idioma. Python es una opción razonable para descifrar números, escribir sitios web, secuencias de comandos administrativas, etc. Por lo tanto, si realiza sus estadísticas en Python, no tendría que cambiar de idioma para realizar otras tareas de programación.
Actualización: El 26 de enero de 2011, Microsoft Research anunció Sho , un nuevo entorno basado en Python para el análisis de datos. Todavía no he tenido la oportunidad de probarlo, pero parece una posibilidad interesante si quiero ejecutar Python y también interactuar con las bibliotecas .NET.
fuente
Quizás esta respuesta sea una trampa, pero parece extraño que nadie haya mencionado el proyecto rpy , que proporciona una interfaz entre R y Python. Obtiene una API pitónica para la mayoría de las funcionalidades de R mientras conserva la sintaxis (diría mejor), el procesamiento de datos y, en algunos casos, la velocidad de Python. Es poco probable que Python tenga alguna vez tantas herramientas de estadísticas de vanguardia como R, solo porque R es un dsl y la comunidad de estadísticas está más invertida en R que posiblemente en cualquier otro idioma.
Veo esto como análogo al uso de un ORM para aprovechar las ventajas de SQL, al tiempo que permite que Python sea Python y SQL sea SQL.
Otros paquetes útiles específicamente para estructuras de datos incluyen:
fuente
Soy un bioestadístico en lo que es esencialmente una tienda R (~ 80 de las personas usan R como su herramienta principal). Aún así, paso aproximadamente 3/4 de mi tiempo trabajando en Python. Atribuyo esto principalmente al hecho de que mi trabajo involucra enfoques bayesianos y de aprendizaje automático para el modelado estadístico. Python se acerca mucho más al punto óptimo de rendimiento / productividad que R, al menos para los métodos estadísticos que son iterativos o basados en simulación. Si estuviera realizando ANOVAS, regresiones y pruebas estadísticas, estoy seguro de que usaría principalmente R. Sin embargo, la mayor parte de lo que necesito no está disponible como un paquete R enlatado.
fuente
Me gustaría decir que desde el punto de vista de alguien que depende en gran medida de modelos lineales para mi trabajo estadístico y ama a Python por otros aspectos de mi trabajo, me ha decepcionado mucho Python como plataforma para hacer cualquier cosa que no sean estadísticas bastante básicas.
Creo que R tiene mucho mejor apoyo de la comunidad estadística, una implementación mucho mejor de modelos lineales y, para ser sincero desde el punto de vista estadístico, incluso con excelentes distribuciones como Enthought, Python se siente un poco como el Salvaje Oeste.
Y a menos que esté trabajando solo, las probabilidades de que tenga colaboradores que usan Python para estadísticas, en este momento, son bastante escasas.
fuente
Realmente no hay necesidad de renunciar a R por Python de todos modos. Si utiliza IPython con una pila completa, tiene extensiones R, Octave y Cython, por lo que puede usar esos idiomas de manera fácil y limpia en sus notebooks IPython. También tiene soporte para pasar valores entre ellos y su espacio de nombres Python. Puede generar sus datos como trazados, utilizando matplotlib y como expresiones matemáticas correctamente representadas. Hay muchas otras funciones, y puede hacer todo esto en su navegador.
IPython ha recorrido un largo camino :)
fuente
Lo que estás buscando se llama Sage: http://www.sagemath.org/
Es una excelente interfaz en línea para una combinación bien construida de herramientas de Python para las matemáticas.
fuente
Rpy2 - juega con R y quédate en Python ...
Elaboración adicional por solicitud de Gung:
La documentación de Rpy2 se puede encontrar en http://rpy.sourceforge.net/rpy2/doc-dev/html/introduction.html
De la documentación, La interfaz de alto nivel en rpy2 está diseñada para facilitar el uso de R por parte de los programadores de Python. Los objetos R se exponen como instancias de clases implementadas en Python, con funciones R como métodos vinculados a esos objetos en varios casos. Esta sección también contiene una introducción a los gráficos con R: gráficos enrejados (enrejados), así como la gramática de los gráficos implementados en ggplot2, que permite hacer gráficos complejos e informativos con poco código escrito, mientras que los gráficos de cuadrícula subyacentes permiten toda la personalización posible.
Por qué me gusta:
Puedo procesar mis datos usando la flexibilidad de python, convertirlos en una matriz usando numpy o pandas y hacer el cálculo en R, y recuperar los objetos r para realizar el procesamiento posterior. Utilizo econometría y Python simplemente no tendrá las herramientas de estadísticas de vanguardia de R. Y es poco probable que R sea tan flexible como Python. Esto requiere que entiendas R. Afortunadamente, tiene una buena comunidad de desarrolladores.
Rpy2 en sí está bien soportado y el caballero que lo apoya frecuenta los foros SO. La instalación de Windows puede ser un poco dolorosa: https://stackoverflow.com/questions/5068760/bizzarre-issue-trying-to-make-rpy2-2-1-9-work-with-r-2-12-1-using -python-2-6-un? rq = 1 podría ayudar.
fuente
Yo uso Python para análisis estadísticos y pronósticos. Como se mencionó anteriormente, Numpy y Matplotlib son buenos caballos de batalla. También uso ReportLab para producir archivos PDF.
Actualmente estoy mirando tanto a Resolver como a Pyspread, que son aplicaciones de hoja de cálculo tipo Excel basadas en Python. Resolver es un producto comercial, pero Pyspread sigue siendo de código abierto. (Disculpas, estoy limitado a un solo enlace)
fuente
gran visión general hasta ahora. Estoy usando python (específicamente scipy + matplotlib) como reemplazo de matlab desde hace 3 años trabajando en la Universidad. A veces todavía vuelvo porque estoy familiarizado con bibliotecas específicas, por ejemplo, el paquete wavelet de matlab es puramente increíble.
Me gusta el http://enthought.com/ distribución python. Es comercial, pero gratuito para fines académicos y, hasta donde yo sé, es completamente de código abierto. Como estoy trabajando con muchos estudiantes, antes de usar entusiasmo, a veces era problemático para ellos instalar numpy, scipy, ipython, etc. Enthought proporciona un instalador para Windows, Linux y Mac.
Otros dos paquetes que vale la pena mencionar:
ipython (ya viene con entusiasmo) gran shell avanzado. una buena introducción está en showmedo http://showmedo.com/videotutorials/series?name=PythonIPythonSeries
nltk: el paquete de herramientas de lenguaje natural http://www.nltk.org/ gran paquete en caso de que desee hacer algunas estadísticas / aprendizaje automático en cualquier corpus.
fuente
Esta es una pregunta interesante, con algunas respuestas geniales.
Puede encontrar alguna discusión útil en un artículo que escribí con Roseline Bilina. La versión final está aquí: http://www.enac.fr/recherche/leea/Steve%20Lawford/papers/python_paper_revised.pdf (desde entonces ha aparecido, en casi esta forma, como "Python para la Investigación Unificada en Econometría y Estadísticas ", en Econometric Reviews (2012), 31 (5), 558-591).
fuente
Quizás no esté directamente relacionado, pero R tiene un buen entorno GUI para sesiones interactivas (editar: en Mac / Windows). IPython es muy bueno, pero para un entorno más cercano al de Matlab, puede probar Spyder o IEP. Últimamente tuve más suerte usando IEP, pero Spyder parece más prometedor.
IEP: http://code.google.com/p/iep/
Spyder: http://packages.python.org/spyder/
Y el sitio IEP incluye una breve comparación de software relacionado: http://code.google.com/p/iep/wiki/Alternatives
fuente
Encontré una gran introducción a los pandas aquí que sugiero revisar. Pandas es un conjunto de herramientas increíble y proporciona las capacidades de análisis de datos de alto nivel de R con las amplias bibliotecas y la calidad de producción de Python.
Esta publicación de blog ofrece una gran introducción a Pandas desde la perspectiva de un principiante completo:
http://manishamde.github.com/blog/2013/03/07/pandas-and-python-top-10/
fuente
Debo agregar un agradecimiento para Sho, el entorno informático numérico construido en IronPython. Lo estoy usando ahora para la clase de aprendizaje automático de Stanford y ha sido realmente útil. Está construido en paquetes de álgebra lineal y capacidades de gráficos. Siendo .Net es fácil de extender con C # o cualquier otro lenguaje .Net. Me ha resultado mucho más fácil comenzar, siendo un usuario de Windows, que Python y NumPy.
fuente
Nadie ha mencionado a Orange antes:
No lo uso a diario, pero es una visita obligada para cualquiera que prefiera la GUI a la interfaz de línea de comandos.
Incluso si prefiere este último, Orange es una buena cosa para familiarizarse, ya que puede importar fácilmente piezas de Orange a sus scripts de Python en caso de que necesite alguna de sus funciones.
fuente
Tenga en cuenta que SPSS Statistics tiene una interfaz Python integrada (también R). Por lo tanto, puede escribir programas de Python que utilicen procedimientos de Estadísticas y producir la salida de Estadísticas bien formateada habitual o devolver los resultados a su programa para su posterior procesamiento. O puede ejecutar programas de Python en la secuencia de comandos de Estadísticas. Todavía tiene que conocer el lenguaje de comando de estadísticas, pero puede aprovechar toda la gestión de datos, resultados de presentación, etc. que proporciona Estadísticas, así como los procedimientos.
fuente
La comparación reciente de DataCamp proporciona una imagen clara sobre R y Python.
El uso de estos dos idiomas en el campo de análisis de datos. Python se usa generalmente cuando las tareas de análisis de datos deben integrarse con aplicaciones web o si el código de estadísticas debe incorporarse a una base de datos de producción. R se utiliza principalmente cuando las tareas de análisis de datos requieren computación independiente o análisis en servidores individuales.
Lo encontré muy útil en este blog y espero que ayude a otros a comprender las tendencias recientes en ambos idiomas. Julia también viene por la zona. Espero que esto ayude !
fuente
Creo que Python es un banco de trabajo superior en mi campo. Realizo muchos raspados, disputas de datos, trabajo de datos grandes, análisis de redes, modelado bayesiano y simulaciones. Por lo general, todas estas cosas necesitan velocidad y flexibilidad, por lo que creo que Python funciona mejor que R en estos casos. Aquí hay algunas cosas sobre Python que me gustan (algunas se mencionan anteriormente, otros puntos no):
-Sintaxis del limpiador; Código más legible. Creo que Python es un lenguaje más moderno y sintácticamente consistente.
-Python tiene Notebook, Ipython y otras herramientas increíbles para compartir código, colaboración, publicación.
-El cuaderno de iPython le permite a uno usar R en el código de Python, por lo que siempre es posible volver a R.
-Sustancialmente más rápido sin recurrir a C. El uso de Cython, NUMBA y otros métodos de integración de C pondrá su código a velocidades comparables a la C. pura. Esto, hasta donde yo sé, no se puede lograr en R.
-Pandas, Numpy y Scipy soplan R estándar fuera del agua. Sí, hay algunas cosas que R puede hacer en una sola línea, pero toma Pandas 3 o 4. Sin embargo, en general, Pandas puede manejar conjuntos de datos más grandes, es más fácil de usar y proporciona una flexibilidad increíble con respecto a la integración con otros Python Paquetes y métodos.
-Python es más estable. Intente cargar un conjunto de datos de 2 gig en RStudio.
-Un paquete ordenado que no parece mencionado anteriormente es PyMC3, un gran paquete general para la mayoría de sus modelos bayesianos.
-Algunos, antes mencionan ggplot2 y grub sobre su ausencia de Python. Si alguna vez usó las funcionalidades gráficas de Matlab y / o usó matplotlib en Python, entonces sabrá que las últimas opciones son generalmente mucho más capaces que ggplot2.
Sin embargo, quizás R es más fácil de aprender y lo uso con frecuencia en casos en los que aún no estoy muy familiarizado con los procedimientos de modelado. En ese caso, la profundidad de las bibliotecas estadísticas de R es inmejorable. Idealmente, conocería ambos lo suficientemente bien como para poder usarlos cuando sea necesario.
fuente
Para aquellos que tienen que trabajar con Windows, Anaconda ( https://store.continuum.io/cshop/anaconda/ ) realmente ayuda mucho. Instalar paquetes en Windows fue un dolor de cabeza. Con Anaconda instalado, puede configurar un entorno de desarrollo listo para usar con una sola línea.
Por ejemplo, con
Todos estos paquetes se buscarán e instalarán automáticamente.
fuente
Python tiene un largo camino por recorrer antes de que pueda compararse con R. Tiene significativamente menos paquetes que R y de menor calidad. Las personas que se apegan a lo básico o confían solo en sus bibliotecas personalizadas probablemente podrían hacer su trabajo exclusivamente en Python, pero si usted es alguien que necesita soluciones cuantitativas más avanzadas, me atrevo a decir que nada se acerca a R por ahí.
También se debe tener en cuenta que, hasta la fecha, Python no tiene un IDE científico adecuado al estilo Matlab comparable a R-Studio (por favor no diga Spyder) y necesita resolver todo en la consola. En términos generales, toda la experiencia de Python requiere una buena cantidad de "geekness" que a la mayoría de las personas les falta y no les importa.
No me malinterpreten, me encanta Python, en realidad es mi lenguaje favorito que, a diferencia de R, es un lenguaje de programación real . Aún así, cuando se trata de análisis de datos puros, soy dependiente de R, que es, con mucho, la solución más especializada y desarrollada hasta la fecha. Uso Python cuando necesito combinar análisis de datos con ingeniería de software, por ejemplo, crear una herramienta que realice la automatización de los métodos que programé por primera vez en un script R sucio. En muchas ocasiones utilizo rpy2 para llamar a R desde Python porque en la gran mayoría de los casos los paquetes R son mucho mejores (o no existen en Python). De esta manera trato de obtener lo mejor de ambos mundos.
Todavía uso Matlab para el desarrollo puro de algoritmos, ya que me encanta su sintaxis y velocidad de estilo matemático.
fuente