Entre Matlab y Python, ¿qué lenguaje es bueno para el análisis estadístico?


17

Entre Matlab y Python, ¿qué lenguaje es bueno para el análisis de datos estadísticos generales? ¿Cuáles son los pros y los contras, aparte de la accesibilidad, para cada uno?


2
Esto debería ser wiki de la comunidad, IMO.
Shane

¿Te gustaría explicar por qué no puedes mirar también a R?
Dirk Eddelbuettel

@DirK: Casi no he oído hablar de R. Además, quería aprender un lenguaje de programación como Python, y de nuevo, no creo que R esté cerca de Python, en mi opinión. Espero que responda tu pregunta.

2
Mire un poco aquí y en StackOverflow en términos de lo que la gente recomienda para el análisis estadístico y la programación . Muchos de nosotros sentimos que no hay una alternativa real a R. Pero al igual que la belleza, esto está en el ojo del espectador, así que buena suerte.
Dirk Eddelbuettel

En términos de geoestadística (en la que hice mi doctorado), creo que R está muy bien equipado (ver gstat, geoR, etc.). Al menos no conozco una cobertura tan completa de las técnicas geoestadísticas en python. ¿Y por qué R "no está cerca de Python"? He usado ambos y para los geostats siento que R es claramente superior.
Paul Hiemstra

Respuestas:


29

Como usuario incondicional de Matlab durante los últimos 10 años, le recomiendo que aprenda Python. Una vez que esté suficientemente capacitado en un idioma, cuando trabaje en un idioma que esté aprendiendo, parecerá que no está siendo lo suficientemente productivo y volverá a utilizar su mejor idioma predeterminado. Como mínimo, sugeriría que intentes ser igualmente competente en varios idiomas (también sugeriría R).

Lo que me gusta de Matlab:

  • Soy competente en ello.
  • Es la lengua franca entre los analistas numéricos.
  • La herramienta de creación de perfiles es muy buena. Esta es la única razón por la que uso Matlab en lugar de octava.
  • Hay un clon de software gratuito, octava, que cumple con la implementación de referencia.

Lo que no me gusta de Matlab:

  • No hay un buen sistema para administrar paquetes y scripts de terceros (gratuitos o de otro tipo). Mathworks controla el 'intercambio central de archivos', y la instalación de paquetes complementarios parece muy torpe, nada como el excelente sistema que tiene R. Además, Mathworks no tiene ningún incentivo para mejorar esta situación, ya que ganan dinero vendiendo cajas de herramientas, que compiten con paquetes gratuitos;
  • Las licencias para computación paralela en Matlab son increíblemente caras;
  • Gran parte del código m, incluidas muchas de las funciones de la caja de herramientas, y algunas incorporadas, fueron diseñadas para ser obviamente correctas, a expensas de la eficiencia y / o usabilidad. El ejemplo más evidente de esto es la medianfunción de Matlab , que realiza una especie de datos y luego toma el valor medio . Este ha sido el algoritmo incorrecto desde los años 70.
  • guardar gráficos en un archivo es poco fiable en Matlab.
  • No he encontrado que mi experiencia de usuario haya mejorado en los últimos 5 años (cuando comencé a usar Matlab en lugar de octava), a pesar de que Mathworks continúa agregando campanas y silbatos. Esto indica que no soy su cliente objetivo, sino que buscan expandir la participación de mercado al empeorar las cosas para los usuarios avanzados.
  • Ahora hay 2 formas de hacer programación orientada a objetos en Matlab, lo cual es confuso en el mejor de los casos. El código heredado que usa el estilo antiguo persistirá por algún tiempo.
  • La interfaz de usuario de Matlab está escrita en Java, que tiene ideas desagradables sobre la gestión de la memoria.

+1, buenos puntos. Sobre esto: "ideas desagradables sobre la gestión de la memoria" ... interesante, ¿puede elaborar?
ars

1
mi memoria va a alguna parte ; mi experiencia con Java fuera del uso de Matlab indica que es el culpable probable, y correr -nojvmparece ayudar ...
shabbychef

