2012-09-09 11 views
12

Para mis experimentos de laboratorio, escribo pequeños programas para ayudar con el análisis de datos. Normalmente solo necesito cálculos básicos, medias, desviación estándar, ajuste de función ponderada arbitraria y trazados con barras de error y función ajustada.SciPy en lugar de GNU Octave

Con GNU Octave, puedo hacer esto. Empecé a leer más en el idioma de la misma y comencé a no gustarme sus inconsistencias y que tengo que aprender otro idioma.

Así que estoy pensando en usar Python, que estoy usando desde hace un tiempo, que SciPy y NumPy. ¿Puedo hacer esas cosas con Python fácilmente o es más costoso conseguir que el lenguaje de uso general Python haga lo que pretendo hacer?

Respuesta

20

Sí, el ecosistema de Python lo convierte en una plataforma viable para tareas cotidianas de análisis de datos, especialmente utilizando la interfaz IPython (pero me atengo a la estándar aquí). El "[no tener] que aprender otro idioma" argumento es fuerte, en mi humilde opinión, y es una de las razones por las que tiendo a usar Python para esto.

>>> import numpy as np 
>>> import scipy.optimize 

"por lo general sólo necesitan cálculos básicos"

>>> x = np.linspace(0, 10, 50) 
>>> y = 3*x**2+5+2*np.sin(x) 

"significa, desviación estándar"

>>> y.mean() 
106.3687338223809 
>>> y.std() 
91.395548605660522 

"función ponderada arbitraria apropiado"

>>> def func(x, a, b, c): 
...  return a*x**2+b+c*np.sin(x) 
... 
>>> ynoisy = y + np.random.normal(0, 0.2, size=len(x)) 
>>> popt, pcov = scipy.optimize.curve_fit(func, x, ynoisy) 
>>> popt 
array([ 3.00015527, 4.99421236, 2.03380468]) 

"parcelas con barras de error y f ajustado unción"

xerr = 0.5 
yerr = abs(np.random.normal(0.3, 10.0)) 
fitted_data = func(x, *popt) 

# using the simplified, non-object-oriented interface here 
# handy for quick plots 

from pylab import * 
errorbar(x, ynoisy, xerr=xerr, yerr=yerr, c="green", label="actual data") 
plot(x, fitted_data, c="blue", label="fitted function") 
xlim(0, 10) 
ylim(0, 350) 
legend() 
xlabel("time since post") 
ylabel("coolness of Python") 
savefig("cool.png") 

sample pic

+0

+1: respuesta agradable. – tom10

+0

¡Muchas gracias por esa respuesta detallada! Eso debería ayudarme a comenzar bastante rápido. Solo tengo una pequeña cosa que olvidé preguntar: cómo manejar las tuplas de medición y error de una manera sensata. (Pregunté eso [allí] (http://stackoverflow.com/q/12351837/653152).) –