Valkertown Blog

I used to write about electronics…

Valkertown Blog header image 2

Maraton Programación

January 22nd, 2006 by Carlos Perilla

Desde el Jueves 19 a las 10:00 hasta el Viernes 20 a las 10:00am tuve una deliciosa maraton de programación. Se tenia que entregar un dichoso informe y el dichoso programa que habia escrito la ves pasada estaba lejos de soportar todos los diferentes análisis que se les vino a ocurrir al final…

RANT: Si MATLAB es supuestamente la mejor herramienta para analizar datos en ingenieria por que ese programa tiene tantos problemas para trabajar con archivos mixtos? Quizá fue un problema por parte del programador, pero este tiene suficiente experiencia con este programa como para decir que esta tarea es especialmente obscura. Definitivamente la capacidad de integración de MATLAB en un ambiente de producción/análisis conjunto es pobre y deja mucho que desear.

Para quienes quieran entender la idea del proyecto, es muy sencilla:

Toma de datos -> Almacenamiento y Categorización de datos -> Preprocesamiento -> Procesamiento y Análisis -> Almacenamiento y generación de reportes.

Esto resume un sistema general de trabajo, pero realmente matlab se ha quedado por fuera ya que se nego a participar rapidamente en el ciclo de forma que todo el proceso quedará completamente automatizado para poder generar reportes con muchos diferentes análisis.

Realmente me he convencido que Matlab podrá estar muy bien para estudiantes, pero cuando se trata de trabajo serio pongo en duda su útilidad, por lo que realmente pienso que nisiquiera los estudiantes deberian perder el tiempo con él.

Al final python no brillo por su velocidad en el análisis ni por su excelente uso de la memoria, pues con las cantidades de datos que se le alimentaron hicieron que varias fallas aparecieran. Sin embargo brillo por la facilidad con la que resumi casi tres meses de trabajo en matlab en 24 Horas de programación en Numeric de Python más todo el trabajo de automatización y trabajo con bases de datos. Por favor, una vez más escuchenme Open Source es simplemente mejor, no se dejen engañar por los botoncitos y los colorcitos!!!

EOR
EOT

Tags:   · · View Comments

  • ovidio

    Si la cantidad de datos para analizar es grande, y la visualizacion no cae mal dentro del proceso, es probable que Yorick pueda interesarle.

  • valkertown

    Luego de hacer más profiling, encontre que el tiempo total de calculo no resulta ser significativo en comparacion con los tiempos de write-back y generación de las gráficas. La introspección de un lenguaje como Python me hacen preferirlo sobre C para la mayoria de programas que no tengo que embeder en nada.


    Ciertamente Python no es la mejor herramienta para triturar cantidades de datos, pero el tiempo apremia y no me podia dar el lujo de hacerlo en otro lenguaje.


    Por otro lado si PostgreSQL hubiese sido mi elección para la base de datos, pero en Slack ya viene lista MySQL y como dije el tiempo apremia, espero cambiar la base de datos para los proximos analisis.


    Por ahora tengo que rediseñar la estructura de las bases de datos para minimizar los tiempos de write-back y ajustarla a los multiples analisis.


    Quizá separe el programa que escoge los datos a analizar de los analizadores y estos los haga en C, pero solo cuando el tiempo de analisis supere el tiempo de “manejo” de los datos, y el desempeño de MySQL con esta parte ha sido realmente deficiente.


    En Numeric hay muchas cosas estupidas que propician memory leaks, o comportamientos similares a estos y es particularmente lento haciendo esto:




    a= reshape(arange(XXXXXX),(d1,d2))




    Se demora casi 10 veces lo que se demora haciendo la transformada de fourier de la misma cantidad de datos.


    De cosas como esa no se salva ningún lenguaje, por lo que insisto el profiling se vuelve demasiado importante.


    EOC

  • angelripper

    Python no se caracteriza por su manejo de memoria, para manejar un lote grande de datos seria mejor algo de mas bajo nivel tipo C. Sin embargo el tiempo de programacion puede incrementarse letalmente, tambien puede probar con Java que tiene un muy buen desempenho en aplicaciones de high-throughput.


    http://evanjones.ca/python-memory.html


    Por otro lado si no va a manejar ningun tipo de integridad referencial a nivel del almacenamiento trabajar con MySQL puede ser lo mas rapido, sin embargo en mi experiencia motores mas robustos como PostgreSQL o Firebird podrian darle el mismo desempenho con mas prestaciones.

  • valkertown

    De ese tipo? Ummm no creo que haya un reemplazo, si por algo similar sería octave o scilab.

    El programa lo hice con Numeric de Python y MySQL pero los recursos se los consumio de una forma absurda. Creo que en parte es por la inexperiencia con Numeric, sin embargo haciendo profiling encontre algunos metodos deficientes dentro de este.


    Para hacer todo lo que hace Matlab no hace falta más que una colección de librerias de C y Fortran es decir:


    BLAS, LAPACK, FFTW. Dentro de lo que es opensource se encuentran librerias de c para todo tipo de calculo que se imagine por lo que no hace falta realmente escribir muchas cosas, incluso para redes neuronales y algoritmos geneticos.


    Por otro lado el proyecto continuo y el almacenar los datos en MySQL y el código en Python hizo que pudiese poner 5 computadores en paralelo a consumir el lote de datos, incluso los que usan windows. Punto para python.


    Creo que la mejor opción para esta clase de tareas al final son lenguajes de programación de verdad y escojer el conjunto de herramientas de acuerdo a los requerimientos, es decir:


    - Quiero empezar a analizar datos y obtener resultados pronto.


    - Aun tengo o no más máquina(s) que puedo incluir en el proceso de cálculo.


    Con esos dos criterios creo que ya se puede hacer una primera aproximación a decidir cuales van a ser las herramientas.


    Notese que siempre hablo de herramientas pues pienso que ninguna herramienta en particular resuelve todos los problemas y ese es el motivo del rant contra Matlab.

  • opterix

    Interesante lo que dices de Matlab… pero en tal caso, que software de este tipo recomiendas???

  • herulor

    neat

blog comments powered by Disqus