Mi ejemplo favorito de los extraños códigos incorporados de MATLAB es la reproducción aleatoria, que reordena los datos con el orden devuelto ordenando un vector aleatorio recién creado.

1
@mbq: shufflepuede estar en una caja de herramientas, no es stock matlab. difícilmente podría ser peor que el incorporado, randpermque devuelve el índice de clasificación de un vector aleatorio. Una vez más, este es probablemente el algoritmo mal (que acabo de aprender acerca de la Knuth-Fisher-Yates barajo aquí en stats.SE) ..
shabbychef

1
@mbq: la otra parte buena randpermes que se ve afectada por la siembra de randn, mientras que una versión mezclada de Knuth-Fisher-Yates quizás no pueda acceder a la semilla de randn 'internamente', y una versión pura .m de shuffle probablemente Se muy lento.
shabbychef

11

Vamos a dividirlo en tres áreas (fuera de mi cabeza) donde la programación cumple con las estadísticas: procesamiento de datos, rutinas numéricas (optimización y tal) y bibliotecas estadísticas (modelado, etc.).

En el primero, la mayor diferencia es que Python es un lenguaje de programación de propósito general. Matlab es genial siempre que su mundo sea aproximadamente isomorfo a una matriz numérica fortran. Una vez que comience a lidiar con la mezcla de datos y problemas relacionados, Python eclipsa a Matlab. Por ejemplo, vea el libro de Greg Wilson: Crujido de datos: resuelva problemas cotidianos usando Java, Python y más .

En el segundo, Matlab realmente brilla con el trabajo numérico. Gran parte de la comunidad de investigación lo usa y, si está buscando, por ejemplo, algún algoritmo relacionado con un documento sobre detección comprimida, es mucho más probable que encuentre una implementación en Matlab. Por otro lado, Matlab es una especie de PHP de la informática científica: se esfuerza por tener una función para todo bajo el sol. La estética y la arquitectura resultantes son enloquecedoras si eres un geek del lenguaje de programación, pero en términos utilitarios, hace el trabajo. Mucho de esto se ha vuelto menos relevante con el auge de Numpy / Scipy, es muy probable que encuentre bibliotecas de optimización y aprendizaje automático disponibles para Python. La interfaz con C es casi tan fácil en cualquier lenguaje.

Sobre la disponibilidad de bibliotecas estadísticas para el modelado y demás, ambas carecen de algo en comparación con algo como R. (Aunque sospecho que ambas satisfarán las necesidades del 80% de las personas que realizan trabajo estadístico). Para el lado de Python, vea esta pregunta : Python como banco de trabajo de estadísticas . Por el lado de Matlab, sé que hay una caja de herramientas de estadísticas, pero dejaré que alguien más conocedor complete los espacios en blanco (mi experiencia con Matlab se limita al trabajo numérico no relacionado con las estadísticas).


Las cajas de herramientas de estadísticas en Matlab son bastante divertidas. ¿Hay algo similar para R, donde, por ejemplo, puede probar rápidamente un montón de ajustes de función diferentes (regresiones)?
Alex R.

6

