2013-03-26 17 views
13

Ho scritto un notebook ipython, che analizza un set di dati. Ora voglio usare questo codice per eseguire il loop su diversi set di dati.Eseguire parti di un notebook ipython in un loop/con un altro parametro di input

Il codice è suddiviso in circa 50 celle (inclusi commenti, spiegazioni markdown, ...). C'è un modo per eseguire parti di un notebook in un ciclo o eseguire un intero notebook con parametri di input diversi?

Non voglio unire tutte le celle in una funzione o scaricare il codice come script python, poiché mi piace molto eseguire (e sperimentare) parti dell'analisi eseguendo solo determinate celle.

Fondamentalmente le sue parti di refactoring di uno script in una funzione e il richiamo della funzione in un ciclo, solo che le "parti dello script" sono celle del notebook.

risposta

15

Quello che faccio di solito in questi scenari è racchiudere le celle importanti come funzioni (non è necessario unirle) e disporre di una determinata cella master che itera su un elenco di parametri e chiama queste funzioni. Per esempio. questo è ciò che una "cellula master" si presenta come in uno dei miei quaderni:

import itertools 
# parameters 
P_peak_all = [100, 200] 
idle_ratio_all = [0., 0.3, 0.6] 
# iterate through these parameters and call the notebook's logic 
for P_peak, idle_ratio in itertools.product(P_peak_all, idle_ratio_all): 
    print(P_peak, idle_ratio, P_peak*idle_ratio) 
    print('========================') 
    m_synth, m_synth_ns = build_synth_measurement(P_peak, idle_ratio) 
    compare_measurements(m_synth, m_synth_ns, "Peak pauser", "No scheduler", file_note="-%d-%d" % (P_peak, int(idle_ratio*100))) 

È ancora possibile avere alcuni dati trascinando tutto il notebook (cioè chiamare ogni funzione nella parte inferiore della cella con i dati) di essere in grado di testare le cose dal vivo per le singole cellule. Ad esempio, una cella potrebbe indicare:

def square(x): 
    y = x**2 
    return y 
square(x) # where x is your data running from the prior cells 

Che consente di eseguire esperimenti dal vivo e di chiamare ancora la funzionalità generica dalla cella master.

So che è un lavoro aggiuntivo per refactoring del notebook utilizzando le funzioni, ma ho trovato che aumenta la leggibilità del mio notebook che è utile quando si torna ad esso dopo un periodo più lungo ed è più facile convertirlo in un "corretto" script o modulo se necessario.

+0

Quindi, per chiarire, vuoi dire convertire le celle in funzioni? Interessante ... +1 – Amyunimus

+0

Esattamente. Anche se forse non devi farlo per tutte le celle, ma solo per le celle che effettivamente modificano i dati che vengono utilizzati in seguito. In alcune celle stai forse solo facendo esplorazioni e visualizzazioni di dati "una tantum". – metakermit

+2

C'è anche un'estensione "cell to function", che può fare parte del lavoro. Vedi questo quaderno di esempio: http://nbviewer.ipython.org/github/takluyver/cell2function/blob/master/Cell2function%20demo.ipynb –

Problemi correlati