Analisi di prove in situ con IPython
Per una relazione geotecnica ho avuto a disposizione un campo di misure composto da: 6 CPTU, 1 DTM e 3 sondaggi. Una grande quantità di dati non c'è che dire! In quella occasione ho usato un software commerciale e un foglio di calcolo, perché il tempo era ridotto all'osso e soprattutto non avevo ancora scoperto IPython notebook. Vi mostro attraverso un breve video, quanto è facile da programmare e adatto a questo tipo di analisi.
Magari avrei potuto usare Octave (un clone di Matlab) per fare le analisi, ma probabilmente avrei perso tempo per niente. Vi faccio solo vedere la planimetria delle indagini:
Planimetria | Diagrammi realizzati dalla CPTU1 (generati da IPython e Matplotlib) |
L'idea di usare questa interfaccia mi è venuta seguendo un corso online di Coursera e chiamato High Performance Scientific Computing, Vedendo all'opera prima IPython e poi la sua interfaccia web Notebook non ho resistito alla tentazione di adattarlo alle esigenze della mia vecchia professione.
Citando l'home page del progetto, queste sono alcune sue caratteristiche:
- Shell interattive potenti (da terminale e Qt-based).
- Un blocco note basato sul browser con supporto al codice, testo, espressioni matematiche, grafici in linea ed altri contenuti multimediali.
- Supporto per la visualizzazione di dati interattivi e l'uso di strumenti per la GUI.
- Interpreti flessibili ed integrabili all'interno dei propri progetti.
- Facile da usare, con strumenti ad alte prestazioni per il calcolo in parallelo.
Ad ogni modo non voglio annoiarvi con una lunga descrizione, così ho creato un video che mostra come importare il log di una CPTU (un semplice file di testo con le misure lette dallo strumento in funzione della profondità) e qualche grafico. Dopo il video, ci sono le istruzioni per installarlo in Ubuntu (o derivate) e per lanciarlo. (09/06/2013) Alternativamente lo si può usare online, senza installare alcun file ma previa registrazione su Wakari (il Free Plan prevede 512 MB di ram e 10 GB di spazio). Prima di passare al video però riporto due siti utili:
- loadtxt() function (alcuni esempi su come importare file di testo)
- Matplotlib tutorial scritto da Nicolas P. Rougier.
Il video: carico i dati del log di una CPTU e stampo i diagrammi usando IPython notebook (NOTA: se il contenuto multimediale non dovesse funzionare, prova questo link).
Installazione
Per prima cosa si installa IPython e Matplot:
sudo apt-get install ipython
sudo apt-get install python-numpy
sudo apt-get install python-scipy
sudo apt-get install python-matplotlib
Poi si installa l'ultima versione di IPython (i seguenti comandi creeranno una nuova cartella denominata ipython):
git clone https://github.com/ipython/ipython.git
cd ipython
sudo python setup.py install
sudo python setup.py submodule
sudo python setup.py develop
Segue il file finale presente nel video (example_load_cptu_and_plot.ipynb):
{
"metadata": {
"name": "example_load_cptu_and_plot"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"A short example"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Import data from a text file (cptu1_log.txt is in the same directory). Here it is some rows:\n",
"# Depth (m)\tqc (MPa)\tfs (kPa)\tu (kPa) (The first row is commented with '#')\n",
"[...]\n",
"2\t0.07\t0.5\t30.5\n",
"2.02\t0.06\t1\t32.5\n",
"2.04\t0.07\t0.5\t35.5\n",
"2.06\t0.07\t0.5\t34\n",
"2.08\t0.07\t0.5\t32.5\n",
"2.1\t0.07\t0.5\t36.5\n",
"[...]\n",
"\n",
"So I need 4 arrays for saving all the columns. Note: \"SHIFT + RETURN\" executes the code."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"depth, qc, fs, u = loadtxt(\"cptu1_log.txt\", usecols = (0,1,2,3), unpack=True)"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"3 plot: -depth vs qc, -depth vs fs, -depth vs u"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"figure(figsize=(15,7.5), dpi=300)\n",
"\n",
"subplot(1,3,1)\n",
"title('depth vs qc')\n",
"ylabel('m')\n",
"xlabel('MPa')\n",
"plot (qc, -depth, color=\"red\", linewidth=2.5, linestyle=\"-\")\n",
"\n",
"subplot(1,3,2)\n",
"title('depth vs fs')\n",
"ylabel('m')\n",
"xlabel('kPa')\n",
"plot (fs, -depth, color=\"black\", linewidth=2.5, linestyle=\"-\")\n",
"\n",
"subplot(1,3,3)\n",
"title('depth vs u')\n",
"ylabel('m')\n",
"xlabel('kPa')\n",
"plot (u, -depth, color=\"blue\", linewidth=2.5, linestyle=\"-\")"
],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Aggiungi un commento