También he sido un ávido usuario de Matlab por más de 10 años. Durante muchos de esos años no tuve ninguna razón para trabajar más allá de la caja de herramientas que había creado para mi trabajo. Aunque se crearon muchas funciones para una caja de herramientas, a menudo necesitaba crear algoritmos para un análisis de respuesta rápido. Dado que estos algoritmos a menudo utilizan matemática matricial, Matlab fue un candidato ideal para mi trabajo. Además de mi caja de herramientas de código de Matlab, otros en mi grupo trabajaron extensamente en Java ya que había una clara interoperabilidad entre los idiomas. Durante años estuve completamente feliz con Matlab, pero hace unos 3 años decidí comenzar la transición lenta lejos de Matlab y feliz de decir que no la he abierto en aproximadamente un año. Aquí están los motivos de mi mudanza:

  • Trabajo con sistemas informáticos en línea y fuera de línea, el sistema de licencias siempre fue un dolor de cabeza. Siempre parecía suceder que cuando más necesitábamos a Matlab, la licencia caducaría o tendría problemas de repente. Esto siempre fue un dolor de cabeza. Además, si alguna vez necesitábamos compartir código, y la otra parte no tenía licencias para las mismas cajas de herramientas, esto creó un dolor de cabeza. No es gratis
  • A menudo necesito crear presentaciones. Aunque Matlab proporciona amplias herramientas para crear figuras, lo que lo hace muy poderoso para el diseño de algoritmos, pero guardar la figura de manera que pueda insertarse en una presentación y verse bien no es una tarea sencilla. A menudo tenía que insertar un archivo EPS en Adobe Illustrator para eliminar toda la basura, arreglar las fuentes y limpiar las líneas. Sin embargo, hay algunas herramientas para ayudar con esto en el intercambio de archivos (export_fig.m).
  • A menudo obtengo código Matlab de otros. Cuando esto sucede, casi siempre lo reescribo porque: su API no es compatible con mis datos, su código no tiene sentido, es lento, no genera lo que necesito ... Básicamente, las personas que se desarrollan en Matlab son no ingenieros de software y Matlab no fomenta ningún tipo de principio de diseño.
  • Soy un usuario avanzado. Me gustan las terminales. Odio la GUI, la odio. Y cuando agregaron la cinta de estilo "windows", la odié un poco más. Básicamente, sus ajustes a la GUI y la terrible administración de memoria presionaron mi último botón y decidí irme. Usar la -nodesktopopción es buena la mayor parte del tiempo, pero tiene sus problemas.
  • Muchas posibilidades para diseñar funciones (usando OO, o diseño funcional), pero ninguna se siente bien, la mayoría se siente ad hoc. No me satisface diseñar buenas funciones en Matlab
  • La comunidad es grande, pero no es fácil de compartir y encontrar un buen código. El intercambio de archivos no es tan bueno.

Estas son solo algunas de mis muchas quejas con Matlab. Es un atributo brillante: es fácil, realmente fácil escribir código rápidamente (si no es feo). Sin embargo, lo dejé, y mi búsqueda me llevó a través de Clojure-> JavaScript-> Python <-> Julia; Sí, he estado por todos lados.

  • Clojure: hermoso lenguaje funcional. Mi razón para usar Clojure fue su capacidad de script Java. Gran parte de nuestra base de código "grande" está en Java, por lo que tiene mucho sentido. En ese momento, una gran cantidad de procesamiento científico no estaba fácilmente disponible, y tampoco mucha visualización. Pero creo que esto está cambiando.
  • Javascript: después de ver los puntos de referencia en http://julialang.org/ , y dado que definitivamente estaba interesado en la capacidad de visualización de D3 , decidí probar JavaScript. JavaScript es sorprendentemente muy rápido. Pero si realmente quieres odiarte a ti mismo, aprende JavaScript.
  • Python: Python tiene una comunidad increíble y tiene muchos proyectos geniales en curso. El IPython Notebook es sorprendente por muchas razones (una de ellas es simple copia / pasado de figuras en powerpoint). Proyectos como NumPy / SciPy / Scikit-Learn / Pandas realmente han hecho que Python sea divertido y fácil de usar. Es muy fácil de usar en múltiples núcleos o grupos. He estado muy feliz por el cambio.
  • Julia: Julia es asombrosa. Especialmente para usuarios de Matlab. Sin embargo, está en su infancia, por lo que se están produciendo muchos cambios. Uno de los principales inconvenientes de Python es que no tiene todas las funciones integradas que tiene Matlab. Claro, NumPy / SciPy trae esa funcionalidad, pero no está integrada y debes tomar decisiones sobre si ser objetos de Python puros u objetos numpy. Básicamente, Julia tiene todo lo que desearía que Python viniera de Matlab. Esperaría, pero esta es la mejor opción para los usuarios de Matlab en el futuro.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.